MPI Проверьте, является ли коммуникатор MPI_COMM_WORLD - PullRequest
0 голосов
/ 01 марта 2019

Мне нужно проверить, является ли коммуникатор 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 голосов
/ 01 марта 2019

Используйте 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 приводит к результатам.

Ваш метод может привести к ложному срабатыванию.Например, если вы MPI_Comm_dup(MPI_COMM_WORLD, &comm), то результирующий comm имеет тот же размер, что и MPI_COMM_WORLD, но это другой коммуникатор.

...