Chciałbym wiedzieć (w kilku słowach) jakie są główne różnice między OpenMP i MPI.Jakie są różnice między MPI a OpenMP?
Odpowiedz
OpenMP to sposób programowania na urządzeniach z pamięcią wspólną. Oznacza to, że równoległość występuje, gdy każdy równoległy wątek ma dostęp do wszystkich twoich danych.
Można myśleć o tym jako: równoległość może się zdarzyć podczas wykonywania określonej pętli for
, dzieląc pętlę między różne wątki.
MPI to sposób programowania na rozproszonych urządzeniach pamięci. Oznacza to, że równoległość występuje tam, gdzie każdy równoległy proces działa we własnej przestrzeni pamięci w oderwaniu od innych.
Możesz myśleć o tym tak: każdy napisany kod jest wykonywany niezależnie przez każdy proces. Równoległość występuje, ponieważ każdy proces dokładnie określa, w której części globalnego problemu powinny pracować, w oparciu o swój identyfikator procesu.
Oczywiście sposób, w jaki pisze się program OpenMP i MPI, jest zupełnie inny.
MPI to skrót od Message Passing Interface. Jest to zbiór deklaracji API dotyczących przekazywania komunikatów (takich jak send, receive, broadcast, itp.) I jakie zachowanie należy oczekiwać od implementacji.
Idea "przekazywania wiadomości" jest dość abstrakcyjna. Może to oznaczać przekazywanie wiadomości między lokalnymi procesami lub procesami rozproszonymi w hostach sieciowych, itp. Nowoczesne implementacje bardzo starają się być wszechstronnymi i abstrakcyjnymi wielowymiarowymi mechanizmami (dostęp do pamięci współużytkowanej, sieć IO itp.).
OpenMP to API, które polega przede wszystkim na ułatwieniu tworzenia programów do wielokrotnego przetwarzania pamięci wspólnej (przypuszczalnie). Nie ma pojęcia o przekazywaniu wiadomości. Zamiast tego, przy użyciu zestawu standardowych funkcji i dyrektyw kompilujących, piszesz programy, które wykonują lokalne wątki równolegle, i kontrolujesz zachowanie tych wątków (do jakiego zasobu mają mieć dostęp, jak są zsynchronizowane, itp.). OpenMP wymaga obsługi kompilatora, więc możesz również spojrzeć na to jako rozszerzenie obsługiwanych języków.
I nie jest niczym niezwykłym, że aplikacja może używać zarówno MPI, jak i OpenMP.
Możesz to, co opisujesz, bardzo łatwo w programowaniu pamięci współdzielonej lub rozproszonej. To, czego szukasz, nazywa się "redukcją" – NoseKnowsAll