0

質問はそれをすべて言います。3人のコミュニケーターがいます(グループも利用できます)。ここで、1 つの通信サブセットに対してのみ a 関数を呼び出したいと思います。つまり、他のサブセットの機能をマスクします。これは可能ですか、それとも明示的にループを正し、グループ内の現在のプロセスの存在を確認してから関数を呼び出す必要がありますか?

ありがとう、

4

2 に答える 2

1

3 つのコミュニケーターが作成されているコードを変更できますか? my_groupその場合、プログラムの残りの実行時間のためにグループランクを保存する変数を追加することをお勧めします(つまり、Hristoが提案したように)。したがって、グループ (またはコミュニケーター) 固有の関数を呼び出す必要があるときはいつでも、 をチェックするだけgroup_rankです。

理論的根拠
ほとんどの MPI プログラムは何らかのグローバルmy_rank変数 (プロセスのランクを格納する) を持つ傾向があるため、a を追加するmy_groupことはこのプログラミング戦略に沿っています。

于 2012-07-18T18:56:50.857 に答える
1

でユーザー定義のリダクション演算子を悪用する以外に、サブコミュニケーターのすべてのメンバーに対して関数を呼び出す方法はありませんMPI_Allreduce()。最もクリーンなことは次のとおりです。

int group_rank;
// Test if current process belongs to "group"
MPI_Group_rank(group, &group_rank);
if (group_rank != MPI_UNDEFINED)
   call_the_function();
于 2012-07-18T17:36:18.997 に答える