Paralel Programlama ve MPI Gökçen Eraslan gokcen.eraslan ~ gmail nokta com.

Slides:



Advertisements
Benzer bir sunumlar
PARALEL HESAPLAMA ŞEYMA ŞAFAK
Advertisements

Yazılım Geliştirme ve Java
Bilgisayar Programlama I
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
TEKNOLOJİ FAKÜLTESİ MEKATRONİK MÜHENDİSLİĞİ BÖLÜMÜ
Bilgisayar Yapısı-Genel
Bölüm 4 – Kontrol İfadeleri:1.kısım
Bölüm 2: Program Denetimi
Dağıtık Simülasyon Sistemlerinde Sanal Global Zaman Hesaplamaları
Mete Özay, Tuğba Taşkaya Temizel Enformatik Enstitüsü ODTÜ ODTÜ Kampüs Izgara Hesaplama Uygulaması.
Bölüm 1: Introductions (Tanıtım,Tanım)
Thread (İş parçacığı/iplik)
Ayhan KARGIN Bilgisayar Mimarisi Dersi
Türkiye’de Yüksek Başarımlı Hesaplama
Bilgi Teknolojisinin Temel Kavramları
CLUSTER COMPUTİNG (KÜME HESAPLAMA )
Fork and Join Framework
EGEE-II INFSO-RI Enabling Grids for E-sciencE EGEE and gLite are registered trademarks Paralel Hesaplama Onur Temizsoylu Grid ve.
CPU (Merkezi İşlem Ünitesi)
EGEE-II INFSO-RI Enabling Grids for E-sciencE EGEE and gLite are registered trademarks Küme Bilgisayarlar Onur Temizsoylu Grid ve.
Nesneye Dayalı Programlama
Küme Bilgisayarlarda PBS Kuyruk Sistemi
Intel P6 Architecture Mustafa Çayır.
MPI İle Paralel Programlama Tunahan Altıntop
Yazılım Gelişimi. Donanım gelişimine paralel olarak süren yazılım gelişimi, son on yılda kayda değer bir ivmelenme ile bilgisayarları, herhangi bir uzmanlık.
Bilgisayar Programlama
Paralel Programlamaya Giriş
Kontrol Yapıları ve Döngüler
EGEE-III INFSO-RI Enabling Grids for E-sciencE EGEE and gLite are registered trademarks Giriş ve Motivasyon Onur Temizsoylu BAŞARIM09.
Ümran Onay.
PYTHON ILE PARALEL PROGRAMLAMA
GRİD HESAPLAMA PARALEL HESAPLAMA
Outline 4.1 Giriş 4.2 Algoritmalar 4.3 Pseudocode 4.4 Kontrol İfadeleri 4.5 if tek-seçimli ifadeler 4.6 if else seçimli ifadeler 4.7 while döngü ifadeleri.
Türkiye’de Yüksek Başarımlı Hesaplama Prof. Dr. Cevdet Aykanat Bilkent Üniversitesi Bilgisayar Mühendisliği Bölümü.
BİL542 PARALEL PROGRAMLAMA
Mobil Uygulama Geliştirme
Bilgisayar Sistemlerine Giriş
Chapter 5: Threads (İş Parçacıkları)
Bugünkü Konular Döngüler ve Akış Diyagramları C de Döngü Tanımlama
Bilgisayar Grafikleri Ders 12: OpenGL_5 Örnekler
THREADS (İŞ PARÇACIKLARI)
Veri Yapıları ve Algoritmalar
BİLGİSAYAR MİMARİLERİ 12.Hafta: Çok İşlemcili Sistemler
BİLGİSAYAR MİMARİLERİ 1.Hafta: Bilgisayar Mimarisine Giriş
Adım Adım Algoritma.
BİLGİSAYAR MİMARİLERİ 13
C. Dennis Ritchie 9 Eylül ö. 12 Ekim 2011.
Hafta2 Rekürsif Algoritmalar
Genel Kavramlar Bölüm - 1. YAZILIM Bilgisayara işlemler yaptırabilmek ve karar verdirtebilmek için yazılan kalıplara denir. Yazılım, genel olarak donanım.
Barış Ceviz Yazılım Geliştiricisi Yazılım, Yazılımcı, Yazılım Dilleri.
Algoritma Analizi Algoritma Algoritma bir problemi çözmek için izlenen komutlar kümesidir. Verilen bir problemin birden fazla çözümü dolayısıyla.
JAVA 1. GİRİŞ & TARİHÇE Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmıştır. Açık kodlu. Nesneye yönelik. Düzlemden.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
SÜPERBİLGİSAYARLAR ve BEOWULF KÜMELERİ Niyazi ELVAN.
PARALEL HESAPLAMA Dr. Ali Evren Göksungur.
İnönü Üniversitesi Bilgisayar Mühendisliği Bölümü
Paralel Programlamaya Giriş
C Programlama Dili Bilgisayar Mühendisliği.
BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar
MALTEPE ÜNİVERSİTESİ Paralel Hesaplama MATLAB ve Paralel Hesaplama
DİL ÇEVRİMİ Yüksek düzeyli bir dilde yazılmış bir program ancak makine diline çevrilerek bir bilgisayarda çalıştırılabilir.
Niyazi ELVAN – YTÜ BEOWULF KÜMELERİ Niyazi ELVAN – YTÜ Akademik Bilişim 2007 , Kütahya.
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
Bilgisayar Bilimi Problem Çözme Süreci-2.
Bilgisayar Mühendisliğine Giriş
Bilgisayar Mühendisliğine Giriş
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

Paralel Programlama ve MPI Gökçen Eraslan gokcen.eraslan ~ gmail nokta com

Gökçen Eraslan - Paralel Programlama ve MPI 2 Konu başlıkları ● Paralel hesaplama ● Hızlanma ● Paralel bilgisayarlar ● Ortak bellekli sistemler ve programlama ● Dağıtık bellekli sistemler ve programlama ● Dağıtık ortak bellekli sistemler ve progamlama ● Kümeler (Clusters) ● İleti temelli (message-passing) programlama ● MPI

Gökçen Eraslan - Paralel Programlama ve MPI 3 Daha Fazla Hız ● Mevcut hesaplamayı daha hızlı yapmak her zaman en doğal istek ● Özellikle modellemeler, mühendislik uygulamaları ve bilimsel uygulamalarda daha yüksek hıza ihtiyaç duyulmakta (need for speed :) ● DNA modellenmesi, hava tahmini* vs. ağır problemlere örnek ● Her hesaplama için bir “tahammül” sınırı var

Gökçen Eraslan - Paralel Programlama ve MPI 4 Süper Kahraman: Paralel Hesaplama ● Paralel hesaplama: Bir problemi, birden fazla bilgisayar ve/veya işlemci kullanarak çözmek Yani ? ● Daha hızlı hesaplama: Basit, 5 bilgisayar, 1 bilgisayarın yaptığı bir işi 5 kat daha kısa sürede yapar. (Yalan*) ● Paralel hesaplamanın temel taşları: ● İletişim ● Senkronizasyon * 1 kadın, 9 ayda 1 çocuk doğurabilir ama 9 kadın 1 ayda 1 çocuk doğuramaz

Gökçen Eraslan - Paralel Programlama ve MPI 5 Hızlanma S(p) hızlanmayı (speedup) ifade eder. Tek işlemcide bilinen en iyi seri algoritma kullanılır. (adil kıyaslama için) Paralelde kullanılan algoritma ise (muhtemelen) farklıdır. S(p) = Tek işlemcide çalışma zamanı (en iyi seri algoritma ile) p adet işlemcide çalışma zamanı tsts tptp =

Gökçen Eraslan - Paralel Programlama ve MPI 6 Hızlanma - 2 p adet işlemciyle p kat hızlanılabilir. (doğrusal hızlanma) Daha fazlası mümkün mü? Evet! Nasıl?! Daha fazla hafıza Gerekircisiz (nondeterministic) algoritmalar ✔ Doğrusal arama örneği ilerde

Gökçen Eraslan - Paralel Programlama ve MPI 7 Hızlanma - 3 Amdahl Yasası Seri kısım Paralelleştirilebilen kısım (a) Tek işlemci / bilgisayar (b) Çok işlemci / bilgisayar f t s (1 - f ) t s tsts (1 - f ) t s / p p işlemci tptp Sonuç ?

Gökçen Eraslan - Paralel Programlama ve MPI 8 Hızlanma: Bu eşitlik Amdahl Yasası olarak bilinir. t s p ft s + ( 1- f ) t s /p 1 + ( p - 1) f = = S(p)

Gökçen Eraslan - Paralel Programlama ve MPI 9 İşlemci sayısına göre hızlanma f = 20% f = 10% f = 5% f = 0% İşlemci sayısı Hızlanma Neden? İletişim masrafı

Gökçen Eraslan - Paralel Programlama ve MPI 10 Doğruötesi (SuperLinear) hızlanma örneği - Arama (a) Seri - Her alt uzay, sırayla aranır. tsts t s /p Başlangıç  t Bulundu! xt s / p Arama alt uzayı

Gökçen Eraslan - Paralel Programlama ve MPI 11 (b) Paralel – Her alt uzayda aynı anda arama yapılır Bulundu!  t

Gökçen Eraslan - Paralel Programlama ve MPI 12 Bu durumda hızlanma: Olur, ve D t → 0, S(p) →  DtDt = S(p) x t s x p + D t

Gökçen Eraslan - Paralel Programlama ve MPI 13 Paralel Bilgisayarlar İki temel tür: ● Ortak bellekli (shared memory) sistemler ● SMP (symmetric multiprocessing) ● NUMA (Non-Uniform memory access) ● Dağıtık* bellekli (distributed memory) sistemler ● Kümeler ● MPP (massively parallel processors) * Bildiğimiz dağıtık kavramı değil! Ayrı ayrı bellekleri kullandıklarını belirtir. Intel Core serisi

Gökçen Eraslan - Paralel Programlama ve MPI 14 Ortak Bellekli Sistemler Çok işlemcili bir sistem yaratmanın akla gelen ilk yolu: Tüm bellek ve işlemcileri birbirine bağlamak :) İşlemciler Bağlayıcı (interconnect) ağ Bellek modülleri Tek adres uzayı ● Ölçeklenme sorunu! <~100 ● >100 (massively parallel) için dağıtık bellek şart

Gökçen Eraslan - Paralel Programlama ve MPI 15 Ortak Bellekli Sistemler - 2 ● Pentium Core Duo/Quad İşlemcilerOrtak bellek Yol (bus) Örnek sistem:

Gökçen Eraslan - Paralel Programlama ve MPI 16 Pentium Core 2 Quad İşlemci L2 Önbellek Yol arayüzü L1 Önbellek İşlemci L2 Önbellek Yol arayüzü L1 Önbellek İşlemci L2 Önbellek Yol arayüzü L1 Önbellek İşlemci L2 Önbellek Yol arayüzü L1 Önbellek Bellek denetleyicisi Bellek İşlemci/bellek yolu Ortak Bellek

Gökçen Eraslan - Paralel Programlama ve MPI 17 Nasıl Programlamalı? Bir sürü yolu mevcut: Thread'ler – programcı, programı eşzamanlı çalışacak parçalara ayrıştırır. Bu parçalar (threadler) aynı belleği kullandığı için dışarda(heap, global) tanımlanan herşeye rahatça erişebilirler. Kontrol sende! Misal, Pthreads. Hemen her uygulamanın paralellik ihtiyacı karşılanabilir. Seri programlama dilleriyle yazılan programları, derleyici direktifleri yoluyla paralelleştirerek, bu direktiflerden anlayan bir derleyici kullanmak – kodu paralelleştirmek programcı ve derleyicinin ortak çalışmasıyla gerçekleştirilir Misal OpenMP - OpenMP derleyicisiyle kullanılır, pilleri içindedir (özünde thread'leri kullanır)

Gökçen Eraslan - Paralel Programlama ve MPI 18 #pragma omp parallel shared(a,b,c,nthreads,chunk) private(i,tid) { tid = omp_get_thread_num(); if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); } printf("Thread %d starting...\n",tid); #pragma omp for schedule(dynamic,chunk) for (i=0; i<N; i++) { c[i] = a[i] + b[i]; printf("Thread %d: c[%d]= %f\n",tid,i,c[i]); } } /* end of parallel section */ OpenMP example

Gökçen Eraslan - Paralel Programlama ve MPI 19 Nasıl Programlamalı? - 2 Seri programlama dillerini, paralelden anlayacak şekilde genişleterek [yazımına (syntax) müdahale ederek] bir dil türevi oluşturmak Misal UPC (Unified Parallel C) - UPC derleyicisi gerektirir, kısaca paralel C türevi. Paralelliği yazım (syntax) seviyesinde desteklemekte Tamamıyla paralel yeni bir programlama dili geliştirmek – derleyici her işlemci için ayrı program üretir. Misal (rahmetli) Occam – 80'lerde çıktı, artık pek sık kullanılmıyor

Gökçen Eraslan - Paralel Programlama ve MPI 20 // vect_mat_mult.c #include shared [THREADS] int a[THREADS][THREADS]; shared int b[THREADS], c[THREADS]; void main (void) { int i, j; upc_forall( i = 0 ; i < THREADS ; i++; i) { c[i] = 0; for ( j= 0 ; j< THREADS ; j++) c[i] += a[i][j]*b[j]; } UPC Örneği: PROC producer (CHAN INT out!) INT x: SEQ x := 0 WHILE TRUE SEQ out ! x x := x + 1 : PROC consumer (CHAN INT in?) WHILE TRUE INT v: SEQ in ? v.. do something with `v' : PROC network () CHAN INT c: PAR producer (c!) consumer (c?) : occam Örneği

Gökçen Eraslan - Paralel Programlama ve MPI 21 Dağıtık Bellekli Sistemler Tüm işlemci/bilgisayarlar bir bağlayıcı ağ (interconnect network) ile bağlı: İşlemci Bağlayıcı ağ* Yerel bellek Bilgisayarlar İletiler * Mesh, hypercube, crossbar, tree vs. ● Her işlemci, yerel belleğine doğrudan, diğer belleklere ise oradaki işlemcilere ileti yollayarak erişir

Gökçen Eraslan - Paralel Programlama ve MPI 22 Dağıtık Bellekli Sistemler - 2 ● İleti-temelli çoklubilgisayarlar (message-passing multicomputers), yerel bellekli çoklubilgisayarlar diye de bilinirler ● Nasıl programlamalı? ● İleti temelli (message-passing) iletişim kullanılır. ● MPI ve eski dost PVM ● ~1000 işlemcili (massively) paralel sistemlerde kullanılır ● Ortak bellekte de kullanılabilir

Gökçen Eraslan - Paralel Programlama ve MPI 23 Dağıtık Ortak Bellekli Sistemler Bağlı bir grup bilgisayarı (ya da aynı makinedeki işlemci/bellek çiftlerini), yerel belleklerin tümünü, tek bir ortak bellekmiş gibi tek adres uzayı içinde kullanacak şekilde biraraya getirilmesiyle oluşturulur. Tüm ortak bellek programlama yöntemleri caizdir. İşlemci Bağlayıcı ağ Ortak bellek Bilgisayarlar İletiler ● Kolaylık, çoğu zaman az performansla cezalandırılır

Gökçen Eraslan - Paralel Programlama ve MPI 24 Flynn’in Sınıflandırması Flynn (1966) komut ve veri akışını temel alarak bilgisayarlar için bir sınıflandırma yarattı SISD SIMD MIMD SPMD MPMD Şimdiye kadar bahsettiğim tüm paralel sistemler! (Single Instr. Single Data)(Single Instr. Mult. Data) (Mult. Instr. Mult. Data) (Mult. Program Mult. Data) (Single Instr. Mult. Data) MPI Tek çekirdek/işlemcili bilgisayarlar Programlama modelleri MMX, SSE vs.

Gökçen Eraslan - Paralel Programlama ve MPI 25 Kümeler (Clusters) ● Birbirine bağlı bilgisayarlar, 90'ların başından itibaren yüksek başarımlı hesaplamada (high performance computing) pahalı süper bilgisayarlara sıkı rakip olmaya başladılar. Misal NASA Beowulf* procesi, Berkeley NOW procesi vs. ● Neden? ● Gayet ucuz! ● Yeni çıkan işlemcilerden direk faydalanılabilir ● Ucuz ağ teknolojileri * Bu ad, artık piyasada bulunan bilgisayarlarla kurulan kümelerle özdeşleşmiş durumda: Beowulf kümeleri. Bu tip kümelerde, sıklıkla PC+ Linux + Ethernet üçlüsü kullanılır.

Gökçen Eraslan - Paralel Programlama ve MPI 26 Kümeler için geliştirme araçları ● Evet yine onlar :) ● Parallel Virtual Machine (PVM) – 80'lerde geliştirildi ve çok meşhurladı. ● Message-Passing Interface (MPI) – 90'larda geliştirildi, çoğu alanda PVM'den üstün, misal: ● Birçok kaliteli implementasyonu var ● Taşınabilir ● Yüksek başarımlı iletişim ● Özetle ikisi de, kullanıcı seviyesinde (user space) ileti-temelli programlama sağlamakta. C, Fortan gibi dillerde çalışabilmekte. ● Kümelerde ayrıca OpenMP + MPI hibrit çözümü de sık kullanılır

Gökçen Eraslan - Paralel Programlama ve MPI 27 Adanmış Küme Modeli Adanmış Küme (Dedicated Cluster) Cin Ali Switch Ana bilgisayar Bilgisayarlar Dış ağ

Gökçen Eraslan - Paralel Programlama ve MPI 28 TOP500 ● Dünyadaki en hızlı süperbilgisayarların listesi ● ● Kasım 2006'ya göre, listenin ● %72'si küme – toplam işlemci! ● %21'i MPP – toplam işlemci ● %6'sı Constellation (SMP cluster) ● Türkiye'den sadece İTÜ: 1 bilgisayar

Gökçen Eraslan - Paralel Programlama ve MPI 29 İleti Temelli Hesaplama ● Programlama modelleri: MPMD ya da SPMD Kaynak dosya Çalıştırılabilir Derlenir Çalıştırılabilir Kaynak dosya Kaynak dosya Derlenir P P P P MPI

Gökçen Eraslan - Paralel Programlama ve MPI 30 İleti Temelli Hesaplama - 2 Önemli rutinler: ● İletişim rutinleri ● Noktadan-noktaya gönder/al rutinleri ● Senkron (synchronous) ● Asenkron (asynchronous) ● Bloke eden (blocking) ● Bloke etmeyen (nonblocking) ● Grup içi gönder/al rutinleri ● Yayın (broadcast) ● Bölerek gönderme (scatter) ● Toplayarak alma (gather) ● Senkronizasyon rutinleri ● Barrier

Gökçen Eraslan - Paralel Programlama ve MPI 31 MPI (Message Passing Interface) ● Bir grup akademisyen ve çeşitli şirketlerden katılımcılar tarafından ● Yaygın kullanım ve ● Taşınabilirlik amaçlanarak oluşturulan bir kütüphane standardıdır. ● Sadece rutinleri belirler, implementasyonla alakası yoktur. ● Zibille bedava ve de özgür implementasyonu mevcut ● Sürüm 1'de sadece statik süreç oluşturma vardı ● Sürüm 2'de dinamik olarak da kullanılabilmekte

Gökçen Eraslan - Paralel Programlama ve MPI 32 MPI - Örnek int main (int argc, char *argv[]) { MPI_Init(&argc, &argv);. MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* kimim ben? */ if (myrank == 0) master(); else slave();. MPI_Finalize(); }

Gökçen Eraslan - Paralel Programlama ve MPI 33 MPI – Diğer Rutinler ● MPI_Send(buf, count, datatype, dest, tag, comm) ● Bloke eden gönder rutini ● MPI_Recv(buf, count, datatype, src, tag, comm, status) ● Bloke eden alma rutini ● MPI_Isend (...) / MPI_Irecv(...) - bloke etmeyen gönder/al ● MPI_Wait() ve MPI_Test() ile denetlenebilirler ● MPI_Bcast() / MPI_Gather() / MPI_Scatter() ● MPI_Reduce() - MPI_Gather gibi ama bir işlem yaparak alır ● MPI_Barrier() - Grup senkronizasyonu * ● MPI_SendRecv() - İkili senkronizasyon

Gökçen Eraslan - Paralel Programlama ve MPI 34 MPI - İmplementasyonlar ● MPICH ● www-unix.mcs.anl.gov/mpi/mpich ● LAM-MPI ● ● OpenMPI ● ● Optimum MPI projesi ● Pardus pakedi mevcut ● FT-MPI, LA-MPI, PACX-MPI... ● Fortran, C++, Python, Java vs. bindingleri mevcut

Gökçen Eraslan - Paralel Programlama ve MPI 35 #include “mpi.h” #include #define MAXSIZE 1000 void main(int argc, char **argv) { int myid, numprocs; int data[MAXSIZE], i, x, low, high, myresult, result; char fn[255]; char *fp; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); if (myid == 0) { /* Open input file and initialize data */ strcpy(fn,getenv(“HOME”)); strcat(fn,”/MPI/rand_data.txt”); if ((fp = fopen(fn,”r”)) == NULL) { printf(“Can’t open the input file: %s\n\n”, fn); exit(1); } for(i = 0; i < MAXSIZE; i++) fscanf(fp,”%d”, &data[i]); } MPI_Bcast(data, MAXSIZE, MPI_INT, 0, MPI_COMM_WORLD); /* broadcast data */ x = MAXSIZE/numprocs; /* Add my portion Of data */ low = myid * x; high = low + x; myresult = 0; for(i = low; i < high; i++) myresult += data[i]; printf(“I got %d from %d\n”, myresult, myid); /* Compute global sum */ MPI_Reduce(&myresult, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0) printf(“The sum is %d.\n”, result); MPI_Finalize(); } MPI – Örnek program

Gökçen Eraslan - Paralel Programlama ve MPI 36 MPI – Derleme & Çalıştırma ● ssh / rsh hazırlanır ● Hesaplamada kullanılacak bilgisayarların listesi (hostfile) hazırlanır ● mpicc ile programlar derlenir ● mpirun ile çalıştırılır

Gökçen Eraslan - Paralel Programlama ve MPI 37 Bağlantılar ● Barry Wilkinson, Michael Allen - Parallel Programming kitabının sitesi ● ● Wikipedia ● ● MPI: Complete Reference ●

Gökçen Eraslan - Paralel Programlama ve MPI 38 Sorular ?

Gökçen Eraslan - Paralel Programlama ve MPI 39 Teşekkürler Korsan değil, özgür yazılım!