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.

 

Centrum Informatyczne Trójmiejskiej Akademickiej Sieci Komputerowej
ul. G. Narutowicza 11/12, 80-233 Gdańsk   |   tel. 58-347-24-11
email: office@task.gda.pl   |   NIP: 584-020-35-93