0

我需要检查 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);
}

仅检查通信器的大小就足够了吗?会不会有假阳性的阴性?

4

1 回答 1

2

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

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

MPI_IDENT 结果当且仅当 comm1 和 comm2 是同一对象的句柄(相同的组和相同的上下文)。如果基础组的成分和排名顺序相同,则 MPI_CONGRUENT 结果;这些传播者仅因上下文而异。两个通信器的组成员的 MPI_SIMILAR 结果相同,但排名顺序不同。否则 MPI_UNEQUAL 结果。

你的方法可能会导致误报。例如,如果 you MPI_Comm_dup(MPI_COMM_WORLD, &comm),则结果comm的大小与 相同MPI_COMM_WORLD,但它是不同的通信器。

于 2019-03-01T08:37:29.907 回答