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/