2017-02-11 99 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