1

プログラムをクラスターで実行しています。各ノードには 2 つの GPU があります。各 MPI タスクは、CUDA 関数を呼び出すことです。

私の質問は、各ノードで実行されている 2 つの mpi プロセスがある場合、各 CUDA 関数呼び出しは異なる GPU でスケジュールされますか、それとも両方が同じで実行されますか? 各ノードで 4 つの mpi タスクを実行するとどうなりますか?

4

2 に答える 2

3

各 MPI タスクは、選択した GPU でスケジュールされた 1 つの cuda 関数を呼び出します。関数 を使用して、必要な GPU を選択できます cudaSetDevice()cudaSetDevice(0)あなたの場合、各ノードには 2 つの GPU が含まれているため、すべての GPU をと で切り替えることができます cudaSetDevice(1)。SetDevice 関数を使用して GPU を指定せず、それを MPI タスクと組み合わせた場合rank、2 つの MPI タスクが両方の cuda 関数を同じデフォルト GPU (0 として番号付け) で連続して実行すると思います。さらに、各ノードで 3 つ以上の mpi タスクを実行すると、2 つ以上の cuda 関数が同じ GPU でシリアルに実行されるため、確実に競合状態になります。

于 2012-04-29T10:39:13.243 に答える
2

MPI と CUDA は基本的に直交しています。MPI プロセスと GPU のアフィニティを自分で明示的に管理する必要があります。これを行うには、各 GPU でコンピューティング エクスクルーシブ モードがほぼ必須です。各プロセスがコンテキストを確立できる空きデバイスを見つけたら、カラーリング付きのスプリット コミュニケーターを使用して、プロセッサと GPU のアフィニティを適用できます。

NVIDIA の Massimo Fatica が、少し前に NVIDIA フォーラムに便利なコード スニペットを投稿しました。

于 2012-04-29T10:36:50.780 に答える