说我有64个等级的通讯。如何在mpi4py中创建一个由前x个等级组成的组,第二个组包含剩余的64-x等级,以及每个组的通信?
答案 0 :(得分:1)
MPI_Comm_split
通过根据输入值color
和key
将通信器分成一组子通信器来创建新的通信器。
为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/