
Hi Jack,
On Mon, Jun 28, 2010 at 4:00 PM, Jack Bryan
MPI_irecv() ; do other works; MPI_wait(); But, my message receiver is much slower than sender. when the receiver is doing its local works, the sender has sent out their messages. but at this time, the receiver is very busy doing its local work and cannot post MPI_irecv to get the messages from senders.
If you know what messages the receiver is going to receive, you can post your irecv() *before* starting the compute-intensive loop. If you can't post the irecv() before the busy loop, MPI will buffer messages for you, up to some implementation-defined limit: "Send of all modes [...] can be started whether a matching receive has been posted or not [...] If the call causes some system resources to be exhausted, then it will fail and return an error code." (MPI 2.1 spec, sec 3.7, page 48 of the printed edition) You might be able to get better help on an MPI-specific forum. Best regards, Riccardo