我需要检查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);
}
仅检查通信器的大小就足够了。假阳性是否可以阴性?
答案 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
相同,但是通信器不同。