Search code examples
mpimpich

MPI_Comm_dup() not working when sending MPI_COMM_NULL as argument


Somewhere I used

MPI_Comm_dup(row_comm, &bigger_row_comm);

and I noticed it caused 'fatal' error when row_comm was equal to MPI_COMM_NULL. I changed it with

if (row_comm != MPI_COMM_NULL)
    MPI_Comm_dup(row_comm, &bigger_row_comm);
else
    bigger_row_comm = MPI_COMM_NULL;

Now it works. I use MPICH and found this in its documentation in 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).

I wonder if this behavior is standard and I should expect other implementations to do the same. Why haven't they just handled it like I did? One expects the duplicate of MPI_COMM_NULL to be a MPI_COMM_NULL.


Solution

  • The MPI standard does not specify what MPI_Comm_dup shall do when called with an null communicator (see section 6.4.2). Therefore, one cannot assume that such a call is allowed, especially since MPI_COMM_NULL is defined as "the value used for invalid communicator handles".

    For what it's worth, OpenMPI 4.0.1 also treats the call as an error.