MPI Проверьте, является ли коммуникатор MPI_COMM_WORLD

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

Решение

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

Другие вопросы по тегам