Wie von @Raphael hervorgehoben, ist Distributed Computing eine Teilmenge von Parallel Computing. Parallel Computing ist wiederum eine Teilmenge von Concurrent Computing.
Parallelität bezieht sich auf die Freigabevon Ressourcen im gleichen Zeitrahmen. Beispielsweise teilen sich mehrere Prozesse die gleiche CPU (oder CPU-Kerne) oder den Speicher oder ein E / A-Gerät. Betriebssysteme verwalten gemeinsam genutzte Ressourcen. Multiprozessor-Maschinen und verteilte Systeme sind Architekturen, bei denen die Parallelitätskontrolle eine wichtige Rolle spielt. Parallelität tritt sowohl auf der Hardware- als auch auf der Software-Ebene auf. Mehrere Geräte arbeiten gleichzeitig, Prozessoren arbeiten parallel und gleichzeitig an mehreren Befehlen, Systeme haben mehrere Prozessoren und Systeme interagieren über die Netzwerkkommunikation. Parallelität tritt auf Anwendungsebene bei der Signalverarbeitung, bei der Überlappung von E / A und Verarbeitung, bei der Kommunikation und bei der gemeinsamen Nutzung von Ressourcen zwischen Prozessen oder zwischen Threads im selben Prozess auf.
Zwei Prozesse (oder Threads), die auf demselben System ausgeführt werden, sodass ihre Ausführung zeitlich verschachtelt ist, sind gleichzeitig aktiv: Prozesse (Threads) teilen sich die CPU-Ressource. Ich mag die folgende Definition: Zwei Prozesse (Threads), die auf demselben System ausgeführt werden, sind nur dann gleichzeitig aktiv, wenn der zweite Prozess (Thread) mit der Ausführung beginnt, wenn der erste Prozess (Thread) seine Ausführung noch nicht beendet hat.
Parallelität wird zu Parallelität, wenn Prozesse (oder Threads) auf verschiedenen CPUs (oder Kernen derselben CPU) ausgeführt werden. Parallelität ist in diesem Fall nicht "virtuell", sondern "real".
Wenn diese CPUs zur selben Maschine gehören, bezeichnen wir die Berechnung als "parallel"; Wenn die CPUs zu verschiedenen Maschinen gehören , die möglicherweise geografisch verteilt sind, wird die Berechnung als "verteilt" bezeichnet.
Daher ist Distributed Computing eine Teilmenge von Parallel Computing, einer Teilmenge von Concurrent Computing.
Natürlich werden paralleles und verteiltes Rechnen im Allgemeinen als unterschiedlich angesehen. Paralleles Rechnen bezieht sich auf eng gekoppelte Anwendungen und wird verwendet, um eines der folgenden Ziele zu erreichen:
- Lösen Sie rechenintensive Probleme schneller.
- Lösen Sie größere Probleme in der gleichen Zeit.
- Lösen Sie Probleme mit gleicher Größe mit höherer Genauigkeit in derselben Zeit.
In der Vergangenheit war das erste Ziel der Hauptgrund für das parallele Rechnen: die Beschleunigung der Problemlösung. Derzeit verwenden Wissenschaftler, wenn möglich, hauptsächlich Parallel-Computing, um eines der beiden Ziele zu erreichen (z. B. sind sie bereit, die gleiche Zeitspanne sie in der Vergangenheit verbracht haben, um ein Problem der Größe parallel zu lösen, um jetzt ein Problem zu lösen der Größe ) oder der dritten (dh sie sind bereit, die gleiche Zeitdauer in der Vergangenheit zu verbringen, um parallel ein Problem der Größe zu lösen, um nun ein Problem der Größe zu lösenTx5xTxxaber mit höherer Genauigkeit unter Verwendung eines viel komplexeren Modells, mehr Gleichungen, Variablen und Nebenbedingungen). Paralleles Rechnen kann Shared-Memory, Message-Passing oder beides verwenden (z. B. Shared-Memory-Intra-Node mit OpenMP, Message-Passing-Inter-Node mit MPI); Möglicherweise werden auch GPUs-Beschleuniger verwendet. Da die Anwendung auf einem parallelen Supercomputer ausgeführt wird, berücksichtigen wir normalerweise keine Probleme wie Ausfälle, Netzwerkpartitionen usw., da die Wahrscheinlichkeit dieser Ereignisse aus praktischen Gründen nahe Null liegt. Bei großen parallelen Anwendungen wie Klimawandelsimulationen, die mehrere Monate dauern können, handelt es sich jedoch in der Regel um Ausfälle. Mithilfe des Checkpointing / Restart-Mechanismus wird vermieden, dass die Simulation im Falle eines Problems erneut von vorn gestartet wird.
Distributed Computing bezieht sich auf lose gekoppelte Anwendungen, bei denen das Ziel (für Distributed Supercomputing ) darin besteht, Probleme zu lösen, die sonst zu groß sind oder deren Ausführung auf verschiedene Komponenten aufgeteilt werden kann, die von der Ausführung auf verschiedenen Architekturen profitieren könnten. Es gibt verschiedene Modelle, einschließlich Client-Server, Peer-to-Peer usw. Die beim verteilten Computing auftretenden Probleme wie Sicherheit, Ausfälle, Netzwerkpartition usw. müssen zur Entwurfszeit berücksichtigt werden, da in diesem Zusammenhang Ausfälle die Regel sind und nicht die Ausnahme.
Schließlich sind Grid- und Cloud- Computing Teilmengen des verteilten Computing. Das Grid-Computing-Paradigma entwickelte sich zu einem neuen Bereich, der sich vom traditionellen verteilten Computing durch seinen Fokus auf die gemeinsame Nutzung großer Ressourcen und innovative Hochleistungsanwendungen unterscheidet. Ressourcen, die gemeinsam genutzt werden, gehören normalerweise zu mehreren verschiedenen Verwaltungsdomänen (sogenannten virtuellen Organisationen ). Obwohl Grid Computing in den letzten zehn Jahren stark von Wissenschaftlern genutzt wurde, ist es für normale Benutzer traditionell schwierig. Cloud Computing versucht, diese Lücke zu schließen, indem normale Benutzer mithilfe virtueller Maschinen problemlos mehrere Maschinen ausnutzen können, die sich im selben Rechenzentrum befinden und nicht geografisch verteilt sinddas kann von den Benutzern zusammengestellt werden, um ihre Anwendungen auszuführen. Aufgrund der Hardware, insbesondere des üblichen Fehlens einer leistungsfähigen Netzwerkverbindung (wie Infiniband usw.), sind Clouds nicht für die Ausführung paralleler MPI-Anwendungen vorgesehen. Verteilte Anwendungen, die in Clouds ausgeführt werden, werden normalerweise implementiert, um das Map / Reduce-Paradigma auszunutzen. Übrigens, viele Menschen betrachten Map / Reduce als ein Modell für den parallelen Datenfluss.