我用过的地方
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,并在分录 for MPI_Comm_dup中的文档中找到了这一点。
一个常见的错误是在调用中使用空通信器(在
MPI_Comm_rank中甚至不允许)。
我想知道这种行为是否是标准的,我希望其他实现也会这样做。为什么他们不像我那样处理这件事?人们期望MPI_COMM_NULL的复制是一个MPI_COMM_NULL。
发布于 2019-09-07 13:31:49
MPI标准没有指定使用空通信器调用MPI_Comm_dup应该做什么(参见6.4.2节)。因此,不能假设允许这样的调用,特别是因为MPI_COMM_NULL被定义为“用于无效通信器句柄的值”。
至于它的价值,OpenMPI 4.0.1也将调用视为一个错误。
https://stackoverflow.com/questions/57832529
复制相似问题