Pytanie zakłada, że pamięć współdzielona i obliczenia rozproszone są przeciwieństwami. To trochę jak pytanie: czy RAM i LAN są przeciwieństwem? Bardziej czytelne byłoby rozróżnienie współbieżności pamięci współdzielonej w węźle CPU/pamięci oraz między węzłami CPU/pamięci.
Jest to część szerszego obrazu badań nad przetwarzaniem równoległym. Było wiele projektów badawczych, w tym:
rozwój komputerów non-Von-Neumann, które mają wiele procesorów dzieląc pojedynczy pamięci, połączonych jakąś formę przełączania tkaniny (często sieci Clos). OpenMP byłby odpowiedni dla nich.
rozwijanie równoległych komputerów składających się z zestawu procesorów, z których każdy ma osobną pamięć, oraz z pewną siecią komunikacyjną między węzłami. Zazwyczaj jest to domem między innymi MPI.
Pierwszy przypadek specjalizuje się w braterstwie High Performance Computing. Jest to drugi przypadek znany większości z nas. W tym przypadku, zwykle w dzisiejszych czasach połączenie jest po prostu przez Ethernet, ale różne szybsze alternatywy o niższym opóźnieniu zostały (pomyślnie) opracowane dla pewnych nisz (np. IEEE1355 SpaceWire, które powstały z łączy szeregowych Transputer).
Przez wiele lat dominującym poglądem było to, że efektywna równoległość byłaby możliwa tylko wtedy, gdyby pamięć była dzielona, ponieważ koszt komunikacji przekazywanych wiadomości był (naiwnie) uważany za zaporowy. W przypadku współbieżności pamięci współdzielonej trudność tkwi w oprogramowaniu: ponieważ wszystko jest współzależne, projektowanie współbieżności staje się kombinatorycznie trudniejsze i trudniejsze, gdy systemy stają się większe. Wymagana jest wiedza specjalistyczna.
Dla reszty z nas idziemy za Erlangiem, Limbo i oczywiście Ockhama w promowaniu przekazywania wiadomości jako środka do choreografii pracy do wykonania. Wynika to z algebry z Communicating Sequential Processes, która stanowi podstawę do tworzenia równoległych systemów o dowolnym rozmiarze.Projekty CSP są kompozycyjne: każdy podsystem może sam w sobie być składnikiem większego systemu, bez teoretycznego ograniczenia.
Twoje pytanie dotyczyło OpenMP (pamięć współużytkowana) i MPI (przekazywanie wiadomości rozproszonych), które mogą być używane razem. Go może być uważany za przybliżony odpowiednik MPI, ponieważ promuje przekazywanie wiadomości. Pozwala jednak również na blokadę i pamięć współdzieloną. Go różni się od MPI i OpenMP, ponieważ nie dotyczy bezpośrednio systemów wieloprocesorowych. Aby przejść do świata przetwarzania równoległego za pomocą Go, potrzebny byłby szkielet przekazujący sieć, taki jak OpenCL, dla którego ktoś pracuje nad API Go.
Doskonała odpowiedź! – user984260
Jeśli zrozumiałem cię poprawnie, ITYM "nie przeszkadza ci strzelać sobie w stopę". ;) –
Całkiem poprawne, dzięki! Naprawiłem to. – jimt