Tworzenie programów równoległych – cd.
Transkrypt
Tworzenie programów równoległych – cd.
Tworzenie programów równoległych – cd. Krzysztof Banaś Obliczenia równoległe 1 Metodologia programowania równoległego ➔ Przykłady podziałów zadania na podzadania: Podział ze względu na funkcje (functional decomposition): • standardowe złożone aplikacje (np. z obsługą plików, korektą poprawności w trakcie pracy itp.) • złożony problem optymalizacji Podział struktury danych (data decomposition) • sortowanie tablic • rozwiązywanie układów równań liniowych Podział w dziedzinie problemu (domain decomposition) • symulacje zjawisk fizycznych w przestrzeni (wykorzystanie podziału geometrycznego – geometric decomposition) • rozwiązywanie układów równań liniowych Podział złożony, mający cechy i podziału funkcjonalnego i danych: • przetwarzanie potokowe (np. sekwencji obrazów) Krzysztof Banaś Obliczenia równoległe 2 Metodologia programowania równoległego ➔ Klasyfikacja ze względu na mechanizmy programowe: MPMD (Multiple Program Multiple Data) • każdy proces realizuje różny kod, związany z różnymi plikami binarnymi • architekturą sprzętu jest zawsze MIMD • odpowiada dekompozycji funkcjonalnej, ewentualnie dekompozycji złożonej • koniecznym elementem jest komunikacja, dzięki której różne procesy uzyskują rozwiązanie pojedynczego zadania obliczeniowego • implementacja jest dokonywana najczęściej w modelu z pamięcią rozproszoną za pomocą przesyłania komunikatów • programowanie równoległe zbliża się w tym przypadku do programowania rozproszonego Krzysztof Banaś Obliczenia równoległe 3 Metodologia programowania równoległego ➔ Klasyfikacja ze względu na mechanizmy programowe: SPMD (Single Program Multiple Data) • każdy proces (wątek) realizuje ten sam program (związany z tym samym plikiem binarnym) • model bardzo uniwersalny, częściej wykorzystywany niż MPMD ➢ dla architektur SIMD oznacza wykonywanie tego samego kodu z synchronizacja sprzętową (w wariancie SIMT (karty graficzne) możliwe jest zróżnicowanie wykonywanego kodu realizowane poprzez serializację) ➢ dla architektur MIMD: » wątki mogą realizować ten sam kod, każdy wątek otrzymuje przydzieloną porcję danych na których operuje » wątki mogą realizować różne funkcje tego samego kodu lub różne ścieżki przechodzenia przez ten sam kod Krzysztof Banaś Obliczenia równoległe 4 Programowanie wielowątkowe ➔ W celu realizacji modelu SPMD można do wielu wątków wykonujących ten sam kod przesłać różne dane jako argumenty pierwotnie wywoływanej procedury ➔ częstym przypadkiem jest przesłanie identyfikatora wątku – każdy wątek posiada indywidualny identyfikator i na jego podstawie może: • zlokalizować dane, na których dokonuje przetwarzania ➢ dane[ f(my_id) ] • wybrać ścieżkę wykonania programu ➢ if(my_id == ...){.....} • określić iteracje pętli, które ma wykonać ➢ for( i=f1(my_id); i< f2(my_id); i += f3(my_id) ){ ...... } Komunikacja między wątkami odbywa się głównie za pomocą pamięci wspólnej Krzysztof Banaś Obliczenia równoległe 5 Metodologia programowania równoległego ➔ Kolejny możliwy podział związany z konkretnymi mechanizmami programowymi: równoległość zadań, task parallelism – każdy wątek/proces otrzymuje do wykonania pewne zadanie, najczęściej funkcję w programie • wątki mogą realizować tę samą funkcję, ale na innych danych lub różne funkcje • przydział zadań może być statyczny lub dynamiczny, • wykonanie jest najczęściej asynchroniczne równoległość wykonania pętli, loop parallelism – każdy wątek/proces otrzymuje pewną liczbę iteracji pętli do wykonania • każdy proces/wątek posiada własny indeks iteracji, który przyjmuje wartości z określonego podzbioru pełnego zbioru wartości indeksów dla pętli • wykonanie jest najczęściej synchroniczne Krzysztof Banaś Obliczenia równoległe 6 Metodologia programowania równoległego ➔ Ważnym w dziedzinie przetwarzania równoległego jest pojęcie równoległości danych (data parallelism) w sensie węższym oznacza model programowania, w którym programista określa jawnie przydział danych procesom/wątkom oraz operację do wykonania na całości danych, natomiast konkretna realizacja obliczeń przez procesy/wątki, w tym konieczna synchronizacja i komunikacja, jest przeprowadzana przez środowisko wykonania, bez jawnego udziału programisty • realizacją tego modelu są języki równoległości danych takie jak np. High Performance Fortran (HPF) w sensie szerszym oznacza model w którym podstawą zrównoleglenia jest podział (dekompozycja) danych, odpowiedni przydział danych wątkom/procesom oraz wykonanie zgodnie z zasadą właściciel przeprowadza obliczenia (owner computes) Krzysztof Banaś Obliczenia równoległe 7 Przykłady ➔ Algorytm mnożenia macierzwektor ➔ alternatywy dekompozycji danych implikacje w stosunku do algorytmu powiązanie dekompozycji i algorytmu ze sposobem przechowywania macierzy Modelowanie środowiska naturalnego Krzysztof Banaś Obliczenia równoległe 8 Metodologia programowania równoległego ➔ W przypadku modelu wykonania równoległego (w ramach konkretnych środowisk programowania równoległego) można rozważać model oparty na dekompozycji danych (data decomposition), jako alternatywę dla modelu opartego na równoległości sterowania (control decomposition) w modelu dekompozycji danych często wątek/procesor na podstawie swojego indeksu ustala dane, na których operuje, przy czym wszystkie wątki realizują ten sam kod w modelu dekompozycji sterowania często wątek na podstawie swojego indeksu ustala, którą ścieżkę w programie lub którą iterację w pętli powinien realizować poza czystymi algorytmami dekompozycji danych i sterowania, występuje wiele przypadków pośrednich (różne dane i częściowo różne ścieżki wykonania dla różnych wątków) Krzysztof Banaś Obliczenia równoległe 9 Podsumowanie ➔ Praktyczne alternatywy modelu programowania: programowanie sekwencyjne ze zrównolegleniem niejawnym: poprzez układ procesora superskalarnego poprzez automatyczny kompilator zrównoleglający programowanie w językach równoległości danych programowanie w modelu z pamięcią wspólną programowanie w modelu z przesyłaniem komunikatów programowanie w modelu przerzucenia (offload) części obliczeń na układ wspomagający (koprocesor, akcelerator) programowanie w rozmaitych modelach hybrydowych (łączących cechy modeli powyższych) Krzysztof Banaś Obliczenia równoległe 10 Prosty przykład #include<pthread.h> #define LICZBA 100 #define LICZBA_W 4 pthread_mutex_t muteks; int suma=0; pthread_t watki[LICZBA_W]; int main( int argc, char *argv[] ){ int i; indeksy[LICZBA_W]; for(i=0;i<LICZBA_W;i++) indeksy[i]=i; pthread_mutex_init( &muteks, NULL); for(i=0; i<LICZBA_W; i++ ) pthread_create( &watki[i], NULL, suma_w, (void *) &indeksy[i] ); for(i=0; i<LICZBA_W; i++ ) pthread_join( watki[i], NULL ); printf(„suma = %d\n”,suma); } Krzysztof Banaś Obliczenia równoległe 11 Prosty przykład void *suma_w( void *arg_wsk){ int i, moj_id, moja_suma=0; moj_id = *( (int *) arg_wsk ); j=LICZBA/LICZBA_W; for( i=j*moj_id+1; i<=j*(moj_id+1); i++){ moja_suma += i; } pthread_mutex_lock( &muteks ); suma += moja_suma; pthread_mutex_unlock( &muteks ); pthread_exit( (void *)0); } Krzysztof Banaś Obliczenia równoległe 12 Prosty przykład ➔ Prosty przykład z poprzednich slajdów łączy w sobie kilka wzorców, modeli, sposobów programowania: można go utworzyć na podstawie podziału w dziedzinie problemu lub podziału danych realizuje statyczną równoległość zadań realizuje wzorzec zarządcawykonawcy wykonanie odbywa się w modelu SPMD jest w rzeczywistości sposobem na zrównoleglenie pętli w środowiskach wielowątkowych Krzysztof Banaś Obliczenia równoległe 13