MPI_COMM_WORLD を使用してはいけない場合の例を教えてください。
ありがとう!
マルチスレッド コードまたはライブラリを作成している場合です。
その理由は、MPI コミュニケーターがメッセージ マッチング コンテキストの一部であるためです。MPI_COMM_WORLD
ライブラリとユーザー コードからの MPI 呼び出しでを使用すると、間違ったメッセージと一致する可能性があります。ユーザーコードが同じタグを使用する可能性があるため、ライブラリコードで特別なタグを使用すると脆弱になります。別のコミュニケーターを作成する方がはるかに簡単です。
マルチスレッド コードの問題は同じです。つまり、メッセージ マッチングが失敗する可能性がさらに高くなります。たとえば、マルチスレッド コードで集合呼び出しを使用すると、それらを区別するためのタグがなくなり、未定義の動作が発生します。
最後に、MPI_COMM_WORLD への依存を削除すると、コードをよりモジュール化できます。たとえば、計算用のクラスを作成するとします。後で、このクラスを別のプログラムに含めたいと思うかもしれませんが、ノードのサブセットでのみ計算を実行します。クラス コンストラクターがコミュニケーターをパラメーターとして取り、MPI_Comm_dup
それを使用して動作する場合、統合は簡単です。ハードコーディングされている場合MPI_COMM_WORLD
は、何らかのリファクタリングが必要になります。
特に C++ では、プログラムの独立した部分をクラスにカプセル化する可能性があります。これらをミニ ライブラリと見なし、互いに独立させて、それらを使用するコードが組み合わせがどのように動作するかを心配する必要がないようにすることが有益な場合があります。