使沟通者跨越整个流程流程零流程包括流程零

时间:2018-07-18 03:42:56

标签: 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,1,zero,&nonzero_group);
MPI_Comm nonzero;
MPI_Comm_create(MPI_COMM_WORLD,world,&nonzero);

但是,当我使用MPI_Bcast()从进程1到“非零”通信器中的所有进程测试程序时,进程零将执行广播并获取缓冲区。

如何创建一个进程从1到N且进程不为零的组?

1 个答案:

答案 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上的

commMPI_COMM_NULL。它是您期望在其他级别上使用的有效传播者。