Programowanie Równoległe i Rozproszone
III rok Informatyka WSZiB
Message Passing Interface (MPI) - Czę¶ć 2: Komunikacja miedzy procesami MPI
- Minimalny zestaw funkcji, które pozwalaj± na konstrukcję sporej ilo¶ci
aplikacji równoległych:
- Komunikacja w MPI
Terminy: komunikator, grupa procesów, rozmiar komunikatora,
MPI_COMM_WORLD (MPI_Comm_size, MPI_Comm_rank, MPI_Comm_group, MPI_Comm_free,
MPI_Comm_create, MPI_Comm_free, MPI_Comm_split),
- komunikacja punkt-punkt (MPI_Send, MPI_Ssend, MPI_Isend, MPI_Recv),
- komunikacja kolektywna (MPI_Bcast, MPI_Scatter, MPI_Reduce),
- komunikacja blokuj±ca vs. nieblokuj±ca (MPI_Isend, ...Irecv,
...Issend),
- komunikacja synchroniczna (MPI_Ssend),
- Wykorzystujac komunikaty MPI_Send i MPI_Recv, rozbudowac prosty program licytacja.c o nastepujaca funkcjonalnosc:
- w licytacji bierze udzial dowolna liczba procesow
- jeden proces startuje licytacje wysylajac stawke o wartosci 0 do nastepnego
- nastepny proces moze podbic stawke o 1 jesli wylosowana przez niego na poczatku liczba jest wieksza od tej stawki - podbicie polega na przeslaniu nastepnemu procesowi stawki powiekszonej o 1
- jesli wylosowana liczba jest mniejsza lub rowna stawce, proces przesyla dalej liczbe ktora otrzymal
- w momencie kiedy proces otrzyma stawke ktora przeslal, konczy licytacje jako zwyciezca
- komunikacja przebiega "w kolko" od pierwszego procesu do ostatniego, ostatni wysyla do pierwszego
- Przyklad rozwiazania
- Operacje globalne (dotycz±ce wszystkich procesów)
- Barrier - synchronizuje procesy
- Broadcast - wysyła komunikat z jednego do wszystkich procesów
- Gather - zbiera dane ze wszystkich procesów do jednego
- Scatter - rozdziela dane z jednego do wszystkich procesów
- Reduce - sumuje, mnoży, etc. dane rozproszone pomiędzy procesy
Przyklady wykorzystania:
- Zadanie: Zrównoleglenie algorytmu Gry LIFE w MPI.
- Zasady gry:
- 1 lub mniej sąsiadów - komórka obumiera "z samotności"
- 4 i więcej sąsiadów - komórka obumiera "z przeludnienia"
- 2 lub 3 sąsiadów - komórka przeżywa
- Nowa żywa komórka powstaje jeśli jest wyłącznie 3 sąsiadów
- Sekwencyjna wersja algorytmu slife.c.
- Parametry:
- rozmiar: 1..n - wielkosc pola
- prawdopodobienstwo: 0..1 - prawdopodobienstwo wylosowania 1 w komórce, liczby z zakresu 0 do 1 np. 0.5
- pokolen:1..n - ilość pokoleń do obliczenia
- Kompilacja i uruchomienie
- gcc slife.c -o slife
- ./slife 10 0.3 2
- Implementacja wersji MPI krok po kroku:
- Dodać do programu wywołania MPI_Init, MPI_Finalize oraz włączyć plik nagłówkowy mpi.h
- Każdy proces MPI alokuje pole (macierz) o rozmiarze (N / psize) x N, gdzie N jest rozmiarem pola pobieranym z linii komend a psize jest ilością procesów MPI. Pozostala czesc macierzy jest rozdzielana po jednym wierszu do procesu.
- Sąsiednie procesy wymieniają się skrajnymi wierszami, pierwszym i ostatnim tzw. zakładkami przy pomocy sekwencji funkcji: Isend-Recv-Wait,Irecv-Send-Wait lub MPI_Sendrecv
- Proces 0 wypisuje sumaryczną ilość jedynek w całym polu zbierając ją
funkcją MPI_Reduce
Marcin Radecki, Tomasz Szepieniec, Joanna Kocot
|