MPI:获取给定通信器中所有处理器的排名

0x5*_*94E 2 c++ parallel-processing mpi

给我一个通信器,我如何获得该通信器中所有处理器的等级?

我能找到的只是如何获取给定通信器中的处理器数量,但似乎没有获取排名集合的功能。

Upp*_*wal 5

添加帕特里克的答案:

要获得从 comm_1 到 comm_2 的进程排名,反之亦然,您可以首先提取底层MPI_Group,然后使用MPI_Group_translate_ranks

MPI_Comm comm = MPI_COMM_WORLD;
MPI_Comm my_comm;

int n;
MPI_Comm_size(comm, &n);

int rank1[n] = {0,1,2,3,...}
int rank2[n];

// Some Code

MPI_Group world_group;
MPI_Group my_comm_group;

MPI_Comm_group(comm, &world_group);
MPI_Comm_group(my_comm, &my_comm_group);

MPI_Group_translate_ranks(world_group, n, rank1, my_comm_group, rank2);
Run Code Online (Sandbox Code Playgroud)

您将获得数组rank1 对应于数组rank2 中的排名。