分散コンピューティングと並列コンピューティング


61

私はよく人々が並列コンピューティングと分散コンピューティングについて話しているのを聞きますが、2の間に明確な境界はないという印象を受けており、人々はそれをかなり簡単に混同する傾向がありますが、それは非常に異なると信じています:

  • 並列計算は、マルチスレッド、または単一のCPUを最大限に活用する方法により密接に結合されています。
  • 分散コンピューティングとは、分割と征服の概念を指し、異なるマシンでサブタスクを実行し、結果をマージします。

ただし、ビッグデータ時代に踏み込んだため、その違いは確かに失われつつあり、今日のほとんどのシステムは並列コンピューティングと分散コンピューティングの組み合わせを使用しています。

私が日々の仕事で使用している例は、Map / Reduceパラダイムを備えたHadoopです。これは、異なるマシンでタスクを実行するワーカーを備えた明確な分散システムですが、並列コンピューティングで各マシンを最大限に活用します。

今日の世界でどのように区別するのか、そして並列コンピューティングについてまだ話せるのか、それとも明確な区別がないのかを理解するためのアドバイスをもらいたいと思います。私にとっては、分散コンピューティングは過去数年で大きく成長したように見えますが、並列コンピューティングは停滞しているようです。これはおそらく、並列化よりも計算の分散について多くの話を聞く理由を説明できるでしょう。


5
並列コンピューティングは必ずしも単一のCPUを意味するわけではありません。複数の物理CPUを備えたシステムがあります。
-svick

2
また、分散コンピューティングは、それ自体を分割して征服することに制限されません。並行性と並列性を混同している人たちにはもっと苦労しています。
ラファエル

1
分散コンピューティングに明示的に対処している場合は、より深い障害ケースを処理する必要があります。多くのことは地理的な理由でのみ配布されます。ネットワークの中央ノードがボトルネックであるため、一部の分散システムではほとんど並行処理が行われていません。
ロブ

回答:


57

これは部分的に用語の問題であり、そのため、事前に明確にするためにあなたとあなたが話している人だけが必要です。ただし、並列処理同時実行性、または分散システムに関連するトピックがいくつかあります

並列処理は一般に、特定の計算を可能な限り高速で実行し、複数のプロセッサを活用することに関係しています。プロセッサの規模は、単一のプロセッサ内の複数の演算ユニットから、メモリを共有する複数のプロセッサ、計算を多くのコンピュータに分散するものまでさまざまです。計算モデルの側面では、並列処理とは一般に、最終結果を計算するために、内部的に複数の同時計算スレッドを使用することです。並列処理は、単一のマスタークロックを共有する多くのプロセッサを含むリアルタイム リアクティブシステムにも使用されることがあります。そのようなシステムは完全に決定論的です。

並行性は、複数の計算スレッドを使用した計算の研究です。並行性は、ハードウェアのアーキテクチャからではなく、ソフトウェアのアーキテクチャから生じる傾向があります。ハードウェアの並列処理を活用するために並行性を使用するようにソフトウェアを作成することもできますが、多くの場合、ソフトウェアの動作に固有のニーズ、異なる非同期イベントに対応する必要があります(たとえば、ユーザーインターフェイススレッドとは独立して動作する計算スレッド、または対応するプログラム割り込みハンドラースレッドに切り替えて、ハードウェア割り込みに移行します)。

分散コンピューティングは、通信リンクで接続された別々のプロセッサを研究します。並列処理モデルは多くの場合(常にではないが)共有メモリを前提としていますが、分散システムは基本的にメッセージの受け渡しに依存しています。分散システムは本質的に並行です。並行性と同様に、分散は多くの場合、ソリューションの一部ではなく目標の一部です。リソースが地理的に異なる場所にある場合、システムは本質的に分散されます。(プロセッサノードまたは通信リンクの)部分的な障害が発生する可能性があるシステムは、このドメインに分類されます。


2
いい答えだ。分散コンピューティングは並列コンピューティングのサブセットであることを強調する必要があります。
ラファエル

6
@Raphael:それが2つの分野の焦点を正確に表しているとは思わない。実際、これらはまったく異なる問題に対処するため、多くの場合、完全に別個のフィールドと見なされます。MPIを使用して並列コンピューターをプログラミングする場合、これらのコンピューターでは発生する可能性が低いため、部分的な障害にはあまり関心がありません。一方、分散コンピューティングは、部分的な障害などの分散の問題に関心があり、使用可能なマシンをすべてのCPUサイクルから絞り出すことにはあまり関心がありません。
デイブクラーク

4
@Raphaelそれどころか、分散コンピューティングは、並列コンピューティングから非常に独立しています。分散システムの研究では、並列コンピューティングはしばしば退屈なケースです(興味深いローカルリソースも障害もありません)。
ジル「SO-悪であるのをやめる」

私は言葉を文字通り使っていました。条件が適切に割り当てられており、したがって分岐している場合は、あまりにも悪いです。
ラファエル

@Gillesの回答に感謝します。適切な用語で何かを参照している人に会えてうれしいです。
チャールズメンガイ

17

@Raphaelが指摘したように、Distributed ComputingはParallel Computingのサブセットです。同様に、Parallel ComputingはConcurrent Computingのサブセットです。

同時実行とは共有を指します同じ時間枠内のリソースの。たとえば、複数のプロセスが同じCPU(またはCPUコア)を共有するか、メモリまたはI / Oデバイスを共有します。オペレーティングシステムは共有リソースを管理します。マルチプロセッサマシンと分散システムは、同時実行制御が重要な役割を果たすアーキテクチャです。並行性は、ハードウェアレベルとソフトウェアレベルの両方で発生します。複数のデバイスが同時に動作し、プロセッサーは内部並列処理を備え、複数の命令を同時に処理します。システムには複数のプロセッサーがあり、システムはネットワーク通信を介して相互作用します。並行処理は、信号処理、I / Oと処理のオーバーラップ、通信、およびプロセス間または同じプロセス内のスレッド間でのリソースの共有において、アプリケーションレベルで発生します。

同じシステム上で実行される2つのプロセス(またはスレッド)は、それらの実行が時間内にインターリーブされるように同時実行されます。プロセス(スレッド)はCPUリソースを共有しています。私は次の定義が好きです:同じシステムで実行されている2つのプロセス(スレッド)は、最初のプロセス(スレッド)がまだ実行を終了していないときに2番目のプロセス(スレッド)が実行を開始する場合にのみ並行します。

プロセス(またはスレッド)が異なるCPU(または同じCPUのコア)で実行されると、同時実行性は並列処理になります。この場合の並列処理は「仮想」ではなく「実際」です。

これらのCPUが同じマシンに属している場合、計算を「並列」と呼びます。CPUが異なるマシンに属し、地理的に分散している場合、計算を「分散」と呼びます。

したがって、分散コンピューティングは並行コンピューティングのサブセットであり、並行コンピューティングのサブセットです。

もちろん、一般に、並列コンピューティングと分散コンピューティングは異なるものと見なされているのは事実です。並列コンピューティングは、密結合アプリケーションに関連しており、次のいずれかの目標を達成するために使用されます。

  1. 計算集中型の問題をより迅速に解決します。
  2. 同じ時間でより大きな問題を解決します。
  3. 同じ時間で同じサイズの問題をより高い精度で解決します。

過去において、最初の目標は並列コンピューティングの主な理由でした。問題の解決を加速することでした。現在、可能な場合、科学者は主に並列コンピューティングを使用して、2番目の目標のいずれかを達成します(たとえば、 過去に費やした時間と同じ時間を費やしてサイズ問題を並列に解決して問題を解決します)サイズの)、または第三1(すなわち、それらは時間の同じ量費やすことを喜んでいる彼らはサイズの並列問題に解決過去に費やした今やサイズの問題解決するためにx 5 x T x xTx5xTxxはるかに複雑なモデル、より多くの方程式、変数、制約を使用してより高い精度で)。並列計算では、共有メモリ、メッセージ受け渡し、またはその両方を使用できます(たとえば、OpenMPを使用した共有メモリのイントラノード、MPIを使用したメッセージ受け渡しのノード間)。GPUアクセラレータも使用する場合があります。アプリケーションは1つの並列スーパーコンピューターで実行されるため、通常、障害、ネットワークパーティションなどの問題は考慮しません。これらのイベントの確率は、実際的な目的でゼロに近いためです。ただし、気候変動シミュレーションなどの数か月間実行される大規模な並列アプリケーションは、通常、障害に関係しており、チェックポイント設定/再起動メカニズムを使用して、問題が発生した場合に最初からシミュレーションを再開しないようにします。

分散コンピューティングは疎結合アプリケーションに関連しており、(分散スーパーコンピューティングの)目標は、そうでなければ大きすぎる問題や、異なるアーキテクチャでの実行から恩恵を受ける可能性がある異なるコンポーネントで実行が分割される問題を解決することです。クライアントサーバー、ピアツーピアなどを含むいくつかのモデルがあります。セキュリティ、障害、ネットワークパーティションなど、分散コンピューティングで発生する問題は、このコンテキストでは障害がルールであり、例外ではありません。

最後に、グリッドクラウドコンピューティングはどちらも分散コンピューティングのサブセットです。グリッドコンピューティングパラダイムは、大規模なリソース共有と革新的な高性能アプリケーションに重点を置いているため、従来の分散コンピューティングとは異なる新しい分野として浮上しました。共有されているリソースは、通常、複数の異なる管理ドメイン(いわゆる仮想組織)に属します。グリッドコンピューティングは、過去10年間で科学者によって頻繁に使用されてきましたが、一般ユーザーにとっては伝統的に困難です。クラウドコンピューティングは、一般ユーザーが仮想マシンを使用して同じデータセンターに配置され、地理的に分散していない複数のマシンを簡単に活用できるようにすることで、ギャップを埋めようとしますユーザーがアプリケーションを実行するために組み立てることができます。ハードウェア、特に高性能ネットワーク相互接続(Infinibandなど)の通常の欠如により、クラウドは並列MPIアプリケーションの実行を対象としていません。通常、クラウドで実行される分散アプリケーションは、Map / Reduceパラダイムを活用するために実装されます。ところで、多くの人はMap / reduceをパラレルデータフローモデルと考えています。


2
この答えは少し誤解を招くと思います。分散コンピューティングの分野全体がはるかに広い一方で、分散高性能コンピューティング(実際には並列高性能コンピューティングに密接に関連している)に焦点を当てています。
ユッカスオメラ

私は同意しません。答えに分散型高性能コンピューティングも含まれますが、これは通常、分散コンピューティングから除外されます。実際、分散コンピューティングの領域であるクライアントサーバーモデルとピアツーピアモデル、セキュリティ、障害、およびネットワークパーティションの問題について説明しました。
マッシモカファロ

+1。いい返事!分散コンピューティングは、並列コンピューティング以外の目的に使用されるのだろうか?言い換えれば、分散コンピューティングは並列コンピューティングのサブセットです。つまり、分散コンピューティングは並列コンピューティングに属していますか?ところで、ここに私の質問ですcs.stackexchange.com/questions/20064
ティム

1
@Tim、分散コンピューティングも、並列コンピューティングとは独立して使用されます。たとえば、リーダー選挙やコンセンサスなどの古典的な分散アルゴリズムについて考えてください。
Massimo Cafaro 14

7

質問が理解できるかどうかわかりません。並列処理と分散処理の違いはまだあります。同じ計算で両方を利用できるという事実は、概念の意味を変えません。

そして、私はあなたがどんなニュースを追いかけているのか分かりませんが、並列処理が停滞していないことは確かです。特にそれはずっと頻繁に役立つと思うからです。

テラバイトのデータを処理する必要がある場合は、分散コンピューティング(おそらく並列コンピューティングと組み合わせて)が最適です。ただし、デスクトップまたはスマートフォンで何かを計算する必要がある場合、インターネット接続が常に利用できるとは限らず、利用できる場合は低速になる可能性があることを考えると、並列コンピューティングだけでおそらく最良の結果が得られます。


1
-1。この答えは実際に質問に答えない(つまり、用語を説明する)ため。
ユッカスオメラ

@JukkaSuomela、質問は用語を説明することではなく、用語の違いについてです。
-svick

6

読む価値のある最近の論文は次のとおりです。

ミシェル・レイナール:「並列コンピューティング対分散コンピューティング:大きな混乱?」Proc。Euro-Par 2015doi:10.1007 / 978-3-319-27308-2_4

抽象:

このショートポジションペーパーでは、教育の観点から、並列処理と分散コンピューティングがしばしば混同されるという事実について説明します。したがって、適切なカリキュラムは、それぞれについて個別に設計する必要があります。「すべてがすべてに(そして相互に)」という態度は、一方では並列性を、もう一方では分散コンピューティングを特徴付ける重要な概念を学生に教えるための適切なアプローチではないようです。


4

本[1]の概要セクションでは、著者は分散コンピューティングと並列コンピューティングの比較に関する別の観点(他の回答の観点とは異なる)を提供しています。

大まかに言うと、並列処理の目標は、すべてのプロセッサを使用して1つの大きなタスクを実行することです。対照的に、分散システムの各プロセッサには一般的に半独立したアジェンダがありますが、リソースの共有、可用性、フォールトトレランスなどのさまざまな理由により、プロセッサはアクションを調整する必要があります。

この観点から、Map / Reduceパラダイムは主に並列コンピューティングのコンテキストに分類されます。ただし、Paxos(wiki)アルゴリズムなどを使用して、関係するノードに共通のリーダーに関するコンセンサスを求めたい場合は、分散コンピューティングの一般的な問題を検討しています。

[1]分散コンピューティング。基礎、シミュレーション、および高度なトピック。ハギット・アティヤとジェニファー・ウェルチ。2004年。


0

ここでより適切な答えがあります。基本的に、をparallel指しますがmemory-shared multiprocessor、をdistributed指しますprivate-memory multicomputers。つまり、最初のマシンは単一のマルチコアマシンまたはスーパースカラーマシンであり、別のマシンは地理的に分散したコンピューターのネットワークです。後者は、カップリングが少ないことを意味するため、パフォーマンスは低下しますが、可用性とフォールトトレランスが向上します。メモリ内のオブジェクトを参照してパラレルプロセッサ内の別のCPUに渡すだけで、ラウンドトリップごとのデータの(逆)シリアル化とその長距離での配信が必要になるため、パフォーマンスが低下します。

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