Ich höre oft Leute über Parallel Computing und Distributed Computing sprechen , aber ich habe den Eindruck, dass es keine klare Grenze zwischen den beiden gibt, und die Leute neigen dazu, das ziemlich leicht zu verwirren, obwohl ich glaube, dass es sehr unterschiedlich ist:
- Paralleles Rechnen ist enger mit Multithreading oder der vollständigen Nutzung einer einzelnen CPU verknüpft.
- Distributed Computing bezieht sich auf den Begriff Teilen und Erobern, das Ausführen von Unteraufgaben auf verschiedenen Computern und das Zusammenführen der Ergebnisse.
Seit wir in die Ära der Big Data eingetreten sind, scheint der Unterschied tatsächlich zu verschmelzen, und die meisten Systeme verwenden heutzutage eine Kombination aus parallelem und verteiltem Computing.
Ein Beispiel, das ich in meiner täglichen Arbeit verwende, ist Hadoop mit dem Map / Reduce-Paradigma, einem klar verteilten System, bei dem Mitarbeiter Aufgaben auf verschiedenen Maschinen ausführen, aber auch jede Maschine mit etwas Parallel-Computing voll ausnutzen.
Ich möchte einige Ratschläge erhalten, um zu verstehen, wie man die Unterscheidung in der heutigen Welt genau macht und ob wir immer noch über Parallel-Computing sprechen können oder ob es keine klare Unterscheidung mehr gibt. Mir scheint, dass das verteilte Rechnen in den letzten Jahren stark gewachsen ist, während das parallele Rechnen zu stagnieren scheint, was wahrscheinlich erklären könnte, warum ich viel mehr über das Verteilen von Berechnungen als über das Parallelisieren spreche.
quelle
Antworten:
Dies ist zum Teil eine terminologische Angelegenheit und setzt lediglich voraus, dass Sie und die Person, mit der Sie sprechen, dies im Voraus klären. Es gibt jedoch verschiedene Themen, die stärker mit Parallelität , Parallelität oder verteilten Systemen verbunden sind .
Bei der Parallelität geht es im Allgemeinen darum, eine bestimmte Berechnung so schnell wie möglich durchzuführen und dabei mehrere Prozessoren auszunutzen. Die Skalierung der Prozessoren kann von mehreren Recheneinheiten innerhalb eines einzelnen Prozessors über mehrere Prozessoren, die sich den Speicher teilen, bis hin zur Verteilung der Berechnung auf viele Computer reichen. Auf der Seite der Rechenmodelle geht es bei der Parallelität im Allgemeinen darum, mehrere simultane Rechenthreads intern zu verwenden, um ein Endergebnis zu berechnen. Parallelität wird manchmal auch für reaktive Echtzeitsysteme verwendet , die viele Prozessoren enthalten, die sich eine einzige Hauptuhr teilen. Solche Systeme sind vollständig deterministisch .
Parallelität ist das Studium von Berechnungen mit mehreren Rechenthreads. Parallelität kommt eher von der Architektur der Software als von der Architektur der Hardware. Software kann so geschrieben werden, dass Parallelität verwendet wird, um die Hardware-Parallelität auszunutzen. Oft ist jedoch das Verhalten der Software darauf angewiesen, auf verschiedene asynchrone Ereignisse zu reagieren (z. B. auf einen Rechenthread, der unabhängig von einem Benutzeroberflächenthread funktioniert, oder auf ein Programm, das reagiert) auf Hardware-Interrupts durch Umschalten auf einen Interrupt-Handler-Thread).
Distributed-Computing- Studien trennen Prozessoren, die durch Kommunikationsverbindungen verbunden sind. Während Parallelverarbeitungsmodelle häufig (aber nicht immer) von gemeinsam genutztem Speicher ausgehen, verlassen sich verteilte Systeme grundsätzlich auf die Weitergabe von Nachrichten. Verteilte Systeme sind von Natur aus gleichzeitig aktiv. Wie die Parallelität ist die Verteilung häufig Teil des Ziels und nicht nur Teil der Lösung: Befinden sich die Ressourcen an geografisch unterschiedlichen Standorten, ist das System von Natur aus verteilt. Systeme, bei denen Teilausfälle (von Prozessorknoten oder von Kommunikationsverbindungen) möglich sind, fallen unter diese Domäne.
quelle
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:
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ösenT x 5x T x x aber 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.
quelle
Ich bin nicht sicher, ob ich die Frage verstehe. Die Unterscheidung zwischen paralleler und verteilter Verarbeitung bleibt bestehen. Die Tatsache, dass Sie beide in derselben Berechnung nutzen können, ändert nichts an der Bedeutung der Konzepte.
Und ich weiß nicht, welche Nachrichten Sie verfolgen, aber ich bin mir ziemlich sicher, dass die parallele Verarbeitung nicht stagniert, zumal ich denke, dass sie viel häufiger nützlich ist.
Wenn Sie Terabytes an Daten verarbeiten müssen, ist verteiltes Rechnen (möglicherweise kombiniert mit parallelem Rechnen) der richtige Weg. Wenn Sie jedoch etwas auf einem Desktop oder Smartphone berechnen müssen, erzielen Sie wahrscheinlich die besten Ergebnisse, wenn Sie parallel rechnen, da die Internetverbindung möglicherweise nicht immer verfügbar ist und wenn dies der Fall ist, kann sie langsam sein.
quelle
Hier ist eine aktuelle Veröffentlichung, die es wert ist, gelesen zu werden:
Michel Raynal: "Parallel Computing vs. Distributed Computing: Eine große Verwirrung?" , Proc. Euro-Par 2015 , doi: 10.1007 / 978-3-319-27308-2_4
Abstrakt:
quelle
Im Einführungsabschnitt des Buches [1] geben die Autoren eine andere Perspektive (anders als in anderen Antworten) auf den Vergleich zwischen verteiltem Rechnen und parallelem Rechnen.
Aus dieser Perspektive fällt das Map / Reduce-Paradigma hauptsächlich in den Parallel-Computing-Kontext. Wenn wir jedoch möchten, dass die beteiligten Knoten einen Konsens über einen gemeinsamen Marktführer erzielen, indem wir beispielsweise den Paxos- Algorithmus (Wiki) verwenden, dann betrachten wir ein typisches Problem beim verteilten Rechnen.
[1] Verteilte Datenverarbeitung. Grundlagen, Simulationen und fortgeschrittene Themen. Hagit Attiya und Jennifer Welch. 2004.
quelle
Es gibt die Antwort, die hier angemessener ist. Grundsätzlich
parallel
bezieht sich aufmemory-shared multiprocessor
währenddistributed
bezieht sich auf seineprivate-memory multicomputers
. Das heißt, die erste ist eine einzelne Multicore- oder Superscalar-Maschine, während die andere ein geografisch verteiltes Computernetzwerk ist. Letzteres bedeutet weniger Kopplung und damit mehr Verfügbarkeit und Fehlertoleranz bei geringerer Leistung. Die Leistung leidet darunter, dass Sie bei jedem Roundtrip eine (De-) Serialisierung der Daten und deren Übermittlung über größere Entfernungen benötigen, während Sie ein speicherinternes Objekt einfach verweisen können, um es an eine andere CPU im Parallelprozessor zu übergeben.quelle