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