Wstęp do programowania równoległego Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski http://www.icm.edu.pl Maciej Szpindler m.szpindler@icm.edu.pl Maciej Cytowski m.cytowski@icm.edu.pl Wersja 1.PL, Październik 2009 1
Plan Motywacja Cel wykładu Forma wykładu i zasady zaliczenia Program wykładu Wprowadzenie do programowania równoległego Abstrakcyjne modele programowania równoległego 2
Motywacja wykładu Trendy w rozwoju współczesnych procesorów Zasoby KDM - potencjał i praktyka - potrzeba popularyzacji obliczeń równoległych Programowanie równoległe - jak realizować obliczenia równoległe 3
Przykładowe projekty Blue Brain Project (EPFL & IBM) symulacje oddziaływań w sieci neuronów mózgu szczura 22.8 Tflops BG/L 100 milionów neuronów (połowa mózgu szczura) 1 PFlops 1 bilion neuronów ludzki mózg 100 bilionów neuronów Human Genome Project (ORNL) Zidentyfikowanie ok. 20 25 tys. genów tworzących ludzkie ciało Ustalenie sekwencji ok. 3 biliona związków chemicznych, które tworzą ludzkie DNA Prognozowanie pogody 48 godzinna prognoza na ok.200 rdzeniach 1,5 godziny obliczeń 4
Cel wykładu Przegląd podstawowych zagadnień związanych z obliczeniami równoległymi Prezentacja najpopularniejszych narzędzi programowania równoległego Popularyzacja programowania równoległego Udostępnienie narzędzi dla zastosowań naukowych w obliczeniach i symulacjach Nauka podstawowych metod programowania równoległego 5
Forma wykładu Wykład / laboratorium w odstępach dwu-tygodniowych 14 zajęć Zasady zaliczenia Przykładowy program do implementacji Materiały Slajdy z wykładu Skrypt Strona www 6
Program wykładu 1. Wprowadzenie do programowania równoległego 2. Architektury równoległe 3. Projektowanie algorytmów równoległych 4. Komunikacja i synchronizacja 5. Programowanie MPI 6. Programowanie Shared Memory 7. Zastosowania: ciekawe przykłady 7
Wprowadzenie do programowania równoległego 8
Programowanie współbieżne a programowanie równoległe Współbieżność i równoległość to dwie różne rzeczy Dwa zadania T1 oraz T2 są współbieżne jeśli kolejność ich wykonania w czasie nie jest zdefiniowana przed uruchomieniem, tzn: T1 może zostać uruchomione i może się zakończyć przed T2 T2 może zostać uruchomione i może się zakończyć przed T1 T1 oraz T2 mogą być uruchomione w tym samym czasie (równolegle) T1 i T2 mogą być uruchomione wymiennie (alternatywa).. inne Program na jedno-rdzeniowym jedno-wątkowym procesorze może być współbieżny ale nie równoległy Równoległość jest podzbiorem współbieżności Programowania równoległe nie jest podzbiorem programowania współbieżnego (inne techniki, modele, zagadnienia, ) Bardzo podobne zagadnienia: synchronizacja, operacje atomowe, komunikacja, 9
Czym są obliczenia równoległe? Obliczenia równoległe to takie, w których wiele operacji obliczeniowych wykonuje się jednocześnie w ramach dostępnych jednostek obliczeniowych (procesorów, rdzeni, węzłów obliczeniowych) bardzo często duże problemy obliczeniowe mogą być podzielone na mniejsze podproblemy, które mogą wykonywać się jednocześnie przez wiele lat obliczenia równoległe wykonywane były jedynie w branży HPC (High Performance Computing) Dzisiaj wiedza o programowaniu równoległym i umiejętności przeprowadzania równoległych obliczeń potrzebne są wszystkim 10
Rozwój HPC na przestrzeni lat The TOP500 Project: Looking Back over 15 Years of Supercomputing Experience Hans Werner Meuer 11
Motywacje dla obliczeń równoległych Prawo Gordona E. Moore a rok 1965 ilość tranzystorów w układach scalonych rośnie wykładniczo, podwajając się mniej więcej co dwa lata http://en.wikipedia.org/wiki/moore s_law 12
Coraz szybciej Czy możemy zbudować procesor o częstotliwości 1THz? 20 czerwca 2006 Georgia Tech i IBM przedstawiły procesor działający z częstotliwością ponad 500 GHz Wykonanie: krzem i german Chłodzenie: ciekły hel Temperatura: 4.5K ~ -268.65 C Częstotliwość w temp. pokojowej: 350GHz Pobór mocy:?? Pobór mocy: P = C V 2 F C pojemność elektryczna liczona na cykl V napięcie elektryczne F częstotliwość 7 Maj 2004 the end of frequency scaling Intel wstrzymuje rozwój technologii Tejas i Jayhawk (następców Pentium4 i Xeon) ~ 7GHz 13
Ograniczenia w budowie mikroprocesorów Power Wall zapotrzebowanie na moc rośnie wraz ze wzrostem szybkości procesora Memory Wall rosnąca dysproporcja pomiędzy szybkością procesorów a szybkością dostępu do pamięci (ograniczona przepustowość pamięci) od 1986 do 2000 roku średni roczny wzrost 50% vs 10% Multicore i architektury dedykowane AMD Barcelona QuadCore PowerXCell8i MD Grape-3 NVIDIA Fermi 14
Rodzaje równoległości Równoległość na poziomie bitów (bit-level parallelizm) zwiększanie długości słowa procesora wpływa na ilość instrukcji potrzebnych do wykonania operacji na zmiennych, których wielkość jest większa niż długość słowa Równoległość na poziomie instrukcji (instruction level parallelizm ILP) techniki implementowane zazwyczaj przez kompilator i wykorzystujące specjalną budowę mikroprocesorów, które umożliwiają uruchamianie niezależnych od siebie instrukcji równocześnie, np.: Potokowość (instruction pipelining): wykorzystanie specjalizowanych grup logicznych procesora ustawionych w potok do wykonywania podobnych operacji jedna po drugiej Pobranie instrukcji z pamięci instruction fetch (IF) Zdekodowanie instrukcji instruction decode (ID) Wykonanie instrukcji execute (EX) Dostęp do pamięci memory access (MEM) Zapisanie wyników działania instrukcji write back (WB) Wykonanie poza kolejnością (out-of-order execution): zdolność mikroprocesorów do wykonywania instrukcji poza zdefiniowaną kolejnością; kolejne instrukcje wstawiane są do bufora i uruchamiane gdy zależności są spełnione i odpowiednia jednostka wykonująca (functional unit) jest gotowa Wykonywanie spekulatywne (speculative execution): zdolność mikroprocesorów przetwarzających instrukcje potokowo do wykonywania instrukcji znajdujących się za skokiem warunkowym, co do którego jeszcze nie wiadomo, czy nastąpi 15
Rodzaje równoległości Równoległość na poziomie danych (data parallelizm) ten sam zestaw instrukcji wykonywany jest na całych blokach danych (na kilku elementach równocześnie), np.: instrukcje wektorowe SIMD Równoległość na poziomie pętli (loop-level parallelizm) iteracje konkretnej pętli w kodzie rozdzielane są pomiędzy dostępnymi jednostkami obliczeniowymi np. w postaci wątków (model OpenMP) #pragma omp parallel for for (i = 0; i < N; i++) a[i] = 2 * i; Równoległość na poziomie zadania (task parallelizm) obliczenia realizowane są przez wiele jednostek obliczeniowych realizujących różne wątki, czy procesy na tych samych lub różnych danych program:... if CPU="a" then do task "A" else if CPU="b" then do task "B" end if... end program 16
Rodzaje równoległości Równoległość na poziomie konstrukcji algorytmu Operacja wygładzania danych Input: tablica 1D z liczbami zmiennoprzecinkowymi Algorytm: każdemu elementowi tablicy przypisujemy średnią jego dwóch sąsiadów proces ten wykonujemy N-razy Output: tablica z wygładzonymi danymi Różne rozważania i optymalizacje: minimalizacja komunikacji, load balancing, 17
Obszary zastosowań Obronność i bezpieczeństwo Przeszukiwanie olbrzymich zbiorów danych Symulacje klimatu i atmosfery Dynamika molekularna Chemia obliczeniowa Bioinformatyka Fizyka wysokich energii Obliczenia inżynierskie Grafika wysokiej jakości 18
Współczesne architektury komputerów równoległych Współczesne architektury komputerowe prezentują wiele poziomów równoległości ze względu na: Architekturę jednostek obliczeniowych Architekturę dostępu do pamięci Przykład: CrayX1E tornado Każdy węzeł składa się z 4 procesorów MSP (MultiStreaming Processors). W ramach węzła dostępne jest 16GB pamięci RAM. Każdy procesor MSP składa się z 4 jednostek SSP (SingleStreaming Processors). 1 typ równoległości: jednostki wektorowe wewnątrz SSP 2 typ równoległości: automatyczne zrównoleglenie na poziomie MSP 3 typ równoległości: równoległość na poziomie węzła (model pamięci współdzielonej) 4 typ równoległości: równoległość na poziomie całego komputera (model pamięci rozproszonej) 19
Programowanie komputerów równoległych Wątki Programowanie za pomocą biblioteki POSIX threads. Podstawowe operacje: pthread_create, pthread_run, pthread_join, pthread_mutex,.. Wymiana komunikatów Programowanie za pomocą biblioteki MPI (Message Passing Interface) Podstawowe operacje: MPI_Init, MPI_Send, MPI_Recv, MPI_Barrier,.. Dyrektywy kompilatora Programowanie za pomocą OpenMP zestaw dyrektyw kompilatora. Przykład: #pragma omp parallel for for (i = 0; i < N; i++) a[i] = 2 * i; 20
Programowanie komputerów równoległych Inne bardziej egzotyczne modele programowania równoległego: łączone MPI i OpenMP UPC (Unified Parallel C) Co-Array Fortran Nowoczesne języki programowania równoległego: CUDA dla GPGPU OpenCL, Cell SuperScalar RapidMind Chapel, X10, Fortres 21
Abstrakcyjne modele programowania równoległego 22
Model idealnego komputera równoległego PRAM = Parallel Random Access Machine n jednostek obliczeniowych oraz globalna jednorodna pamięć Jednostki są sterowane wspólnym zegarem, ale mogą wykonywać różne instrukcje w każdym cyklu Wspólna pamięć P{1} P{2}.. P{n} Model PRAM ignoruje wpływ i koszty komunikacji między komponentami komputera równoległego 23
Model PRAM c.d. Modele typu PRAM: Exclusive-read, exclusive-write najbardziej restrykcyjny (i realistyczny) model, dostęp do elementu pamięci ma jednocześnie tylko jeden procesor Concurrent-read, exclusive-write jednoczesny odczyt z pamięci, zapis do pamięci na wyłączność Exclusive-read, concurrent-write Concurrent-read, concurrent-write najmniej restrykcyjny model dający największą swobodę w projektowaniu algorytmu, ale najmniej realistyczny Modele PRAM służą do projektowania i analizy algorytmów Realizacja komputera typu PRAM dla dużej liczby n, jest technicznie bardzo złożona i kosztowna 24
Klasyfikacja modeli równoległości Taksonomia Flynna SISD = Single Instruction Single Data Klasyczny komputer skalarny wykonujący kolejne instrukcje, jedna po drugiej na pojedynczych danych SIMD = Single Instruction Multiple Data Procesor / komputer potrafi wykonać pojedynczą instrukcję dla całego potoku (wektora) danych (procesor wektorowy) Zakłada równoległość danych MISD = Multiple Instruction Single Data Komputer potrafi wykonać jednocześnie zbiór instrukcji na jednej danej MIMD = Multiple Instruction Multiple Data Zbiór procesorów może wykonywać równolegle i niezależnie instrukcje na wielu danych Najczęściej spotykana forma równoległości sprzętowej 25
Klasyfikacja modeli równoległości Rozszerzenia modelu MIMD: SPMD = Single Program Multiple Data pojedynczy program jest uruchamiany w wielu kopiach na różnych zestawach danych najbardziej rozpowszechniony sposób tworzenia programów równoległych a.out a.out a.out P{1} P{2}.. P{2} dane MPMD = Multiple Program Multiple Data wiele niezależnych procesorów wykonuje równolegle różne programy 26
Formy równoległości Poziom bitów Poziom instrukcji Poziom pętli Poziom zadań Poziom programów 27
Typy architektur równoległych i hierarchia równoległości Model pamięci współdzielonej Procesory współdzielą globalną, wspólną przestrzeń adresowa szybka komunikacja i synchronizacja ograniczona liczba procesorów, pojemna pamięć CPU CPU pamięć CPU CPU 28
sieć komputerowa Typy architektur równoległych i hierarchia równoległości Model pamięci rozproszonej Procesory operują na prywatnej, lokalnej pamięci nieograniczona liczba procesorów, ograniczona ilość pamięci koszt komunikacji rośnie z liczbą procesorów błędy trudne do wyśledzenia CPU pamięć CPU CPU CPU pamięć pamięć pamięć 29
Hierarchia równoległości Procesory superskalarne i procesory wektorowe Równoległość na poziomie instrukcji Jednostki wielowątkowe Procesory wielordzeniowe Systemy SMP / Systemy NUMA Klastry Systemy masywnie równoległe Pojedynczy chip Wiele chipów Pojedynczy system Wiele systemów Pojedyncza instalacja Gridy Wiele systemów, wiele instalacji 30
Modele równoległości drobno- i gruboziarnistej Trywialna równoległość całkowita niezależność danych (embarrassingly parallel) Nie-trywialna równoległość zależność danych Intensywność komunikacji i synchronizacji procesów/zadań częsta komunikacja (fine-grained) sporadyczna komunikacja (coarse-grained) rozważana jest częstość operacji komunikacyjnych w ciągu sekundy 31
Dekompozycja problemu obliczeniowego Dekompozycja problemu - podział na podproblemy Metoda i sposób podziału determinuje typ równoległości Stopień i schemat zależności podproblemów prowadzi do projektu algorytmu Gdy znamy zależności pomiędzy podproblemami: wybieramy model algorytmu odpowiednią architekturę komputera równoległego Interesuje nas poprawne i szybkie rozwiązanie problemu "stosowane" programowanie równoległe = obliczenia równoległe Analiza problemu Podział na podzadania Projekt algorytmu Realizacja 32
Mapowanie i load-balancing Mapowanie - przydział procesów realizujących podproblemy do procesorów Równoważenie pracy pomiędzy procesorami (loadbalancing) 33
Abstrakcyjne modele algorytmów równoległych Zrównoleglenie ze względu na dane (Data Parallel) Zadania są przydzielane statycznie do procesów na podstawie podziału danych wejściowych na podzbiory identyczne operacje są wykonywane równolegle na podzbiorach danych Task Graph model Algorytm odzwierciedla graf zależności podproblemów Stosowany dla problemów dających się podzielić na kaskadę niezależnych zadań Work Pool model Zadania są dynamicznie przydzielane do procesów w celu najlepszego zrównoważenia pracy Stosowany dla gdy rozmiar danych podproblemu jest mały w porównaniu z kosztem obliczeń Master-Slave Zakłada podział na wyróżnione procesy rozdzielające pracę (master) i wykonujące obliczenia (slave) Pipeline/Stream processing Strumień danych przepływa przez kolejne procesy przetwarzające 34
Aspekty technologiczne obliczeń równoległych Nowe technologie wprowadzają nowe narzędzia dla programistów Czas życia niektórych narzędzi jest krótki Nie wszystkie rozwiązania są przenaszalne pomiędzy różnymi architekturami Przykładowo: Unified Parallel C, co-array Fortran Ograniczenia technologiczne zmuszają konstruktorów do wprowadzania coraz bardziej skomplikowanych rozwiązań Hierarchiczna pamięć Mechanizmy spójności Wydajność kontra niezawodność Ze względów ekonomicznych w obliczeniach równoległych wprowadza się rozwiązania masowe dominacja klastrów nad superkomputerami obliczenia na kartach graficznych i innych akceleratorach 35
Skalowalność i Prawo Amdahla Speed-up przyśpieszenie - stosunek czasu wykonania algorytmu i liczby użytych procesów Skalowalność zmiana czasu wykonania algorytmu ze wzrostem liczby procesów Algorytm równoległy jest uznawany za optymalny gdy jego skalowalność jest bliska liniowej W zastosowaniach znane jest mało algorytmów optymalnych dla liczby procesorów większej od kilkunastu Prawo Amdahla Określa maksymalny możliwe przyśpieszenie algorytmu o określonej części sekwencyjnej (nierównoległej) 36
Prawo Amdahla Prawo Amdahla Potencjalne możliwe przyśpieszenie S algorytmu o jest równe: n liczba procesów T S( n) 1 T T_ - czas wykonania algorytmu n F 1 1 F n F udział części nierównoległej http://en.wikipedia.org/wiki/parallel_computing 37
Prawo Amdahla http://en.wikipedia.org/wiki/parallel_computing 38
Analiza złożoności Analiza złożoności algorytmu równoległego jest znacznie trudniejsza niż w przypadku sekwencyjnym Definicja złożoności/wydajności algorytmu (?) Musi zawierać czas wykonania oraz liczbę użytych procesów Powinna odwoływać się do wydajności odpowiedniego algorytmu sekwencyjnego Jak zmienia się koszt algorytmu ze zmianą rozmiaru danych wejściowych? Znajomość systemu i jego architektury W realiach czas wykonania może się znacznie różnić od wynikającego z analizy Wpływ i uwarunkowanie sprzętowe Szybkość komunikacji Prędkość przesyłu transfer rate Opóźnienia - latency Czas synchronizacji rośnie (zwykle nieliniowo) z liczbą procesorów Operacje komunikacyjne mogą być wykonywane nie-deterministycznie 39
Laboratorium Dostęp do komputerów w laboratorium: Wypełniamy pola: Nazwisko i imię Temat grantu: Laboratorium COPR-OG Adres poczty elektronicznej Kierownik grantu: Maciej Szpindler Proponowany identyfikator max 8 znaków ascii Hasło początkowe Pytania, problemy: m.szpindler@icm.edu.pl m.cytowski@icm.edu.pl 40