並列および分散コンピューティング


15

並列コンピューティングと分散コンピューティングの違いは何ですか?スケーラビリティと効率に関しては、マシンのクラスターで計算を処理するソリューションが非常に一般的であり、並列処理または分散処理と呼ばれることもあります。

ある意味では、並行して実行されているものがあるため、計算は常に並行しているように見えます。しかし、分散計算は単に複数のマシンの使用に関連しているのでしょうか、それともこれらの2種類の処理を区別するさらなる特異性はありますか?たとえば、計算が並列AND分散であると言うのは冗長ではないでしょうか?

回答:


16

単純に設定すると、「並列」とは個別のリソース(CPU)で同時に実行することを意味し、「分散」とはネットワークに関連する問題を含む個別のコンピューター間で実行することを意味します。

たとえばOpenMPを使用した並列コンピューティングは分散されませんが、メッセージパッシングを使用した並列コンピューティングは多くの場合分散されます。

「分散されているが並列ではない」設定になると、リソースが十分に使用されないため、めったに出会うことはありませんが、概念的には可能です。


4

「並列コンピューティング」と「分散コンピューティング」という用語は確かに大きな重複を持っていますが、さらに区別することができます。実際には、後で「並列処理」と「分散処理」について尋ねることで、あなたはすでにあなたの質問でこれをしました。

「分散コンピューティング」は、「分散処理」や「分散ストレージ」などを含むより一般的な用語と考えることができます。「分散」という一般的な用語は、通常、物理的に分離されたマシン間で、ネットワークを介した何らかのメッセージの受け渡しを指します。

用語「並列計算」がさらに定義されている過程でもあり、例えば、明示的用語「平行」および「同時」、区別によって-略-最初のものが参照データ並列に、後者のタスクの並列処理であるがあり、ほとんど厳密ではなく、拘束力のある定義です。

だから、それを言うことができます

  • 「分散処理」は通常(必ずしもではありませんが)、「並列処理」であることを意味します
  • 「分散コンピューティング」はより一般的であり、並列性に関連しない側面もカバーしています
  • そして明らかに、「並列計算」/「並列処理」は、それが「分散」されていることを意味するものではありません

3

これまでに示した回答は非常に優れていますが、並列処理と分散処理の特定の違い、つまり実行されるコードに重点を置くことも期待していました。並列プロセスを考慮すると、実行されるコードは、並列度(命令、データ、タスク)に関係なく同じです。単一のコードを記述すると、マトリックス製品の計算中や順列の生成中など、さまざまなスレッド/プロセッサによって実行されます。

一方、分散コンピューティングでは、異なるプロセッサ(1つまたは複数のマシンから)で異なるアルゴリズム/プログラムを同時に実行する必要があります。このような計算は、後で利用可能なデータ通信/同期の手段(共有メモリ、ネットワーク)を使用して、中間/最終結果にマージされます。さらに、分散コンピューティングは、ディスクの並列処理(通常、大規模なデータベースのボトルネック)を利用できるため、BigData処理にとって非常に魅力的です。

最後に、並列性のレベルについては、同期の制約と見なすことができます。たとえば、単一命令複数データ(SIMD)であるGPGPUでは、単一の命令に対して異なる入力があり、各ペア(data_i、命令)が異なるスレッドによって実行されることにより、並列処理が発生します。これは、分岐が分岐している場合、スレッドが再収束するまで、不要な計算を大量に破棄する必要があるという制約です。ただし、CPUスレッドの場合、一般的に分岐します。ただし、同期構造を使用して、コードの特定のセクションの同時実行を許可できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.