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 也将调用视为错误。
我用过的地方
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 也将调用视为错误。