Hi,
a "blocking" message transfer in MPI means that the memory that holds
the data to be send can safely be reused after the transfer function
has returned control to the caller. In that sense MPI_Send
as well as MPI_Bsend and MPI_Ssend are always blocking. This is
independent of the implementation and forced
by the standard.
The difference between MPI_Ssend and MPI_Bsend is the degree of
the synchronization between sender and receiver. With MPI_Bsend,
there is no synchronization beyond causality, whereras
a returning MPI_Ssend implies that the receiver has started (!)
the transfer of the data into the caller's receive buffer.
According to the standard, MPI_Send may behave like MPI_Ssend or
MPI_Bsend, and it may even change its behavior at runtime to
optimize performance. This is precisely what LAM (like most other
implementations) does. But, as said above, MPI_Send is always
blocking.
Cheers,
--
Stephan Mertens @ http://www.uni-magdeburg.de/mertens
Supercomputing in Magdeburg @ http://tina.nat.uni-magdeburg.de
|