LAM/MPI logo

LAM/MPI General User's Mailing List Archives

  |   Home   |   Download   |   Documentation   |   FAQ   |   all just in this list

From: Michael Lees (mhl_at_[hidden])
Date: 2005-08-16 09:51:37


Jeff Squyres wrote:
> On Aug 12, 2005, at 11:22 AM, Michael Lees wrote:
>
>
>>>>I have a thread for performing asynchronous sending and receiving,
>>>>something along the lines of...
>>>>
>>>>while(running){
>>>>MPI_IRecv(&request)
>>>> While(recvflag ==0){
>>>> MPI_Test(request,recvflag)
>>>> MPI_Send()
>>>> yield()
>>>> }
>>>> yield()
>>>>}
>>>
>>>
>>>Wow, that's a lot of sending. :-)
>>
>>Is it though? As far as I understand it the blocking send will wait
>>until a matching receive is posted? Am I wrong? So they'll only be one
>>send per receive?
>
>
> No, not necessarily. Check out the sidebar entitled "To block or not
> to block" in this column for an explanation:
>
> http://cw.squyres.com/columns/2004-02-CW-MPI-Mechanic.pdf
>
> Short version: if you are sending a short message, you may actually be
> sending many times before your receive completes (it's a parallel race
> condition). If you're trying to simply match a single send and a
> single receive, you might want to use MPI_SENDRECV or a pattern similar
> to:
>
> MPI_Irecv(...)
> MPI_Isend(...);
> MPI_Waitall(...);
>
>

I was thinking some more about the issue of sudden slow down in my
application. After reading about the Buffered implementation of MPI_Send
and MPI_Recv I was wondering if my performance could be reducing when
the buffer fills?
Each message is 132 bytes so the thread design above will allow a lots
of sends to occur before the internal buffer is full(the buffer is
default - which is 64k?). This could result in 496 messages being sent
before the buffer fills up.

What happens when a small message stored in the buffer is sent - does it
empty the used buffer immediately? Or is the buffer reclaimed when
needed ie., when full, or is there some type of garbage collection?

I can't figure out what is causing the sudden massive drop in
peformance. I've used gkrellm to monitor memory and cpu usage and both
seem fairly constant and no paging is done at all. The other odd thing
is that it doesn't matter if I allocate 11 processes to one cpu or 11
processes to 3 cpus - the performance drop happens at about the same point.

Is there a decent free tool for monitoring/profiling mpi programs?

Cheers

-Mike

This message has been checked for viruses but the contents of an attachment
may still contain software viruses, which could damage your computer system:
you are advised to perform your own checks. Email communications with the
University of Nottingham may be monitored as permitted by UK legislation.