MPI_Comm_dup() 在发送 MPI_COMM_NULL 作为参数时不起作用

MPI_Comm_dup() not working when sending MPI_COMM_NULL as argument

我用过的地方

MPI_Comm_dup(row_comm, &bigger_row_comm);

我注意到当 row_comm 等于 MPI_COMM_NULL 时它导致了 'fatal' 错误。我用

改变了它
if (row_comm != MPI_COMM_NULL)
    MPI_Comm_dup(row_comm, &bigger_row_comm);
else
    bigger_row_comm = MPI_COMM_NULL;

现在可以了。我使用 MPICH,并在 the entry for MPI_Comm_dup:

的文档中找到了这个

A common error is to use a null communicator in a call (not even allowed in MPI_Comm_rank).

我想知道这种行为是否是标准的,我应该期望其他实现也这样做。为什么他们不像我那样处理它?人们期望 MPI_COMM_NULL 的副本是 MPI_COMM_NULL.

MPI standard 没有指定当使用空通信器调用时 MPI_Comm_dup 应该做什么(参见第 6.4.2 节)。因此,不能假设这样的调用是允许的,特别是因为 MPI_COMM_NULL 被定义为 "the value used for invalid communicator handles".

值得一提的是,OpenMPI 4.0.1 也将调用视为错误。