> From: Eitan Zahavi [mailto:[EMAIL PROTECTED]
> What was I thinking ...
> for (target  = (myRank + 1) % numNodes ; target != myRank; target =
> (target + 1)% numNodes) {     /* establish connection to node target
> */
> }
This can be even simpler for MPI.

Given some nodes must listen and others must connect, have an approch such as 
higher rank processes connect to lower rank processes.

Then its simply:
        initiate listen on my endpoint /* could omit this for highest rank in 
job */

        for (target=(my_rank-1); target>0; target--)
                initiate connect to target

For even greater efficiency, the "initiate connect to target" could be done in 
parallel batches.  Eg. start 50 outbound connects, wait for some or all of them 
to complete, then start the next batch.  Such as:

        for (target=(my_rank-1); target>0; target--)
                while (num_outstanding > limit)
                        wait
                num_outstanding++
                initiate connect to target

Then the callback for completing a connection sequence could decrement 
num_outstanding and wakeup the waiter (or the waiter could be a sleep/poll type 
loop).

We have been successfully using the algorithms above for about 2-3 years now 
and they work very well.

Todd Rimmer
_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to