Programowanie Równoległe i Rozproszone
III rok Informatyka WSZiB
Część 2 - Komunikacja kolektywna w MPI
- 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 - wykonuje operację( -> Collective operations) na danych rozproszonych między procesy
- Przykład wykorzystania komunikacji kolektywnej. Program lic-reduce.c w kilku linijkach przy użyciu funkcji MPI_Allreduce i MPI_Reduce
- Zadanie na zajecia: 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
|