On May 9, 2016, at 8:23 AM, Zhen Wang <tod...@gmail.com> wrote: > > I have another question. I thought MPI_Test is a local call, meaning it > doesn't send/receive message. Am I misunderstanding something? Thanks again.
>From the user's perspective, MPI_TEST is a local call, in that it checks to >see if an MPI_Request has completed. It is also defined to return >"immediately", which most MPI implementations -- Open MPI included -- >interpret to mean "return in a short, finite time." In Open MPI's case, MPI_TEST (and friends) run through the internal progression engine. I.e., it checks the status of ongoing MPI_Requests and sees if it can advance them in a non-blocking manner. For example, a socket may have [partially] drained since the last time through the progression engine, and therefore we can write new bytes down that socket without blocking. In your case, if you MPI_ISEND a very large message, and it uses the TCP BTL as the transport, it'll likely try to send the first fragment of that message to the peer. When the peer ACKs that first fragment, that gives the sender permission to send the remaining fragments (i.e., the receiver is ready for the entire message). Hence, each time through the progression engine, the sender will write as many bytes as possible down the socket to that peer until the entire message has been written. -- Jeff Squyres jsquy...@cisco.com For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/