On Jun 13, 2012, at 10:35 AM, Filippo Donida wrote:
> My idea is to have a thread to be launched just after the MPI_Isend call with a fake MPI_Test function call, just to make the sending operation progressing.
Sorry for jumping in late (usual disclaimer about my INBOX being a disaster...).
As is usual in engineering, the answer is: "it depends". :-)
Short version: balance your overheads vs. the delivered performance.
For example, the cost of launching a new thread (and reaping it when it is done) vs. claiming a thread from a pool of existing/waiting threads may be significant -- especially for transports where latency is already very low (e.g., shared memory, InfiniBand, etc.).
In general, prior research has shown that threaded MPI progress is *generally* best for long messages. I.e., have a thread going in the background that processes incoming and outgoing long messages. But keep the progress of short messages in the foreground thread, because the overhead of passing short messages to a background thread quickly overwhelms the performance benefit of asynchronous progress (unless there's a backlog of short messages, ...etc.).
For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/