Centrum Informatyczne Trójmiejskiej Akademickiej Sieci Komputerowej

MPICH

Biblioteka MPICH jest implementacją standardu MPI.

Message Passing Interface (MPI) jest rozbudowaną biblioteką funkcji komunikacji międzyprocesowej. Biblioteka nie zawiera żadnych funkcji zarządzania maszyną wirtualną. Można ją łączyć z aplikacjami typu SPMD oraz MPMD zaimplementowanymi w językach: C, C++, Fortran 77, Fortran 90.


Spis treści

Podstawowe założenia przyjęte w MPI

  • inicjalnie wszystkie procesy należą do world group
  • procesy są identyfikowane unikatowym numerem rank (0,1,2,...,N-1)
  • wymiana informacji między procesami odbywa się za pomocą przesyłania komunikatów do procesu wskazanego poprzez rank w danej grupie
  • kontekst komunikacji dodawany jest automatycznie (niewidoczny dla użytkownika)

Biblioteka MPI oferuje następujące funkcjonalności:

  • komunikacja typu jeden-do-jednego (blokująca, nieblokująca, ustawiczna)
  • operacje grupowego przesyłania danych, globalnej redukcji
  • definiowanie dowolnych struktur danych dla komunikatów
  • definiowanie komunikatów dla nowych grup lub kontekstów
  • definiowanie wirtualnych topologii połączeń procesów
  • operacje kolektywne
  • kontekst komunikacji
  • możliwoć ledzenia przetwarzania


Podstawowe funkcje

a) funkcje inicjalizujące i informacyjne

  • MPI_Init() - pierwsza funkcja MPI w programie
  • MPI_Finalize() - zakończenie opracji MPI
  • MPI_Comm_size() - rozmiar komunikatora
  • MPI_Comm_rank() - rank procesu w podanym komunikatorze


b) funkcje rozpoczynające komunikację nieblokującą

  • MPI_Isend() - funkcja nadawcza w trybie standardowym
  • MPI_Ibsend() - funkcja nadawcza w trybie buforowanym
  • MPI_Issend() - funkcja nadawcza w trybie synchronicznym
  • MPI_Irsend() - funkcja nadawcza w trybie natychmiastowym
  • MPI_Irecv() - funkcja odbiorcza


c) funkcje realizujące komunikację nieblokującą

  • MPI_Wait() - realizuje rozpoczętą procedurę
  • MPI_Test() - warunkowo realizuje rozpoczęta procedurę
  • MPI_Probe() - sprawdza nadejście komunikat
  • MPI_Cancel() - anuluje rozpoczętą procedurę


d) funkcje rozpoczynające komunikację blokującą

  • MPI_Send() - funkcja nadawcza w trybie standardowym
  • MPI_Bsend() - funkcja nadawcza w trybie buforowanym
  • MPI_Ssend() - funkcja nadawcza w trybie synchronicznym
  • MPI_Rsend() - funkcja nadawcza w trybie natychmiastowym
  • MPI_Recv() - funkcja odbiorcza


e) funkcje inicjalizujące komunikację ustawiczną

  • MPI_Send_init() - funkcja inicjalizująca nadawanie w trybie

standardowym

  • MPI_Bsend_init() - funkcja inicjalizująca nadawanie w trybie

buforowanym

  • MPI_Ssend_init() - funkcja inicjalizująca nadawanie w trybie

synchronicznym

  • MPI_Rsend_init() - funkcja inicjalizująca nadawanie w trybie

natychmiastowym

  • MPI_Recv_init() - funkcja inicjalizująca odbiór


  • MPI_Starts() - rozpoczęcie operacji komunikacji ustawicznej


f) funkcje komunikacji grupowej

  • MPI_Barrier() - synchronizacja procesorów na barierze
  • MPI_Bcast() - wysłanie komunikatu do wszystkich członków grupy
  • MPI_Gather() - odebranie fragmentów komunikatów od wszystkich członków grupy
  • MPI_Scatter() - rozdzielenie danych i rozesłanie fragmentów członkom grupy
  • MPI_Reduce() - odebranie komunikatów od wszystkich członków grupy i wykonanie globalnej operacji na nich
  • MPI_Allgather() - gather + broadcast
  • MPI_Allreduce() - reduce + broadcast
  • MPI_Alltoall() - gather + scatter


Szczegółowe informacje o poszczególnych funkcjami można uzyskać za pomocą polecenia man nazwa_funkcji.


Dokumentacja postskryptowa jest dostępna w katalogu /usr/local/mpi/doc (functions.ps, guide.ps, mpiman.ps).


W celu skompilowania programu zaimplementowanego z wykorzystaniem biblioteki MPI należy użyć mpicc (język C) lub mpif77 (język fortran).

Przykład użycia:

Kompilacja programu test.c, plik wynikowy będzie nazywał się test

mpicc -o test -c test.c 

kompilacja programu test.f, plik wynikowy będzie nazywał się test

mpif77 -o test -c test.f 

W celu uruchomienia programu zaimplementowanego z wykorzystanem biblioteki MPI należy użyć mpirun [opcje mpirun'a] <nazwa_programu> [opcje]

Opcje mpirun:


  • -arch - umożliwienie wybrania architektury (plik machines.<arch> musi znajdować się w katalogu /usr/local/mpi/bin/machines) w przypadku korzystania z execer
  • -h - wyświetlenie pomocy
  • -machine <nazwa maszyny> - użycie procedury startowej dla komputera: <nazwa maszyny>. Dostępne są następujące <nazwy maszyn>: chameleon, meiko, paragon, p4, sp1, ibmspx, anlspx, ksr, sgi_mp, ipsc860, inteldelta, cray_t3d, execer, smp, symm_ptx
  • -machinefile <nazwa pliku komputera> - wyświetlenie listy dostępnych maszyn, które są dostępne w pliku <nazwa pliku komputera>
  • -np - podanie liczby procesorów, na których ma być uruchomione zadanie
  • -nolocal - nie zostanie uruchomione zadanie na lokalnej maszynie
  • -stdin <nazwa pliku> - użycie <nazwa pliku> jako standardowego wejścia dla programu. Jest to niezbędne dla programów, które muszą być uruchomione jako pliki wsadowe
  • -t - testowanie
  • -v - wyświetlanie szczegółowych komentarzy
  • -dbx - uruchomienie, o ile jest to możliwe, pierwszego procesu pod dbx
  • -gdb - uruchomienie, o ile jest to możliwe, pierwszego procesu pod gdb
  • -xxgdb - uruchomienie, o ile jest to możliwe, pierwszego procesu pod xxgdb
  • -tv - uruchomienie pod tutalview


Opcje charakterystyczne dla NEC - CENJU-3

  • -batch - wykonywanie programu jako pliku wsadowego
  • -stdout <nazwa pliku> - przekierowanie standardowego wyjście programu do pliku <nazwa pliku>
  • -strerr <nazwa pliku> - przekierowanie standardowego wyjście błędów programu do pliku <nazwa pliku>


Opcje charakterystyczne dla urządzeń Nexus:

  • -nexuspg <nazwa pliku> - użycie podanego pliku startowego <nazwa pliku> zamiast tworzenie nowego
  • -nexesdb <nazwa pliku> - użycie podanej bazy zasobów Nexus


Opcje charakterystyczne dla klastrów stacji roboczych:


  • -e - użycie execer w celu uruchomienia progamu na klastrze stacji roboczych
  • -pg - użycie pliku .procgroup w celu uruchomienia programów p4 zamiast execer
  • -leavepg - nie zostanie skasowany plik p4 procgroup po uruchomieniu programu
  • -p4pg <nazwa pliku> - użycie podanego pliku p4 procgroup, zamiast tworzenia nowego
  • -tcppg <nazwa pliku> - użycie podanego pliku tcp procgroup zamiast tworzenia nowego


Opcje charakterystyczne dla środowiska wsadowego:


  • -mvhome - przesunięcie pliku wykonywanego do katalogu domowego. Jest to niezbędne w przypadku, gdy wszystkie systemy plików nie są wspólnie podmontowane
  • -mvback <nazwy plików> - przesunięcie wskazanych plików ponownie do bieżącego katalogu. Opcje jest potrzebna w przypadku użycia -mvhome
  • -maxtime min - maksymalny czas pracy zadania (w minutach)
  • -nopoll - nie zostanie użyty przepytywany tryb komunikacji
  • -mem wartość - żądanie wartość MBajtów pamięci dla każdego węzła
  • -cpu czas - limit czasu (w minutach) użycia CPU


Przy wyjściu, w przypadku poprawnego wykonania zadania mpirun zwraca wartość 0. W przypadku jakiś błędów, zwracana wartość jest niezerowa.

Możliwe jest wykorzystanie połączonych architektur. W tym celu należy wielokrotnie używać opcji -arch oraz -np. Na przykład, w celu uruchomienia program na dwóch sun4s i trzech rs6000s należy wpisać:

./mpirun -arch sun4 -np 2 -arch rs6000 -np 3 program

Istotne informacje

  • Pakiet jest zainstalowany na komputerach: holk
  • Wersja: 1.2.6
  • Katalog instalacji: /apl/mpi/mpich
  • Pomoc, dokumentacja: w katalogu instalacji
  • Ostatnia aktualizacja pakietu:
  • Status licencji:

Zobacz też:


Ten artykuł wymaga dopracowania. Rozwiń go jeśli możesz.