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

mpi4py create multiple groups and scatter from each group

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

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/