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
Но это другой коммуникатор.