I got slightly mixed up regarding the concept of synchronous - asynchronous in the context of blocking & non blocking operations (in OpenMPI) from here:
link 1 :
MPI_Isend
is not necessarily asynchronous ( so it can synchronous ?)link 2 :The
MPI_Isend()
andMPI_Irecv()
are the ASYNCHRONOUS communication primitives of MPI.
I have already gone through the previous sync - async - blocking - non blocking questions on stackoverflow (asynchronous vs non-blocking), but were of no help to me. As far as i know :
- Immediate (
MPI_Isend
): method returns & executes next line -> nonblocking - Standard/non-immediate (
MPI_Send
) : for large messages it blocks until transfer completes - A synchronous operation blocks (http://www.cs.unc.edu/~dewan/242/s07/notes/ipc/node9.html)
- An asynchronous operation is non-blocking (http://www.cs.unc.edu/~dewan/242/s07/notes/ipc/node9.html)
so how & why MPI_ISEND
may be blocking (link 1) as well as non blocking (link 2) ?
i.e.what is meant by asynchronous & synchronous MPI_Isend
here ?
Similar confusion arises regarding MPI_Ssend
& MPI_Issend
, since the S in MPI_SSEND means synchronous(or blocking) and:-
- MPI_Ssend: synchronous send blocks until data is received on remote process & ack is received by sender,
- MPI_Issend: means immediate synchronous send
also the Immediate is non-blocking, So, how can MPI_ISSEND be Synchronous & return Immediately ?
I guess more clarity is needed in asynchronous & synchronous in context of blocking & non blocking OpenMPI communication . A practical example or analogy in this regard will be very useful.