MPI_Barrier с пользовательским MPI-коммуникатором

Я пытаюсь установить MPI_Barrier для подмножества процессов в MPI_COMM_WORLD, следующим образом:

//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 это размер этого массива) Приведенный выше код приводит к ошибке коммуникатора NULL в MPI_Barrier.

Я также попробовал следующее:

MPI_Comm_split(MPI_COMM_WORLD, color, current_rank, &MY_COMM);

MPI_Barrier(MY_COMM);

(где color устанавливается в 1, если текущий ранг находится в необходимом подмножестве, и 0 в противном случае) Приведенный выше код не имеет никакого эффекта, барьер, похоже, не работает вообще.

Любая помощь будет принята с благодарностью, спасибо:)

0 ответов

Другие вопросы по тегам