Где-то я использовал
MPI_Comm_dup(row_comm, &bigger_row_comm);
и я заметил, что это вызвало «фатальную» ошибку, когда row_comm
было равно MPI_COMM_NULL
. я изменил его с
if (row_comm != MPI_COMM_NULL)
MPI_Comm_dup(row_comm, &bigger_row_comm);
else
bigger_row_comm = MPI_COMM_NULL;
Теперь это работает. Я использую MPICH и нашел это в его документации в записи а> для MPI_Comm_dup
:
Распространенной ошибкой является использование нулевого коммуникатора в вызове (это даже не разрешено в
MPI_Comm_rank
).
Интересно, является ли это поведение стандартным, и я должен ожидать, что другие реализации сделают то же самое. Почему они просто не справились с этим, как я? Можно ожидать, что дубликат MPI_COMM_NULL будет MPI_COMM_NULL.