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.