10

私のプログラムは MPI に適しています。各 CPU は独自の特定の (洗練された) ジョブを実行し、単一doubleの を生成し、次に を使用しMPI_Reduceてすべての CPU からの結果を乗算します。

しかし、私はこれを何度も繰り返します (> 100,000)。したがって、GPU を使用すると劇的に速度が向上することがわかりました。

私は周りをグーグルで検索しましたが、具体的なものは何も見つかりません。MPI と GPU を混在させるにはどうすればよいですか? プログラムが「ああ、このランクは GPU であり、他のすべては CPU です」と照会して検証する方法はありますか? おすすめのチュートリアルか何かありますか?

重要なことは、GPU のフル セットは必要ないということです。私が実際に必要としているのは、多くの CPU と、頻繁に使用されるMPI_Reduce操作を高速化するための 1 つの GPU だけです。

これが私が話していることの概略的な例です:

500 個の CPU があるとします。各 CPU はどういうわけか、たとえば 50double秒を生成します。これらの 250,00 個すべてを乗算する必要がありdoubleます。そして、これを1万回から100万回繰り返します。(500 個の CPU に加えて) GPU が 1 つあれば、非常に効率的です。各 CPU は、約double100 万の「状態」すべてに対して 50 秒を計算します。次に、500 個の CPU すべてがそれぞれdoubleの を GPU に送信します。次に、GPU は、double100 万の「状態」ごとに 250,000 を乗算して、100 万を生成しdoublesます。
これらの数値は正確ではありません。コンピューティングは確かに非常に大きいです。一般的な問題を伝えようとしているだけです。

4

2 に答える 2

1

ここで、このトピックに関するニュースをいくつか見つけました。

"MPI (Message Passing Interface) は、分散プロセス間でメッセージを介してデータを通信するための標準 API であり、マルチノード コンピューター クラスターに拡張できるアプリケーションを構築するために HPC で一般的に使用されます。そのため、MPI は単一のコンピューターまたはノードでの並列計算用に設計された CUDA と完全に互換性があります。MPI と CUDA の 2 つの並列プログラミング手法を組み合わせたい理由はたくさんあります。一般的な理由は、データ サイズが大きすぎて 1 つの GPU のメモリに収まらない問題や、1 つのノードで不当に長い計算時間を必要とする問題を解決できるようにすることです。もう 1 つの理由は、GPU を使用して既存の MPI アプリケーションを高速化すること、または既存の単一ノードのマルチ GPU アプリケーションを複数のノードにわたってスケーリングできるようにすることです。CUDA 対応の MPI を使用すると、これらの目標を簡単かつ効率的に達成できます。"

于 2017-04-26T08:42:49.223 に答える