2011-11-09 6 views
4

アプリケーションを高速化する通常の方法は、MPIを使用してアプリケーションを並列化するか、MPMを使用するPETScのような上位ライブラリを使用することです。純粋なMPIに勝るMPI + CUDAの利点?

しかし、最近では、より多くの野心的な/より大きな問題のために、アプリケーションの並列化やMPIとCUDAのハイブリッドの使用に、CUDAの使用が関心を集めているようです。

ハイブリッドMPI + CUDAプログラミングモデルを、従来の試行錯誤を重ねたパラレルプログラミングのMPIモデルに比べて顕著な利点はありますか?私はこれを粒子法の応用分野で具体的に求めています

私がこの質問をしている理由の1つは、ウェブ上のどこでも「粒子法は自然にGPUのアーキテクチャにマップされます」というこの。しかし、彼らは同じ仕事のためにMPIだけを使うよりもCUDAを使う方が良い理由を正当化することはできません。

+1

これはGPU上で実行できるため、CPUのクラスタよりも低価格で高いスループットを実現します。 – harold

答えて

12

これは少しリンゴとオレンジです。

MPIとCUDAは、基本的に異なるアーキテクチャです。最も重要なのは、MPIでは複数のノードにアプリケーションを配布できる一方、CUDAではローカルノード内でGPUを使用できます。パラレルプロセスでMPIプログラムが終了するまでに時間がかかりすぎる場合は、CPUの代わりにGPUを使用してスピードアップする方法を検討する必要があります。逆に、CUDAアプリケーションの処理に時間がかかりすぎる場合は、MPIを使用して複数のノードに作業を配布することができます。

2つの技術はかなり直交しています(クラスタ上のすべてのノードがCUDA対応であると仮定します)。

1

他のポスターのすでにうまくいっている答え、GPUがどんな種類の問題を抱えているのか、そしてその理由についてのいくつかの高レベルの議論。

GPUは、CPUとは劇的に異なる設計経路に従っています。 CPUコアに比べて、GPUコアには多くのALUとFPハードウェアが含まれ、制御ロジックとキャッシュは少なくなっています。つまり、GPUはストレート計算に効率を高めることができますが、通常の制御フローとスマートメモリアクセスパターンを持つコードだけが、SP FPコードのTFLOPS以上の最大の利点を認識します。 GPUは、制御およびメモリレベルでハイスループット、高レイテンシのデバイスとして設計されています。グローバルにアクセス可能なメモリには長いバス幅があり、長いレイテンシにもかかわらず、合体(連続および整列)メモリアクセスが良好なスループットを実現します。レイテンシは、大量のスレッド並列性を必要とし、ハードウェアによる本質的にゼロオーバヘッドのコンテクストスイッチングを提供することによって隠される。 GPUはSIMDのようなモデルSIMTを採用しています。これにより、グループのコアがSIMDロックステップ(異なるグループが自由に分岐します)で実行され、プログラマーはこの事実を考慮に入れません(フェルミでは、最大32倍の差異)。 SIMTはデータ並列プログラミングモデルに適しているため、データの独立性を活用して、大規模なデータアレイに対して同様の処理を実行できます。 GPUとそのプログラミングモデルを一般化し、良好なパフォーマンスを得るためのプログラミングを容易にするための努力がなされている。