7 ノード クラスタで大きな行列の変換を実行するアプリケーションを実行しています。ノードは QDR 40 Gbit Infiniband 経由で接続されます。Open MPI 1.4.3 がシステムにインストールされています。
特定の行列変換では、各アルゴリズム ステップで 1 つのノードがデータを送信し、他のすべてのノードが受信するような方法で、ノード間で大規模なデータ交換が必要になります。プロセスの数は、使用されるノードの数と同じです。私は MPI に比較的慣れていないと言わざるを得ませんが、これを実行する理想的な方法は MPI_Bcast を使用することであると思われました。
それほど大きくないマトリックスでは、すべてがうまくいきました。ただし、マトリックスのサイズが大きくなると、ある時点でアプリケーションがハングし、永遠にそこにとどまります。
完全にはわかりませんが、コードにエラーはないようです。MPI_Bcast の特定の呼び出しの前に未完了の集合操作があるかどうかを確認するために詳細にトレースしましたが、すべて問題ないようです。また、その特定の呼び出しに対して、メッセージのタイプとサイズだけでなく、root がすべてのプロセスで正しく設定され、もちろん、MPI_Bcast がすべてのプロセスで呼び出されます。
また、これがいつ発生するかを把握するために、多くのシナリオ (さまざまなサイズのマトリックスでアプリケーションを実行し、プロセス数を変更する) を実行しました。観察できることは次のとおりです。
- 同じサイズの行列の場合、プロセスの数を決定すると、アプリケーションは正常に終了します
- ただし、指定された数のプロセスでは、アプリケーションはわずかに大きなマトリックスでハングします
- プログラムがハングしている特定の行列サイズとプロセス数について、各 MPI_Bcat 呼び出しでメッセージのサイズを 2 回縮小すると (もちろん、結果は正しくありません)、ハングすることはありません。
そのため、MPI が使用するいくつかのバッファーに問題がある可能性があり、デフォルトの MCA パラメーターを変更する必要があるように思えますが、前述したように、MPI プログラミングの経験があまりなく、見つけられませんでした。この問題の解決策。したがって、問題は、誰かが同様の問題を抱えているかどうかであり、適切な MCA パラメータを設定することでこれを解決できるかどうか、または他の解決策や説明を知っているかどうかです。