0

次のように、MPI_COMM_WORLD のプロセスのサブセットに MPI_Barrier を設定しようとしています。

//Get MPI rank
MPI_Comm_rank(MPI_COMM_WORLD, &current_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 に設定されます) 上記のコードは効果がなく、バリアはまったく機能していないようです。

どんな助けでも大歓迎です、ありがとう:)

4

0 に答える 0