MPI_Group
中的进程排名是根据输入进程的排名排序的,通过向下移动排名,使得最小组排名为零。是否可以自己在MPI_Group
中订购流程等级?
在下面的代码中,显示了实际和所需的排序。
#include <mpi.h>
int main()
{
MPI_Init(NULL, NULL);
MPI_Group world_group;
MPI_Comm_group(MPI_COMM_WORLD, &world_group);
int ranks[3] = {1, 2, 3};
MPI_Group group;
MPI_Group_incl(world_group, 3, ranks, &group);
/* actual order */
// old_rank[0] = 1 -- new_rank[0] = 0
// old_rank[1] = 2 -- new_rank[1] = 1
// old_rank[2] = 3 -- new_rank[2] = 2
/* desired order */
// old_rank[0] = 1 -- new_rank[0] = 1
// old_rank[1] = 2 -- new_rank[1] = 2
// old_rank[2] = 3 -- new_rank[2] = 0
MPI_Finalize();
return 0;
}
答案 0 :(得分:1)
你写的是错的,排名不会改变。它们基于排列数组的顺序。或者引用标准:
MPI_GROUP_INCL函数创建一个组新组,该组由组排名为[0]的组中的n个进程组成。 。 。,排名[n-1]; 新群组中排名为i的流程是群组中排名等级[i]的流程。
所以你只是这样做:
int ranks[3] = {3, 1, 2};
尽管你在某种程度上觉得可疑,你省略了原来的过程,排名为0。