MPI_Group中排名的自定义排序

时间:2017-02-11 16:09:23

标签: c mpi

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;
}

1 个答案:

答案 0 :(得分:1)

你写的是错的,排名不会改变。它们基于排列数组的顺序。或者引用标准:

  

MPI_GROUP_INCL函数创建一个组新组,该组由组排名为[0]的组中的n个进程组成。 。 。,排名[n-1]; 新群组中排名为i的流程是群组中排名等级[i]的流程。

所以你只是这样做:

int ranks[3] = {3, 1, 2};

尽管你在某种程度上觉得可疑,你省略了原来的过程,排名为0。