有些人和我正在尝试对游乐园进行仿真,除了一件事情,我们几乎完成了所有工作:我们需要实现同步的障碍,但是我们需要一个沟通者,并且需要包含传达过程除了排名为零的那个。我正在使用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);
但是,当我使用MPI_Bcast()从进程1到“非零”通信器中的所有进程测试程序时,进程零将执行广播并获取缓冲区。
如何创建一个进程从1到N且进程不为零的组?
答案 0 :(得分:2)
这可以通过MPI_Comm_split()
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);
在MPI_COMM_WORLD
等级0
上的,comm
是MPI_COMM_NULL
。它是您期望在其他级别上使用的有效传播者。