Programowanie Równoległe i Rozproszone

III rok Informatyka WSZiB


Część 2 - Komunikacja kolektywna w MPI

  1. 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



  2. Przykład wykorzystania komunikacji kolektywnej. Program lic-reduce.c w kilku linijkach przy użyciu funkcji MPI_Allreduce i MPI_Reduce

  3. 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:

      1. Dodać do programu wywołania MPI_Init, MPI_Finalize oraz włączyć plik nagłówkowy mpi.h
      2. 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.
      3. 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
      4. Proces 0 wypisuje sumaryczną ilość jedynek w całym polu zbierając ją funkcją MPI_Reduce



Marcin Radecki Tomasz Szepieniec