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.