Fixing early event triggers when using rendezvous protocol
With the simulated rendezvous protocol, the sender does a handshake first by sending a control message to the receiver. Once the control message arrives at the receiving end, it checks whether a matching receive has been posted or not. If not, it will wait until matching receive gets posted. If it finds a matching receive, an acknowledgement is sent to the sender to initiate the data transfer.
In the updated rendezvous protocol, the MPI_send/isend and recv behavior has been modified as follows
- MPI_send does not complete until the actual data transfer has completed from the sender side. Similarly, MPI_isend does not mark the request as completed until the actual data has been sent.
- MPI_recv does not complete until the actual data has arrived. Same way, MPI_irecv will not mark the request as completed until the data transfer has completed from the receiver side.