2017-02-11 72 views
0

MPI_Group中的进程排名是根据输入进程的排名,通过向下移动排名来排序,例如最小组排名为零。是否可以自己订购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

你写的是错的,行列没有转移。它们基于行列数组的顺序。或者引用标准:

函数MPI_GROUP_INCL创建一个组newgroup,它由组中的n个进程组成,并且列等级为[0]。 。 。,等级[n-1]; 新组中排名为i的过程是组中排名[i]的过程。

所以你只是做:

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

Allthough它在某种程度上觉得腥你省去原工艺与等级0