On 12/15/2010 07:39 PM, Jeff Squyres wrote:
On Nov 30, 2010, at 4:09 PM, Ioannis Papadopoulos wrote:

The overall time may be the same, however it is alarming (at least to me) that 
if you call MPI_Test() too many times, the average time per MPI_Test() call 
increases. After all, that is what I am trying to measure, how much it costs to 
call MPI_Test() on average.

In your MPI_Wtime() example, the average overhead of MPI_Wtime() is exactly the 
same, independently of max/min time - which is what I would expect. This is not 
true for MPI_Test(). A small delay before calling the later, lowers the 
MPI_Test() average time.
There is a difference between MPI_Test() and MPI_Wtime() -- wtime just calls 
gettimeofday() and doesn't do anything else.  MPI_Test() trips the progression 
engine and therefore may do a variable number of things, some of which may 
involve I/O and/or memory allocation.  Those are variable time tasks, depending 
on all kinds of factors on your system (as Eugene alluded to).  This is doubly 
true if you're seeing it with two different MPI implementations.

So yes, there might be those small "spikes" that you're seeing (to be honest, I hesitate 
to use the word "spike" when dealing with such small numbers in TCP traffic).  And they 
could be due to a lot of different things, many of which are beyond OMPI's control.

Have you seen if this has any impact on your actual application performance?

I agree that MPI_Test() has to do some progress, but as you can see I am only sending one message and I busy wait on it - since there is nothing else to do and no other incoming traffic, I would expect no difference among MPI_Test() calls, apart from the last one (the one that will notify me that my message arrived).

From the first set of benchmarks, you can clearly see that the average time for an MPI_Test() call has decreased by 2 orders of magnitude with that naive timer. My application is a framework that relies heavily on non-blocking primitives so I overuse MPI_Test(). The initial message was sent because I noticed this specific quirk of MPI_Test() when I was trying to figure out how much overhead my framework puts on top of MPI - having a really small piece of work just before MPI_Test() has given 1) lower and 2) more consistent times (minimal fluctuations).



Reply via email to