Jak zauważył @Raphael, Distributed Computing jest podzbiorem Parallel Computing; z kolei Parallel Computing jest podzbiorem Compurrent Computing.
Współbieżność odnosi się do udostępnianiazasobów w tym samym czasie. Na przykład kilka procesów współdzieli ten sam procesor (lub rdzenie procesora) lub współużytkuje pamięć lub urządzenie we / wy. Systemy operacyjne zarządzają współużytkowanymi zasobami. Maszyny wieloprocesorowe i systemy rozproszone to architektury, w których kontrola współbieżności odgrywa ważną rolę. Współbieżność występuje zarówno na poziomie sprzętu, jak i oprogramowania. Wiele urządzeń działa jednocześnie, procesory mają wewnętrzną równoległość i działają na kilku instrukcjach jednocześnie, systemy mają wiele procesorów, a systemy współdziałają poprzez komunikację sieciową. Współbieżność występuje na poziomie aplikacji w przetwarzaniu sygnałów, w nakładaniu się We / Wy i przetwarzaniu, w komunikacji oraz w współdzieleniu zasobów między procesami lub między wątkami w tym samym procesie.
Dwa procesy (lub wątki) wykonujące się w tym samym systemie, dzięki czemu ich wykonywanie jest przeplatane w czasie, są współbieżne: procesy (wątki) współużytkują zasoby procesora. Podoba mi się następująca definicja: dwa procesy (wątki) wykonujące się w tym samym systemie są współbieżne wtedy i tylko wtedy, gdy drugi proces (wątek) rozpocznie wykonywanie, gdy pierwszy proces (wątek) jeszcze nie zakończył wykonywania.
Współbieżność staje się równoległością, gdy procesy (lub wątki) są wykonywane na różnych procesorach (lub rdzeniach tego samego procesora). Równoległość w tym przypadku nie jest „wirtualna”, ale „prawdziwa”.
Gdy te procesory należą do tej samej maszyny, nazywamy to obliczeniem „równoległym”; gdy procesory należą do różnych maszyn , mogą być rozproszone geograficznie, określamy to jako „rozproszone”.
Dlatego Distributed Computing jest podzbiorem Compallel Computing, który jest podzbiorem Compurrent Computing.
Oczywiście prawdą jest, że ogólnie przetwarzanie równoległe i rozproszone uważa się za różne. Obliczenia równoległe są powiązane ze ściśle powiązanymi aplikacjami i służą do osiągnięcia jednego z następujących celów:
- Szybsze rozwiązywanie problemów wymagających intensywnych obliczeń;
- Rozwiązuj większe problemy w tym samym czasie;
- Rozwiązuj problemy o tym samym rozmiarze z większą dokładnością w tym samym czasie.
W przeszłości pierwszym celem był główny powód przetwarzania równoległego: przyspieszenie rozwiązania problemu. W tej chwili, a gdy to możliwe, naukowcy wykorzystują obliczenia równoległe głównie do osiągnięcia drugiego celu (np. Są skłonni spędzić tyle samo czasu ile spędzili w przeszłości, rozwiązując równolegle problem wielkości aby rozwiązać problem teraz o rozmiarze ) lub trzecim (tzn. są skłonni spędzić tyle samo czasu co spędzili w przeszłości, rozwiązując równolegle problem wielkości aby teraz rozwiązać problem wielkościTx5xTxxale z większą dokładnością przy użyciu znacznie bardziej złożonego modelu, większej liczby równań, zmiennych i ograniczeń). Przetwarzanie równoległe może wykorzystywać pamięć współużytkowaną, przekazywanie wiadomości lub obie te funkcje (np. Wewnątrzwęzeł z pamięcią współużytkowaną za pomocą OpenMP, między-węzeł do przekazywania wiadomości za pomocą MPI); może również używać akceleratorów GPU. Ponieważ aplikacja działa na jednym równoległym superkomputerze, zwykle nie bierzemy pod uwagę takich problemów, jak awarie, partycja sieciowa itp., Ponieważ prawdopodobieństwo tych zdarzeń jest w praktyce bliskie zeru. Jednak duże równoległe aplikacje, takie jak symulacje zmian klimatu, które mogą działać przez kilka miesięcy, zwykle dotyczą awarii i używają mechanizmu kontrolnego / restartu, aby uniknąć ponownego uruchomienia symulacji od początku, jeśli pojawi się problem.
Przetwarzanie rozproszone jest powiązane z aplikacjami luźno sprzężonymi, w których celem (w przypadku rozproszonego superkomputera ) jest rozwiązywanie problemów, które byłyby zbyt duże lub których wykonanie można podzielić na różne komponenty, które mogłyby skorzystać z wykonania na różnych architekturach. Istnieje kilka modeli, w tym klient-serwer, peer-to-peer itp. Problemy związane z przetwarzaniem rozproszonym, takie jak bezpieczeństwo, awarie, partycja sieciowa itp. Muszą być wzięte pod uwagę w czasie projektowania, ponieważ w tym kontekście awarie są regułą i nie wyjątek.
Wreszcie, siatki i chmurze obliczeniowe są zarówno podzbiór rozproszonego. Paradygmat obliczeń gridowych pojawił się jako nowa dziedzina odróżniająca się od tradycyjnego przetwarzania rozproszonego ze względu na jego koncentrację na udostępnianiu zasobów na dużą skalę i innowacyjnych aplikacjach o wysokiej wydajności. Udostępniane zasoby zwykle należą do wielu różnych domen administracyjnych (tzw. Organizacje wirtualne ). Grid Computing, choć jest intensywnie wykorzystywany przez naukowców w ostatniej dekadzie, jest tradycyjnie trudny dla zwykłych użytkowników. Przetwarzanie w chmurze próbuje wypełnić lukę, umożliwiając zwykłym użytkownikom łatwe wykorzystywanie wielu maszyn, które znajdują się w tym samym centrum danych i nie są rozproszone geograficznie, za pomocą maszyn wirtualnychktóre mogą być montowane przez użytkowników w celu uruchomienia ich aplikacji. Ze względu na sprzęt, w szczególności zwykły brak wysokowydajnego połączenia sieciowego (takiego jak Infiniband itp.), Chmury nie są przeznaczone do uruchamiania równoległych aplikacji MPI. Aplikacje rozproszone działające w chmurach są zwykle implementowane w celu wykorzystania paradygmatu Mapa / Zmniejszenie. Nawiasem mówiąc, wiele osób myśli o Mapowaniu / zmniejszaniu jako o równoległym modelu przepływu danych.