In point-to-point message passing, single process sends/receives message to/from another process. There are four communication modes for sending a message:
i) Buffered mode: Send can be started whether or not matching receives has been initiated, and send may finish before matching accept is initiated.
ii) Synchronous mode: Send can be started whether or not matching receives has been initiated, but send will finished only after matching receives has been initiated.
iii) Ready mode: Send can be started only if matching receives has already been started.
iv) Standard mode: May behave like either synchronous mode or buffered mode, depending on specific execution of MPI and availability of memory for buffer space.
MPI gives both blocking and non-blocking send and takes operations for all modes.
Functions for a variety of communication modes:
Mode
|
Blocking
|
Non blocking
|
Standard
|
MPI_Send
|
MPI_Isend
|
Buffered
|
MPI_Bsend
|
MPI_Ibsend
|
Synchronous
|
MPI_Ssend
|
MPI_Issend
|
Ready
|
MPI_Rsend
|
MPI_Irsend
|
MPI_Irecv and MPI_Recv are blocking and nonblocking functions for regardless of mode and receiving messages.
Besides send and receive functions, MPI gives some more useful functions for communications. Some of them are being given here.
MPI_Buffer_attach used to give buffer space for buffered mode. Nonblocking functions contain request argument used subsequently to determine whether requested operation has finished.
MPI_Test and MPI_Wait wait or test for completion of nonblocking communication.
MPI_Probe and MPI_Iprobe probe for incoming message without really receiving it. Information about message determined by probing can be used to decide how to take it.
MPI_Cancel cancels outstanding message demand, useful for cleanup at the end of a program or after major state of computation.