Przetwarzanie równoległe i rozproszone

15

Jaka jest (są) różnica (-y) między obliczeniami równoległymi i rozproszonymi? Jeśli chodzi o skalowalność i wydajność, bardzo często spotyka się rozwiązania dotyczące obliczeń w klastrach maszyn, a czasem nazywa się je przetwarzaniem równoległym lub przetwarzaniem rozproszonym.

W pewnym sensie obliczenia wydają się zawsze równoległe, ponieważ niektóre rzeczy działają równolegle. Ale czy obliczenia rozproszone są po prostu związane z korzystaniem z więcej niż jednej maszyny, czy też są jakieś dodatkowe cechy, które odróżniają te dwa rodzaje przetwarzania? Czy nie byłoby zbędne stwierdzenie, na przykład, że obliczenia są równoległe ORAZ rozproszone ?

Rubens
źródło

Odpowiedzi:

16

Mówiąc prosto, „równoległy” oznacza pracę równoległą na różnych zasobach (procesorach), podczas gdy „rozproszony” oznacza pracę na różnych komputerach, co wiąże się z problemami związanymi z sieciami.

Obliczenia równoległe z wykorzystaniem na przykład OpenMP nie są rozproszone, podczas gdy przetwarzanie równoległe z przekazywaniem wiadomości jest często rozproszone.

Bycie w ustawieniu „rozproszonym, ale nie równoległym” oznaczałoby niepełne wykorzystanie zasobów, więc rzadko się go spotyka, ale jest to możliwe koncepcyjnie.

damienfrancois
źródło
4

Pojęcia „przetwarzanie równoległe” i „przetwarzanie rozproszone” z pewnością w dużym stopniu się pokrywają, ale można je dalej różnicować. W rzeczywistości zrobiłeś to już w swoim pytaniu, pytając później o „przetwarzanie równoległe” i „przetwarzanie rozproszone”.

„Komputer rozproszony” można uznać za bardziej ogólny termin obejmujący „przetwarzanie rozproszone”, a także na przykład „pamięć rozproszoną”. Powszechny termin „rozproszony” zwykle odnosi się do pewnego rodzaju przekazu wiadomości w sieci między fizycznie oddzielonymi komputerami.

Pojęcie „obliczanie równoległe” jest również w trakcie dalszego definiowania, np. Poprzez wyraźne rozróżnienie między terminami „równoległe” i „współbieżne”, gdzie - z grubsza - pierwszy odnosi się do paralelizmu danych, a drugi do paralelizmu zadań , chociaż istnieje są mało ścisłymi i wiążącymi definicjami.

Można by tak powiedzieć

  • „przetwarzanie rozproszone” zwykle (choć niekoniecznie) oznacza, że ​​jest to również „przetwarzanie równoległe”
  • „przetwarzanie rozproszone” jest bardziej ogólne i obejmuje również aspekty niezwiązane z równoległością
  • i oczywiście „przetwarzanie równoległe” / „przetwarzanie równoległe” nie oznacza, że ​​jest „rozproszone”
Marco13
źródło
3

Odpowiedzi przedstawione do tej pory są bardzo miłe, ale spodziewałem się także, że położę nacisk na szczególną różnicę między przetwarzaniem równoległym a rozproszonym: wykonanym kodem. Biorąc pod uwagę procesy równoległe, wykonywany kod jest taki sam, niezależnie od poziomu równoległości (instrukcja, dane, zadanie). Piszesz pojedynczy kod , który będzie wykonywany przez różne wątki / procesory, np. Podczas obliczania produktów macierzy lub generowania permutacji.

Z drugiej strony obliczenia rozproszone obejmują wykonywanie różnych algorytmów / programów w tym samym czasie w różnych procesorach (z jednego lub większej liczby komputerów). Takie obliczenia są następnie łączone w wyniki pośrednie / końcowe przy użyciu dostępnych środków komunikacji / synchronizacji danych (pamięć współdzielona, ​​sieć). Ponadto przetwarzanie rozproszone jest bardzo atrakcyjne dla przetwarzania BigData, ponieważ pozwala na wykorzystanie równoległości dysków (zwykle wąskie gardło w przypadku dużych baz danych).

Wreszcie, dla poziomu równoległości można go raczej traktować jako ograniczenie synchronizacji. Na przykład, w GPGPU, który jest wieloma danymi z pojedynczej instrukcji (SIMD), równoległość występuje poprzez posiadanie różnych danych wejściowych dla pojedynczej instrukcji, przy czym każda para (data_i, instrukcja) jest wykonywana przez inny wątek. Takie ograniczenie jest takie, że w przypadku rozbieżnych gałęzi konieczne jest odrzucenie wielu niepotrzebnych obliczeń, dopóki wątki się nie zbiegną. W przypadku wątków procesorów zwykle się różnią; jednak można użyć struktur synchronizacyjnych, aby zezwolić na równoczesne wykonanie określonych sekcji kodu.

Rubens
źródło