mpi4py创建多个组并从每个组中分散

时间:2018-06-17 21:36:39

标签: mpi openmpi hpc mpi4py

说我有64个等级的通讯。如何在mpi4py中创建一个由前x个等级组成的组,第二个组包含剩余的64-x等级,以及每个组的通信?

1 个答案:

答案 0 :(得分:1)

MPI_Comm_split通过根据输入值colorkey将通信器分成一组子通信器来创建新的通信器。

color传递相同值的所有进程都分配给同一个通信器。在您的情况下,前x个进程应该传入一个颜色值,其余的应该选择一个不同的值。

key确定每个新通信器中的排序(排名)。传递密钥的最小值的过程将是等级0,下一个最小值将是等级1,依此类推。如果您不需要更改流程的原始顺序,则可以将其等级用作key

结合这些,这是C:

中的一个例子
int rank, size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

int x = 10;
int color = rank < x;

MPI_Comm new_comm;
MPI_Comm_split(MPI_COMM_WORLD, color, rank, &new_comm);

来源和进一步信息:http://mpitutorial.com/tutorials/introduction-to-groups-and-communicators/