2013-03-22 22 views
7

Zaimplementowałem połączenie peer-to-peer w trybie MPI przy użyciu MPI_Open_port i MPI_Comm_accept. Na różnych komputerach uruchamiam serwer i program kliencki korzystający zRóżnica między uruchomieniem programu zi bez mpirun

. Zauważyłem, że również działa dobrze. Czy wiesz, czy jest jakaś różnica między uruchomieniem pliku MPI z i bez mpirun?

Oczywiście nie mogę podać dodatkowych parametrów (np. mpirun --mca btl self,openib), a pozycja wszystkich procesów wynosi 0, co jest całkowicie w porządku. Ale czy jest coś mniej oczywistego?

Odpowiedz

15

Bieganie bez mpirun/mpiexec nazywa się „Singleton MPI_INIT” i jest częścią zaleceń MPI dla dużych wdrożeń jakości, znajdując pod §10.5.2 w najnowszym standardzie MPI dokumentu:

wysokiej jakości Wdrożenie umożliwi dowolny proces (w tym te, które nie zostały uruchomione z mechanizmem "aplikacji równoległej"), aby stał się procesem MPI, wywołując MPI_INIT. Taki proces może następnie łączyć się z innymi procesami MPI przy użyciu procedur MPI_COMM_ACCEPT i MPI_COMM_CONNECT lub odradzać inne procesy MPI. MPI nie nakazuje takiego zachowania, ale zdecydowanie zachęca go tam, gdzie jest to technicznie wykonalne.

Jeśli proces wchodzi MPI_INIT i stwierdzi, że nie ma specjalnych kroki zostały podjęte (tj, nie zostały podane informacje do uformowania MPI_COMM_WORLD z innymi procesami) powiedzie się i tworzy singleton programu MPI, czyli taki, w którym MPI_COMM_WORLD ma rozmiar 1.

Korzystanie mpirun w Twoim przypadku jest to „aplikacja równoległy” mechanizm , o których mowa w standardowym tekstem. Dostarcza ona MPI_INIT informacji niezbędnych do ustanowienia MPI_COMM_WORLD dla wszystkich rozpoczętych procesów. Bez informacji z procesów mpirun procesy mogą być uruchamiane tylko jako pojedyncze instancje MPI, a zatem wszystkie z nich mają rangę 0 (co jest w porządku, ponieważ każdy MPI_COMM_WORLD jest oddzielny).