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/

Reply via email to