Programowanie Równoległe i Rozproszone

III rok Informatyka WSZiB


Message Passing Interface (MPI)

  1. Podstawy specyfikacji MPI

  2. Kompilacja i uruchomienie programu (MPICH)
    • narzędzia:
      mpicc - skrypt to kompilacji,
      mpd - program "tworzacy srodowisko" (uruchamia demony)
      • Uwaga: program do uruchomienia potrzebuje pliku .mpd.conf utworzonego w katalogu domowym. Plik .mpd.conf musi miec prawa dostepu 660 ( chmod 660 .mpd.conf) i zawierac linie: MPD_SECRETWORD=secret_word, gdzie secret_word to dowolne haslo.
      • Uwaga: program najlepiej uruchomic w tle poprzez mpd &

      mpiexec - program uruchamiający aplikacje
      • Uwaga: tymczasowo z powodu niedokonfigurowania klastra prosze wywolywac mpiexec uzywajac sciezki bezzwglednej /usr/lib64/mpich/bin/mpiexec
      • Uwaga: w przypadku bledu nieznalezienia biblioteki mpi nalezy wynonac export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib. Aby nie musiec powtarzac tej czynnosci najlepiej jest wgrac plik .bash_profile do swojego katalogu domowego co spowoduje ustawienie tejze zmiennej automatycznie po zalogowaniu sie do systemu.

      mpdcleanup - program zamykajacy srodowisko (zabija demony)

    • przykłady użycia:
       mpicc hello.c -o hello
       mpd &
       mpiexec -n 2 ./hello
      Uwaga: parametr -n programu mpiexec wskazuje liczbe uruchomionych procesow, nie musi sie ona pokrywac z iloscia hostow dostepnych
       mpiexec -machinefile hosts -n 2 ./hello
      Uwaga: parametr -machinefile programu mpiexec wskazuje plik z lista nazw hostow na ktorych uruchomione maja byc procesy

    • Hello world w MPI: hello.c
  3. Programowanie w MPI dla jękyka C:
    • Podręcznik programisty MPI
    • Włączyć nagłówek <mpi.h>
    • Zainicjalizować środowisko: MPI_Init(&argc, &argv);
    • Zakończyć operacje w środowisku: MPI_Finalize();
    • Argumenty do funkcji specyfikujące adres bufora muszą być podane jako wskaźnik do obszaru pamięci
    • Typ danych znajdujących się w buforach musi być określony jako typ ze standardu MPI (typy MPI: Typy danych dla "C" w MPI)

Cwiczenia:

  1. Skonfigurac srodowisko tak aby procesy wykonywaly sie na roznych komputerach (wykorzystac komputer sasiada). Na pomoca komendy ps x (z pomoca watch) zaobserwowac demona i dzialajace procesy (w tym celu nalezy zmodyfikowac dzialanie programu, aby program wykonywal sie dluzej).
  2. Wykorzystujac komunikaty MPI: 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


Marcin Radecki, Tomasz Szepieniec, Joanna Kocot, Eryk Ciepiela