[Mpi3-ft] Persistent Communication & Sendrecv

Fab Tillier ftillier at microsoft.com
Tue Aug 31 18:57:33 CDT 2010

Joshua Hursey wrote on Tue, 31 Aug 2010 at 12:59:58

> I think I see what is getting confused. We are not changing
> MPI_Recv_init or MPI_Irecv from the current standard. So the status
> object is only available on a call to one of the completion functions.
> I was running with the assumption that if a process is known to be
> failed at the call to either of these functions then they will return
> MPI_ERR_IN_STATUS (even though these functions don't have a status
> object, this tells the user to call a completion call to access the
> status object). Further, if the process is not known to be failed until
> the call to MPI_Start{all}, then the start function would return
> MPI_ERR_IN_STATUS. Then the application should use one of the completion
> calls to access the error code from the returned status object.

I'd much rather see the functions return MPI_SUCCESS here - the user needs to call the completion function to get actual completion status, and at that point the error can be reported.  Returning MPI_ERR_IN_STATUS when no status is returned and requiring a user to call a completion function to get the actual error is the exact same code flow as the MPI_SUCCESS case, so not sure the MPI_ERR_IN_STATUS return value buys you anything.

> Thinking about this some more and rereading the standard, both
> MPI_Irecv, MPI_Recv_init, MPI_Start{all} should return immediately
> since they are local operations. Their return code should -not- be
> determined by the other processes. I say this after reading the
> following sentence in the introduction to section 3.7:
> "In all cases, the send start call is local: it returns immediately,
> irrespective of the status of other processes."
> So for MPI_Startall, it will start all of the requests and return
> MPI_SUCCESS (unless one of the arguments is bad). It will not be until
> the user calls a completion function that they will be notified of an
> error, even if it was known at the time of the call to MPI_Startall.
> How do people feel about this?

I like this much better, but this should be applied to MPI_Irecv and MPI_Recv_init too.  It wasn't clear if you intended this to apply only to MPI_Startall or not.


More information about the mpiwg-ft mailing list