MPI检查通讯器是否为MPI_COMM_WORLD

时间:2019-03-01 08:00:20

标签: c mpi communicator

我需要检查MPI通信器是否为MPI_COMM_WORLD comm。这意味着所有处理器都在此通信器中。

我尝试过

int isCommWolrd(MPI_Comm comm) {
    int size_comm = 0;
    int size_comm_world = 0;
    MPI_Comm_size(comm, &size_comm);
    MPI_Comm_size(MPI_COMM_WORLD, &size_comm_world);
    return (size_comm == size_comm_world);
}

仅检查通信器的大小就足够了。假阳性是否可以阴性?

1 个答案:

答案 0 :(得分:2)

使用MPI_Comm_compare()并检查结果是否为MPI_IDENT

int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
     

仅当comm1和comm2是同一对象(相同的组和相同的上下文)的句柄时,MPI_IDENT才会产生。   MPI_CONGRUENT          如果基础群体的成分和排名顺序相同,则得出结果;这些传播者仅因上下文而异。   MPI_SIMILAR          两个交流者的小组成员的结果相同,但等级顺序不同。否则,MPI_UNEQUAL结果。

您的方法可能导致假阳性。例如,如果您MPI_Comm_dup(MPI_COMM_WORLD, &comm),则生成的comm的大小与MPI_COMM_WORLD相同,但是通信器不同。