If you know the max size of the receives I would take a different approach. 
Post few persistent receives, and manage them in a circular buffer. Instead of 
doing an MPI_Iprobe, use MPI_Test on the current head of your circular buffer. 
Once you use the data related to the receive, just do an MPI_Start on your 
request.

This approach will minimize the unexpected messages, and drain the connections 
faster. Moreover, at the end it is very easy to MPI_Cancel all the receives not 
yet matched.

  george.

On Nov 23, 2010, at 17:43 , Sébastien Boisvert wrote:

> Le mardi 23 novembre 2010 à 17:38 -0500, George Bosilca a écrit :
>> The eager size reported by ompi_info includes the Open MPI internal headers. 
>> They are anywhere between 20 and 64 bytes long (potentially more for some 
>> particular networks), so what Eugene suggested was a safe boundary.
> 
> I see.
> 
>> 
>> Moreover, eager send can improve performance if and only if the matching 
>> receives are already posted on the peer. If not, the data will become 
>> unexpected, and there will be one additional memcpy.
> 
> So it won't improve performance in my application (Ray,
> http://denovoassembler.sf.net) because I use MPI_Iprobe to check for
> incoming messages, which means any receive (MPI_Recv) is never posted
> before any send (MPI_Isend).
> 
> Thanks, this thread is very informative for me !
> 
>> 
>>  george.
>> 
>> On Nov 23, 2010, at 17:29 , Sébastien Boisvert wrote:
>> 
>>> Le mardi 23 novembre 2010 à 16:07 -0500, Eugene Loh a écrit :
>>>> Sébastien Boisvert wrote:
>>>> 
>>>>> Now I can describe the cases.
>>>>> 
>>>>> 
>>>> The test cases can all be explained by the test requiring eager messages 
>>>> (something that test4096.cpp does not require).
>>>> 
>>>>> Case 1: 30 MPI ranks, message size is 4096 bytes
>>>>> 
>>>>> File: mpirun-np-30-Program-4096.txt
>>>>> Outcome: It hangs -- I killed the poor thing after 30 seconds or so.
>>>>> 
>>>>> 
>>>> 4096 is rendezvous.  For eager, try 4000 or lower.
>>> 
>>> According to ompi_info, the threshold is 4096, not 4000, right ?
>>> 
>>> (Open-MPI 1.4.3)
>>> [sboisver12@colosse1 ~]$ ompi_info -a|less
>>>                MCA btl: parameter "btl_sm_eager_limit" (current value:
>>> "4096", data source: default value)
>>>                         Maximum size (in bytes) of "short" messages
>>> (must be >= 1).
>>> 
>>> 
>>> "btl_sm_eager_limit: Below this size, messages are sent "eagerly" --
>>> that is, a sender attempts to write its entire message to shared buffers
>>> without waiting for a receiver to be ready. Above this size, a sender
>>> will only write the first part of a message, then wait for the receiver
>>> to acknowledge its ready before continuing. Eager sends can improve
>>> performance by decoupling senders from receivers."
>>> 
>>> 
>>> 
>>> source:
>>> http://www.open-mpi.org/faq/?category=sm#more-sm
>>> 
>>> 
>>> It should say "Below this size or equal to this size" instead of "Below
>>> this size" as ompi_info says. ;)
>>> 
>>> 
>>> 
>>> 
>>> As Mr. George Bosilca put it:
>>> 
>>> "__should__ is not correct, __might__ is a better verb to describe the
>>> most "common" behavior for small messages. The problem comes from the
>>> fact that in each communicator the FIFO ordering is required by the MPI
>>> standard. As soon as there is any congestion, MPI_Send will block even
>>> for small messages (and this independent on the underlying network)
>>> until all he pending packets have been delivered."
>>> 
>>> source:
>>> http://www.open-mpi.org/community/lists/devel/2010/11/8696.php
>>> 
>>> 
>>> 
>>>> 
>>>>> Case 2: 30 MPI ranks, message size is 1 byte
>>>>> 
>>>>> File: mpirun-np-30-Program-1.txt.gz
>>>>> Outcome: It runs just fine.
>>>>> 
>>>>> 
>>>> 1 byte is eager.
>>> 
>>> I agree.
>>> 
>>>> 
>>>>> Case 3: 2 MPI ranks, message size is 4096 bytes
>>>>> 
>>>>> File: mpirun-np-2-Program-4096.txt
>>>>> Outcome: It hangs -- I killed the poor thing after 30 seconds or so.
>>>>> 
>>>>> 
>>>> Same as Case 1.
>>>> 
>>>>> Case 4: 30 MPI ranks, message size if 4096 bytes, shared memory is
>>>>> disabled
>>>>> 
>>>>> File: mpirun-mca-btl-^sm-np-30-Program-4096.txt.gz
>>>>> Outcome: It runs just fine.
>>>>> 
>>>>> 
>>>> Eager limit for TCP is 65536 (perhaps less some overhead).  So, these 
>>>> messages are eager.
>>> 
>>> I agree.
>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> devel mailing list
>>>> de...@open-mpi.org
>>>> http://www.open-mpi.org/mailman/listinfo.cgi/devel
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> devel mailing list
>>> de...@open-mpi.org
>>> http://www.open-mpi.org/mailman/listinfo.cgi/devel
>> 
>> 
>> _______________________________________________
>> devel mailing list
>> de...@open-mpi.org
>> http://www.open-mpi.org/mailman/listinfo.cgi/devel
> 
> -- 
> M. Sébastien Boisvert
> Étudiant au doctorat en physiologie-endocrinologie à l'Université Laval
> Boursier des Instituts de recherche en santé du Canada
> Équipe du Professeur Jacques Corbeil
> 
> Centre de recherche en infectiologie de l'Université Laval
> Local R-61B
> 2705, boulevard Laurier
> Québec, Québec
> Canada G1V 4G2
> Téléphone: 418 525 4444 46342
> 
> Courriel: s...@boisvert.info
> Web: http://boisvert.info
> 
> "Innovation comes only from an assault on the unknown" -Sydney Brenner
> 
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel


Reply via email to