Interfejs przekazywania wiadomości

Interface Message Passing (MPI) , to standard zaprojektowany w 1993 roku -94 do przejścia komunikatów międzyzdalnymi komputerami lub w wieloprocesorowych komputerze. Stał się de facto standardem komunikacyjnym dla węzłów obsługujących równoległe programy w rozproszonych systemach pamięci . Definiuje bibliotekę funkcji, których można używać w językach C , C ++ i Fortran .

MPI został napisany w celu osiągnięcia dobrej wydajności zarówno na masowo równoległych maszynach ze współdzieloną pamięcią, jak i na klastrach heterogenicznych komputerów z pamięcią rozproszoną. Jest dostępny na wielu urządzeniach i systemach operacyjnych . W związku z tym MPI ma przewagę nad starszymi bibliotekami przekazywania komunikatów, ponieważ jest wysoce przenośny (ponieważ MPI został zaimplementowany na prawie wszystkich architekturach pamięci) i szybki (ponieważ każda implementacja została zoptymalizowana pod kątem sprzętu, na którym działa).

Od 1997 roku dostępna jest nowa wersja MPI, MPI-2, która zawiera kilka potężnych dodatkowych funkcji .

Od 2015 roku dostępna jest nowa wersja MPI, MPI-3, która zapewnia równoległy zapis do plików.

Od 2020 roku dostępna jest nowa wersja MPI, MPI-4, która zapewnia prognozowanie RDMA i automatycznego wykrywania awarii. ( Forum MPI )


Koncepcje

Komunikatory

Komunikator wyznacza zbiór procesów, które mogą się ze sobą komunikować, a dwa procesy mogą się komunikować tylko wtedy, gdy znajdują się w tym samym komunikatorze. Komunikator początkowy obejmuje wszystkie procesy (MPI_COMM_WORLD), które można podzielić na mniejsze komunikatory odpowiadające jednostkom logicznym. Istnieją dwa rodzaje komunikatorów: komunikatory wewnętrzne i komunikatory wewnętrzne. Komunikatory wewnętrzne są standardowymi komunikatorami, podczas gdy komunikatory wewnętrzne służą do tworzenia pomostu między dwoma komunikatorami wewnętrznymi. MPI-2 znacznie poprawia wykorzystanie interkomunikatorów, umożliwiając im prowadzenie komunikacji zbiorowej.

Komunikacja punkt-punkt

Komunikacja punkt-punkt umożliwia wymianę danych w ramach tego samego komunikatora przez dwa procesy (typ skalarny, tablicowy lub pochodny). Odpowiednie funkcje to MPI_Send, MPI_Recv i MPI_Sendrecv.

Komunikacja zbiorowa

Komunikacja zbiorowa obejmuje wszystkie procesy komunikatora. Możliwe jest wysłanie tych samych danych do wszystkich procesów (MPI_Bcast), podzielenie tabeli między wszystkie procesy (MPI_Scatter) lub wykonanie operacji (na przykład dodawanie), w której każdy proces będzie miał swój udział.

Typy pochodne

Typy podstawowe (liczba całkowita, zmiennoprzecinkowa pojedyncza lub podwójna precyzja, znak) są obsługiwane natywnie. Możliwe jest wtedy tworzenie typów pochodnych, które odbiegają mniej więcej od tych podstawowych typów: ciągłe (dla danych jednorodnych i ciągłych w pamięci), wektorowe (dla danych jednorodnych i rozmieszczonych w stałym odstępie w pamięci), indeksowane (dla jednorodnych dane rozdzielone zmiennym skokiem w pamięci) i strukturę (dla danych heterogenicznych).

Wejścia / wyjścia MPI (MPI-2)

MPI I / O autoryzuje równoległe I / O.

Wdrożenia

Typowe implementacje są w C / C ++ i FORTRAN, ale są też implementacje w Pythonie, OCaml, Perlu i Javie. Pierwotną implementacją standardu MPI 1.x był MPICH, obecnie MPICH 2 dzięki zgodności ze standardem MPI-2; jest to wolne oprogramowanie. Jest również dostępny na bezpłatnej licencji OpenMPI. Oprócz tych ogólnych wdrożeń niektórzy producenci dokonali zoptymalizowanych wdrożeń.

Zobacz też

Linki zewnętrzne