Verteilt gegen paralleles Rechnen

61

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.

Charles Menguy
quelle
5
Paralleles Rechnen bedeutet nicht unbedingt eine einzelne CPU: Es gibt Systeme mit mehreren physischen CPUs.
Svick
2
Auch ist verteiltes Rechnen nicht darauf beschränkt, per se zu teilen und zu erobern. Ich habe mehr Probleme mit Leuten, die Parallelität und Parallelität verwechseln.
Raphael
1
Wenn Sie sich explizit mit verteiltem Computing befassen, müssen Sie viel tiefere Fehlerfälle behandeln. Viele Dinge werden nur aus geografischen Gründen verteilt. Einige verteilte Systeme laufen nur sehr wenig parallel, da ein zentraler Knoten im Netzwerk ein Engpass ist.
Rob

Antworten:

57

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.

Gilles 'SO - hör auf böse zu sein'
quelle
2
Gute Antwort. Man sollte betonen, dass verteiltes Rechnen eine Teilmenge von parallelem Rechnen ist.
Raphael
6
@Raphael: Ich glaube nicht, dass das den Fokus der beiden Felder genau wiedergibt. In der Tat werden sie oft als völlig getrennte Bereiche betrachtet, weil sie sich mit völlig unterschiedlichen Themen befassen. Wenn man einen Parallelrechner mit MPI programmiert, kümmert man sich nicht wirklich um Teilausfälle, da diese bei solchen Rechnern weniger wahrscheinlich sind. Auf der anderen Seite befasst sich das verteilte Rechnen mehr mit Verteilungsproblemen, wie z. B. Teilausfällen, und weit weniger mit dem Ausquetschen jedes CPU-Zyklus aus den verfügbaren Computern.
Dave Clarke
4
@Raphael Im Gegenteil, verteiltes Rechnen ist weitgehend unabhängig von parallelem Rechnen. Bei der Untersuchung verteilter Systeme ist das parallele Rechnen häufig der langweilige Fall (keine interessanten lokalen Ressourcen, keine Ausfälle).
Gilles 'SO- hör auf böse zu sein'
Ich benutzte die Wörter wörtlich; Schade, wenn die Konditionen angeeignet und damit auseinander gegangen sind.
Raphael
Vielen Dank für Ihre Antwort @Gilles, es scheint, als wäre ich ein bisschen voreingenommen in Richtung Distributed Computing.
Charles Menguy
17

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:

  1. Lösen Sie rechenintensive Probleme schneller.
  2. Lösen Sie größere Probleme in der gleichen Zeit.
  3. 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.

Massimo Cafaro
quelle
2
Ich halte diese Antwort für etwas irreführend. Der Schwerpunkt liegt auf dem verteilten Hochleistungsrechnen (das in der Tat eng mit dem parallelen Hochleistungsrechnen verwandt ist), während das gesamte Gebiet des verteilten Rechnens viel weiter gefasst ist.
Jukka Suomela
Ich stimme dem nicht zu: Die Antwort beinhaltet auch verteiltes Hochleistungsrechnen, das in der Regel nicht im verteilten Rechnen enthalten ist. In der Tat habe ich über Client-Server- und Peer-to-Peer-Modelle, Sicherheit, Fehler und Netzwerkpartitionsprobleme gesprochen, die beim verteilten Computing auftreten.
Massimo Cafaro
+1. Schöne Antwort! Ich frage mich, ob verteiltes Computing nicht für andere Zwecke als paralleles Computing verwendet wird. Mit anderen Worten, ist verteiltes Rechnen eine Teilmenge des parallelen Rechnens, dh gehört verteiltes Rechnen zum parallelen Rechnen? Übrigens, hier ist meine Frage cs.stackexchange.com/questions/20064
Tim
1
@Tim, Distributed Computing wird auch per se verwendet, unabhängig von Parallel Computing. Denken Sie zum Beispiel an klassische verteilte Algorithmen wie die Wahl der Führer, den Konsens usw.
Massimo Cafaro
7

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.

svick
quelle
1
-1, da diese Antwort die Frage nicht wirklich beantwortet (dh die Begriffe erklärt).
Jukka Suomela
@JukkaSuomela, bei der Frage geht es nicht um die Erklärung der Begriffe, sondern um die Unterscheidung zwischen ihnen.
Svick
6

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:

In diesem kurzen Positionspapier wird die Tatsache erörtert, dass Parallelität und verteiltes Rechnen unter Lehrgesichtspunkten häufig verwechselt werden, während sie in ihrer Tiefe unterschiedliche grundlegende Probleme ansprechen. Daher sollten geeignete Lehrpläne für jeden von ihnen separat entworfen werden. Die Einstellung „Alles ist in allem (und wechselseitig)“ scheint kein relevanter Ansatz zu sein, um den Schülern die wichtigen Konzepte beizubringen, die Parallelität auf der einen Seite und verteiltes Rechnen auf der anderen Seite charakterisieren.

Jukka Suomela
quelle
4

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.

Allgemein ausgedrückt besteht das Ziel der Parallelverarbeitung darin, alle Prozessoren für eine große Aufgabe einzusetzen. Im Gegensatz dazu hat jeder Prozessor in einem verteilten System im Allgemeinen eine eigene, halbunabhängige Agenda, aber aus verschiedenen Gründen, einschließlich der gemeinsamen Nutzung von Ressourcen, Verfügbarkeit und Fehlertoleranz, müssen Prozessoren ihre Aktionen koordinieren.

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.

Hengxin
quelle
0

Es gibt die Antwort, die hier angemessener ist. Grundsätzlich parallelbezieht sich auf memory-shared multiprocessorwährend distributedbezieht sich auf seine private-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.

Kleiner Alien
quelle