次のように、MPI_COMM_WORLD のプロセスのサブセットに MPI_Barrier を設定しようとしています。
//Get MPI rank
MPI_Comm_rank(MPI_COMM_WORLD, ¤t_rank);
//Get group of processes in MPI_COMM_WORLD
MPI_Comm_group(MPI_COMM_WORLD, &world_group);
//Create group with specified ranks
MPI_Group_incl(world_group, num, ranks, &my_group);
//Create a new communicator based on my_group
MPI_Comm_create(MPI_COMM_WORLD, my_group, &MY_COMM);
MPI_Barrier(MY_COMM);
(ranks
は必要なランクの配列で、num
はこの配列のサイズです) 上記のコードは、MPI_Barrier で NULL コミュニケーター エラーになります。
私も次のことを試しました:
MPI_Comm_split(MPI_COMM_WORLD, color, current_rank, &MY_COMM);
MPI_Barrier(MY_COMM);
(color
現在のランクが必要なサブセットにある場合は 1 に設定され、それ以外の場合は 0 に設定されます) 上記のコードは効果がなく、バリアはまったく機能していないようです。
どんな助けでも大歓迎です、ありがとう:)