有些人和我正试图模拟一个游乐园,除了一件事,我们几乎什么都做了:我们需要实现一个同步障碍,但我们需要一个通信程序来实现,它需要包含每一个过程,除了一个等级为零的过程。我使用MPI_Group_excl()来告诉一个组不应该有零进程。下面是我的代码片段,它创建了组和comunicator:
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);但是,当我在‘非零’通信器中使用从process 1到所有进程的MPI_Bcast()测试我的程序时,进程零执行广播并获得缓冲区。
怎样才能使一个没有过程为零的从1到N所有过程的组?
发布于 2018-07-18 04:18:15
这可以通过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。这是你所期望的其他等级的有效沟通者。
https://stackoverflow.com/questions/51393239
复制相似问题