Paralleles und verteiltes Rechnen

14

Was ist (sind) der Unterschied zwischen parallelem und verteiltem Computing? Wenn es um Skalierbarkeit und Effizienz geht, werden häufig Lösungen für Berechnungen in Maschinenclustern verwendet. Manchmal wird dies als Parallelverarbeitung oder als verteilte Verarbeitung bezeichnet.

In gewisser Weise scheint die Berechnung immer parallel zu sein, da Dinge gleichzeitig ablaufen. Aber hängt die verteilte Berechnung einfach mit der Verwendung von mehr als einer Maschine zusammen, oder gibt es weitere Besonderheiten, die diese beiden Arten der Verarbeitung unterscheiden? Wäre es nicht überflüssig zu sagen, dass eine Berechnung parallel UND verteilt ist ?

Rubens
quelle

Antworten:

16

Einfach ausgedrückt bedeutet "parallel", dass gleichzeitig auf verschiedenen Ressourcen (CPUs) ausgeführt wird, während "verteilt" bedeutet, dass auf verschiedenen Computern ausgeführt wird, was Probleme im Zusammenhang mit Netzwerken mit sich bringt.

Paralleles Computing mit beispielsweise OpenMP wird nicht verteilt, während paralleles Computing mit Message Passing häufig verteilt wird.

In einer "verteilten, aber nicht parallelen" Umgebung zu sein, würde bedeuten, dass die Ressourcen nicht ausreichend genutzt werden. Dies ist selten anzutreffen, aber konzeptionell möglich.

damienfrancois
quelle
4

Die Begriffe "Parallel Computing" und "Distributed Computing" überschneiden sich zwar stark, können aber noch weiter differenziert werden. Tatsächlich haben Sie dies bereits in Ihrer Frage getan, indem Sie später nach "Parallelverarbeitung" und "verteilte Verarbeitung" gefragt haben.

Man könnte "verteiltes Rechnen" als den allgemeineren Begriff betrachten, der "verteiltes Verarbeiten" sowie beispielsweise "verteiltes Speichern" beinhaltet. Der häufig verwendete Begriff "verteilt" bezieht sich normalerweise auf eine Art von Nachrichtenübermittlung über ein Netzwerk zwischen physisch getrennten Computern.

Der Begriff "paralleles Rechnen" wird ebenfalls weiter definiert, z. B. indem explizit zwischen den Begriffen "parallel" und "gleichzeitig" unterschieden wird, wobei der erste Begriff die Datenparallelität und der letztere die Aufgabenparallelität bezeichnet , obwohl dies der Fall ist sind kaum wirklich strenge und verbindliche Vorgaben.

So könnte man das sagen

  • "verteilte Verarbeitung" bedeutet normalerweise (wenn auch nicht notwendigerweise), dass es sich auch um "parallele Verarbeitung" handelt.
  • "Distributed Computing" ist allgemeiner und deckt auch Aspekte ab, die nicht mit Parallelität zusammenhängen
  • und offensichtlich bedeutet "paralleles Rechnen" / "paralleles Verarbeiten" nicht, dass es "verteilt" ist
Marco13
quelle
3

Die bisher präsentierten Antworten sind sehr schön, aber ich hatte auch einen besonderen Unterschied zwischen paralleler und verteilter Verarbeitung erwartet: den ausgeführten Code. Bei parallelen Prozessen ist der ausgeführte Code unabhängig vom Grad der Parallelität (Anweisung, Daten, Aufgabe) derselbe. Sie schreiben einen einzelnen Code , der von verschiedenen Threads / Prozessoren ausgeführt wird, z. B. beim Berechnen von Matrizenprodukten oder beim Generieren von Permutationen.

Andererseits beinhaltet verteiltes Rechnen die Ausführung verschiedener Algorithmen / Programme zur gleichen Zeit auf verschiedenen Prozessoren (von einer oder mehreren Maschinen). Solche Berechnungen werden später unter Verwendung der verfügbaren Datenkommunikations- / Synchronisationsmittel (gemeinsamer Speicher, Netzwerk) zu Zwischen- / Endergebnissen zusammengeführt. Darüber hinaus ist verteiltes Computing für die BigData-Verarbeitung sehr attraktiv, da es die Festplattenparallelität ausnutzt (normalerweise der Engpass bei großen Datenbanken).

Schließlich kann das Niveau der Parallelität eher als Einschränkung für die Synchronisation angesehen werden. Beispielsweise tritt in der GPGPU, die Single-Instruction-Multiple-Data (SIMD) ist, die Parallelität auf, indem unterschiedliche Eingaben für einen einzelnen Befehl vorliegen, wobei jedes Paar (data_i, Befehl) von einem unterschiedlichen Thread ausgeführt wird. Dies ist die Einschränkung, dass bei abweichenden Zweigen viele unnötige Berechnungen verworfen werden müssen, bis die Threads wieder zusammenlaufen. Bei CPU-Threads gehen sie jedoch häufig auseinander. Man kann jedoch Synchronisationsstrukturen verwenden, um die gleichzeitige Ausführung bestimmter Codeabschnitte zu ermöglichen.

Rubens
quelle