On Aug 20, 2014, at 3:37 AM, Zhang,Lei(Ecom) <zhangle...@baidu.com> wrote:

> I have a performance problem with receiving. In a single master thread, I 
> made several Irecv calls:
>  
> Irecv(buf1, ..., tag, ANY_SOURCE, COMM_WORLD)
> Irecv(buf2, ..., tag, ANY_SOURCE, COMM_WORLD)
> ...
> Irecv(bufn, ..., tag, ANY_SOURCE, COMM_WORLD)
>  
> all of which try to receive from any node for messages with the same tag.
>  
> Then, whenever any of the Irecv completes (using Testany), a separate thread 
> is dispatched to work on the received message.
> In my program, many nodes will send to this master thread.
>  
> However, I noticed that the speed of recv is almost unaffected no matter how 
> many Irecv calls were made.

I'm not sure what you mean by this statement.  If you add N asynchronous 
requests and the speed is not decreased, that's a *good* thing, right?

> It seems that multiple Irecv calls does not mean concurrently receiving from 
> many nodes.

That's a different question.

It depends on many factors, including your underlying network software and 
hardware.  If you post many long message Irecvs, for example, and multiple 
senders concurrently send matching messages, there will almost certainly be 
some overlap in the receive of messages between the different senders.

Is that what you are asking?

> By profiling the node running the master thread, I can see that the network 
> input bandwidth is quite low.

That could also be for many reasons.  Are you sending short messages?  Are you 
sending messages infrequently?  Is your network otherwise congested?  ...(etc.)?

-- 
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