Comparing: Blocking and non-blocking communications
Blocking routines
Blocking means that routines only return once communication completes,
or when the user buffer can be used or re-used.
Non-blocking routines
Non-blocking sends. As communication is a relatively slow process
blocking is an inefficient way to send messages. In non-blocking
communication the routine returns before communication is complete.
Communication continues in the background whilst other work is
performed.
Non-blocking calls in PVM
There is no non-blocking SEND.
The non-blocking receive is pvmfnrecv(tid, msgtag, bufid) this
call returns immediately either with the message or with information
that the message has not yet arrived.
If the requested message has not arrived, then bufid=0.
Non-blocking communication in MPI
Non-blocking calls have the same argument list as blocking routines
apart from an additional argument. This argument - REQUEST - provides a
handle which may be used to check when communication completes.
Waiting for communication to complete in MPI
When using non-blocking routines it is essential to ensure that
communication has completed before using the results or re-using the
buffer.
MPI_WAIT(REQUEST,STATUS, IERROR)
This routine blocks until the communication specified by the handle
REQUEST has completed.
Testing for communication completion in MPI
MPI_TEST(REQUEST,FLAG,STATUS, IERROR)
This routine enquires if the communication specified by REQUEST has
completed. The result (TRUE or FALSE) is returned in FLAG.
Submitted by Mark Johnston,
last updated on 10 December 1994.