Dlaczego MPI jest uważane za trudniejsze niż pamięć dzielona, a Erlang za łatwiejsze, skoro obie są przekazywaniem wiadomości?

Obecnie istnieje duże zainteresowanie Erlangiem jako językiem do pisania równoległych programów na wielu rdzeniach. Słyszałem, że ludzie twierdzą, że model przekazywania wiadomości Erlanga jest łatwiejszy do zaprogramowania niż dominujące modele pamięci współdzielonej, takie jak wątki.

Odwrotnie, w środowisku wysokowydajnych komputerów dominującym modelem programowania równoległego jest MPI, który również implementuje model przekazywania wiadomości. Ale w świecie HPC ten model przekazywania wiadomości jest ogólnie uważane za bardzo trudne do zaprogramowania, a ludzie twierdzą, że modele pamięci współdzielonej, takie jak OpenMP lub UPC, są łatwiejsze do zaprogramowania.

Czy ktoś wie, dlaczego w świecie IT i HPC istnieje taka różnica w postrzeganiu przekazywania wiadomości A pamięci współdzielonej? Czy to z powodu jakiejś fundamentalnej różnicy w tym, jak Erlang i MPI implementują przekazywanie wiadomości, sprawia, że przekazywanie wiadomości w stylu Erlanga jest znacznie łatwiejsze niż MPI? A może jest jakiś inny powód?

Author: Lorin Hochstein, 2008-10-09

7 answers

Zgadzam się ze wszystkimi wcześniejszymi odpowiedziami, ale myślę, że kluczowym punktem, który nie jest całkowicie jasny, jest to, że jednym z powodów, dla których MPI może być uważane za trudne i łatwe Erlang, jest dopasowanie modelu do domeny.

Erlang opiera się na koncepcji pamięci lokalnej, asynchronicznego przekazywania wiadomości i współdzielonego stanu rozwiązywanego za pomocą jakiejś formy globalnej bazy danych, do której mogą dostać się wszystkie wątki. Jest przeznaczony dla aplikacji, które nie przenoszą dużo danych, a to nie powinno eksplodować do 100K oddzielnych węzłów, które wymagają koordynacji.

MPI opiera się na lokalnej pamięci i przekazywaniu wiadomości i jest przeznaczony do problemów, w których przenoszenie danych jest kluczową częścią domeny. Przetwarzanie o wysokiej wydajności polega w dużej mierze na wzięciu zestawu danych jako problemu i podzieleniu go między szereg zasobów obliczeniowych. I to jest dość ciężka praca w systemie przekazywania wiadomości, ponieważ dane muszą być wyraźnie dystrybuowane z myślą o zrównoważeniu. Zasadniczo MPI można postrzegać jako niechęć do tego, że pamięć dzielona nie skaluje się. I jest ukierunkowany na wysokowydajne obliczenia rozłożone na 100k procesorów lub więcej.

Erlang nie próbuje osiągnąć najwyższej możliwej wydajności, raczej rozkłada naturalnie równoległy problem na naturalne wątki. Został zaprojektowany z myślą o zupełnie innym typie zadań programistycznych w porównaniu do MPI.

Więc Erlang jest najlepszy w porównaniu do pthreads i innych dość lokalnych heterogenicznych rozwiązań nici, zamiast MPI, który jest tak naprawdę skierowany na zupełnie inny (i do pewnego stopnia z natury trudniejszy) zestaw problemów.

 38
Author: jakobengblom2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-01 21:13:56

Równoległość w Erlang jest wciąż dość trudna do wdrożenia. Przez to mam na myśli, że nadal musisz dowiedzieć się, jak podzielić swój problem, ale jest kilka drobnych rzeczy, które łagodzą tę trudność w porównaniu do niektórych bibliotek MPI w C lub c++.

Po pierwsze, ponieważ przekazywanie wiadomości Erlanga jest cechą języka pierwszej klasy, cukier składniowy sprawia, że czuje się łatwiej.

Również biblioteki Erlanga są zbudowane wokół przekazywania wiadomości Erlanga. Ta struktura wsparcia pomaga daje ci impuls do równoległego przetwarzania ziemi. Spójrz na składniki OTP Jak gen_server, gen_fsm, gen_event. Są to bardzo łatwe w użyciu struktury, które mogą pomóc twojemu programowi stać się równoległym.

Myślę, że to bardziej solidność dostępnej biblioteki standardowej odróżnia przekaz komunikatów Erlanga od innych implementacji MPI, a nie Żadna specyficzna cecha samego języka.

 13
Author: bmdhacks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 03:20:01

Zazwyczaj współbieżność w HPC oznacza pracę na dużych ilościach danych. Ten rodzaj paralelizmu nazywa się data paralelism i jest rzeczywiście łatwiejszy do zaimplementowania przy użyciu podejścia do współdzielonej pamięci, takiego jak OpenMP, ponieważ system operacyjny zajmuje się takimi kwestiami, jak planowanie i rozmieszczanie zadań, które trzeba by zaimplementować samemu używając paradygmatu przekazywania wiadomości.

Natomiast Erlang został zaprojektowany, aby poradzić sobie z równoległością Zadań napotkanymi w telefonie systemy, w których różne fragmenty kodu muszą być wykonywane jednocześnie z ograniczoną ilością komunikacji i silnymi wymaganiami dotyczącymi tolerancji błędów i odzyskiwania.

Ten model jest podobny do tego, do czego większość ludzi używa PThreads. Pasuje do aplikacji takich jak serwery www, gdzie każde żądanie może być obsługiwane przez inny wątek, podczas gdy aplikacje HPC robią prawie to samo na ogromnych ilościach danych, które również muszą być wymieniane między pracownikami.

 10
Author: jupp0r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-07 15:57:18

Myślę, że ma to coś wspólnego z umysłem, kiedy programujesz z MPI i kiedy programujesz z Erlangiem. Na przykład, MPI nie jest wbudowany w język, podczas gdy Erlang ma wbudowaną obsługę przekazywania wiadomości. Innym możliwym powodem jest rozłączenie pomiędzy wysyłaniem / odbieraniem wiadomości a dzieleniem rozwiązań na współbieżne jednostki wykonania.

Z Erlang jesteś zmuszony myśleć w funkcjonalnej ramce programowania, w której dane faktycznie przesuwają się z wywołanie funkcji do wywołania funkcji -- i odbieranie jest czynnością aktywną, która wygląda jak normalna konstrukcja w języku. Daje to bliższy związek między obliczaniem, które faktycznie wykonujesz, a wysyłaniem / odbieraniem wiadomości.

Z MPI z drugiej strony jesteś zmuszony myśleć tylko o rzeczywistym przekazywaniu wiadomości, ale nie o dekompozycji pracy. Ta rama myślenia wymaga pewnego rodzaju przełączania kontekstu między pisaniem rozwiązania a Komunikatem infrastruktura w Twoim kodzie.

Dyskusja może trwać dalej, ale powszechnym poglądem jest to, że jeśli konstrukcja do przekazywania wiadomości jest rzeczywiście wbudowana w język programowania i paradygmat, którego używasz, zwykle jest to lepszy sposób wyrażania rozwiązania w porównaniu do czegoś innego, co jest "przyczepione" lub istnieje jako dodatek do języka (w formie biblioteki lub rozszerzenia).

 9
Author: Dean Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-01 20:21:14
Czy ktoś wie, dlaczego w świecie IT i HPC istnieje taka różnica w postrzeganiu przekazywania wiadomości A pamięci współdzielonej? Czy to z powodu jakiejś fundamentalnej różnicy w tym, jak Erlang i MPI implementują przekazywanie wiadomości, sprawia, że przekazywanie wiadomości w stylu Erlanga jest znacznie łatwiejsze niż MPI? A może jest jakiś inny powód?

Powodem jest po prostu paralelizm a współbieżność. Erlang jest przeznaczony do programowania współbieżnego. HPC polega na programowaniu równoległym. Są one związane, ale różne cele.

Programowanie współbieżne jest bardzo skomplikowane ze względu na bardzo mało deterministyczny przepływ sterowania, a opóźnienie jest często ważnym celem. Wykorzystanie przez Erlanga niezmiennych struktur danych znacznie upraszcza programowanie współbieżne.

Programowanie równoległe ma znacznie prostszy przepływ sterowania, a celem jest maksymalna całkowita przepustowość, a nie opóźnienie. Wydajne użycie pamięci podręcznej jest tutaj znacznie ważniejsze, co renderuje zarówno Erlang, jak i niezmienne struktury danych w dużej mierze nieodpowiednie. Mutacja pamięci współdzielonej jest w tym kontekście możliwa do odtworzenia i znacznie lepsza. W efekcie Cache coherence zapewnia przyspieszane sprzętowo przekazywanie wiadomości.

[1]}wreszcie, oprócz tych różnic technicznych istnieje również kwestia polityczna. Faceci Erlang próbują jeździć wielordzeniowy hype udając, że Erlang jest istotne dla wielordzeniowych, gdy nie jest. w szczególności, są one reklamowanie wielką skalowalność, więc konieczne jest, aby rozważyć absolutne wydajność również. Erlang skaluje bez wysiłku od słabej wydajności absolutnej na jednym rdzeniu do słabej wydajności absolutnej na dowolnej liczbie rdzeni. Jak można sobie wyobrazić, nie robi to wrażenia na społeczności HPC (ale jest odpowiednie dla dużej ilości mocno współbieżnego kodu).
 5
Author: J D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-27 01:13:12

Odnośnie MPI vs OpenMP / UPC: MPI zmusza cię do pokrojenia problemu na małe kawałki i wzięcia odpowiedzialności za przenoszenie danych. Z OpenMP / UPC, "wszystkie dane są tam", po prostu trzeba dereferencji wskaźnik. Zaletą MPI jest to, że klastry 32-512 CPU są znacznie tańsze niż pojedyncze maszyny 32-512 CPU. Ponadto, z MPI koszt jest z góry, podczas projektowania algorytmu. OpenMP / UPC może ukryć opóźnienia, które otrzymasz w czasie wykonywania, jeśli Twój system używa NUMA (i wszystkich dużych systemów do) - twój program nie będzie skalowany i zajmie trochę czasu, aby dowiedzieć się, dlaczego.

 1
Author: florin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 00:19:28

Ten artykuł rzeczywiście dobrze to wyjaśnia, Erlang jest najlepszy, Gdy wysyłamy małe kawałki danych arround i MPI robi znacznie lepiej na bardziej złożonych rzeczy. Również Model Erlanga jest łatwy do zrozumienia: -)

Erlang kontra MPI-wyniki końcowe i Kod źródłowy

 1
Author: Martin Kristiansen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-19 10:39:04