5
votes

I'm curious at the lack of this function in MPI:

MPI_Isendrecv( ... );

i.e., a non-blocking send and receive, can anyone tell me the rationale behind its omission?

1
Looking at the draft of the original MPI spec on netlib.org, it seems that the function used to be included, but then dropped in the final MPI 1.0 spec. Now I'm also curious as to what the reason was.Greg Inozemtsev

1 Answers

5
votes

My take is that MPI_SENDRECV exists as a convenience for programmers who want to use blocking semantics, but need to implement a shift operation. If you're comfortable with non-blocking semantics, you should simply use the existing MPI_ISEND and MPI_IRECV.

Interestingly, MPI-3 will add non-blocking collectives (e.g. MPI_IBARRIER), but still no MPI_ISENDRECV (see http://meetings.mpi-forum.org/draft_standard/mpi3.0_draft_2.pdf ).