Mpi 使通信器跨越除process zero之外的所有流程包括process zero

Mpi 使通信器跨越除process zero之外的所有流程包括process zero,mpi,Mpi,我和一些人正试图模拟一个游乐园,我们几乎做了所有的事情,除了一件事:我们需要为同步设置一个障碍,但我们需要一个通讯器,它需要包含除秩为零的进程之外的所有进程。我使用MPI_Group_excl()告诉您,一个组不应该有进程零。下面是我创建组和通讯器的代码片段: MPI_Group nonzero_group, world; MPI_Comm_group(MPI_COMM_WORLD,&world); int zero[1]; zero[0]=0; MPI_Group_excl(world

我和一些人正试图模拟一个游乐园,我们几乎做了所有的事情,除了一件事:我们需要为同步设置一个障碍,但我们需要一个通讯器,它需要包含除秩为零的进程之外的所有进程。我使用MPI_Group_excl()告诉您,一个组不应该有进程零。下面是我创建组和通讯器的代码片段:

MPI_Group nonzero_group, world;
MPI_Comm_group(MPI_COMM_WORLD,&world);
int zero[1];
zero[0]=0;
MPI_Group_excl(world,1,zero,&nonzero_group);
MPI_Comm nonzero;
MPI_Comm_create(MPI_COMM_WORLD,world,&nonzero);
但是,当我在“非零”通信器中使用从进程1到所有进程的MPI_Bcast()测试程序时,进程0执行广播并获取缓冲区


如何创建一个包含从1到N的所有进程的组,而不包含进程0?

这可以通过
MPI\u Comm\u split()


MPI\u COMM\u WORLD
rank
0
COMM
MPI\u COMM\u NULL
。它是您期望在其他级别上使用的有效通信器。

这可以通过
MPI\u Comm\u split()实现。

MPI\u COMM\u WORLD
rank
0
COMM
MPI\u COMM\u NULL
。它是您期望在其他级别上使用的有效通讯器

int world_rank;
MPI_Comm comm;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_split(MPI_COMM_WORLD, (0 == rank)?MPI_UNDEFINED:0, 0, &comm);