Thursday, July 30, 2009

SYNCHRONIZATION
  • BLOCK SEND

A blocking send can be used with a non-blocking
receive, and vice-versa,

e.g.,
MPI_Isend
MPI_Recv
  • NONBLOCKING SEND
Non-blocking sends can use any mode -
synchronous, buffered, standard or ready.
Separate communication into three phases:
1. Initiate non-blocking communication (“post” a
send or receive)

2. Do some other work not involving the data in
transfer
– Overlap calculation and communication
– Latency hiding

3. Wait for non-blocking communication to complete
  • BLOCKING RECEIVE

A blocking receive returns as soon as the data is ready in the receive buffer.

  • NONBLOCKING RECEIVE

A non-blocking send returns as soon as possible, that is, as soon as it has posted the send. The buffer might not be free for reuse.

C:
int MPI_Irecv(void *buf, int count, MPI_Datatype datatype,
int source, int tag, MPI_Comm comm, MPI_Request
*request)
Fortran:
CALL
MPI_IRECV(BUF,COUNT,DATATYPE,SOURCE,TAG,COMM,REQUEST,IER
ROR)


BUF(*)
INTEGER COUNT,DATATYPE,SOURCE,TAG,COMM
INTEGER REQUEST,IERROR

No comments: