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 macierz­wektor



➔
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ądca­wykonawcy
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

Podobne dokumenty