MPI_Barrier с пользовательским MPI-коммуникатором
Я пытаюсь установить MPI_Barrier для подмножества процессов в MPI_COMM_WORLD, следующим образом:
//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
это размер этого массива) Приведенный выше код приводит к ошибке коммуникатора NULL в MPI_Barrier.
Я также попробовал следующее:
MPI_Comm_split(MPI_COMM_WORLD, color, current_rank, &MY_COMM);
MPI_Barrier(MY_COMM);
(где color
устанавливается в 1, если текущий ранг находится в необходимом подмножестве, и 0 в противном случае) Приведенный выше код не имеет никакого эффекта, барьер, похоже, не работает вообще.
Любая помощь будет принята с благодарностью, спасибо:)