回答:
単純に設定すると、「並列」とは個別のリソース(CPU)で同時に実行することを意味し、「分散」とはネットワークに関連する問題を含む個別のコンピューター間で実行することを意味します。
たとえばOpenMPを使用した並列コンピューティングは分散されませんが、メッセージパッシングを使用した並列コンピューティングは多くの場合分散されます。
「分散されているが並列ではない」設定になると、リソースが十分に使用されないため、めったに出会うことはありませんが、概念的には可能です。
「並列コンピューティング」と「分散コンピューティング」という用語は確かに大きな重複を持っていますが、さらに区別することができます。実際には、後で「並列処理」と「分散処理」について尋ねることで、あなたはすでにあなたの質問でこれをしました。
「分散コンピューティング」は、「分散処理」や「分散ストレージ」などを含むより一般的な用語と考えることができます。「分散」という一般的な用語は、通常、物理的に分離されたマシン間で、ネットワークを介した何らかのメッセージの受け渡しを指します。
用語「並列計算」がさらに定義されている過程でもあり、例えば、明示的用語「平行」および「同時」、区別によって-略-最初のものが参照データ並列に、後者のタスクの並列処理であるがあり、ほとんど厳密ではなく、拘束力のある定義です。
だから、それを言うことができます
これまでに示した回答は非常に優れていますが、並列処理と分散処理の特定の違い、つまり実行されるコードに重点を置くことも期待していました。並列プロセスを考慮すると、実行されるコードは、並列度(命令、データ、タスク)に関係なく同じです。単一のコードを記述すると、マトリックス製品の計算中や順列の生成中など、さまざまなスレッド/プロセッサによって実行されます。
一方、分散コンピューティングでは、異なるプロセッサ(1つまたは複数のマシンから)で異なるアルゴリズム/プログラムを同時に実行する必要があります。このような計算は、後で利用可能なデータ通信/同期の手段(共有メモリ、ネットワーク)を使用して、中間/最終結果にマージされます。さらに、分散コンピューティングは、ディスクの並列処理(通常、大規模なデータベースのボトルネック)を利用できるため、BigData処理にとって非常に魅力的です。
最後に、並列性のレベルについては、同期の制約と見なすことができます。たとえば、単一命令複数データ(SIMD)であるGPGPUでは、単一の命令に対して異なる入力があり、各ペア(data_i、命令)が異なるスレッドによって実行されることにより、並列処理が発生します。これは、分岐が分岐している場合、スレッドが再収束するまで、不要な計算を大量に破棄する必要があるという制約です。ただし、CPUスレッドの場合、一般的に分岐します。ただし、同期構造を使用して、コードの特定のセクションの同時実行を許可できます。