This is good information for me!

For my users though its over the top. I was looking for simple reasons why, I think I have that now though. Thanks!

Brock Palen
Center for Advanced Computing
bro...@umich.edu
(734)936-1985


On Mar 13, 2008, at 11:16 AM, George Bosilca wrote:

Collective communication was a hot topic for the last [at least one] decade, and it is still today. Just minimizing the number of messages is not generally the best approach. The collectives are sensitive to the network characteristics and to the amount of data in a very complex way. The best approach is a well balanced algorithms, where the number of messages and the amount of data on each message is computed based on the network properties. This paper can give you an idea about this (http://csdl2.computer.org/ persagen/DLAbsToc.jsp?resourcePath=/dl/proceedings/&toc=comp/ proceedings/ipdps/2005/2312/16/2312toc.xml&DOI=10.1109/IPDPS. 2005.335).

In terms of theoretical complexity, the best Allreduce algorithm I'm aware about allow you to decrease the complexity to O(log (size)) + O(count), where size is the size of the message and count is the number of participants in the communicator. You can find a reference to this algorithm here (http://www.hlrs.de/organization/ par/services/models/mpi/myreduce.html).

Even the Alltoall can be optimized, but unfortunately not as much as the other collective. This collective is considered as the most difficult to implement and to optimize, even on homogeneous environments. Another interesting paper on alltoall is http:// ieeexplore.ieee.org/Xplore/login.jsp?url=/ iel4/71/13981/00642949.pdf?arnumber=642949.

Is there anything more complex than a alltoall ... Well you can take a look in the same family of collectives communication patterns to alltoall[vwx].

  george.

On Mar 13, 2008, at 9:29 AM, Brock Palen wrote:

Yeah, I know what you mean about if you have to use a 'all to all'
use MPI_Alltoall() don't roll your own.

So on paper, alltoall at first glance appears to be:  n*(n-1) -> n^2-
n  -> n^2 (for large n).

Allreduce  appears to be  simplest, n point to points followed by a
bcast().  Which can be simplified to gather + bcast.

Last I knew MPI_Bcast() was log(n)  and gather is (n).  So for
allreduce I get:

n+log(n)

I guess I am confused how to get alltoall() down from n^2.

Thanks.

Brock Palen
Center for Advanced Computing
bro...@umich.edu
(734)936-1985


On Mar 12, 2008, at 6:05 PM, Aurélien Bouteiller wrote:

If you can avoid them it is better to avoid them. However it is always
better to use a MPI_Alltoall than coding your own all to all with
point to point, and in some algorithms you *need* to make a all to all communication. What you should understand by "avoid all to all" is not
avoid MPI_alltoall, but choose a mathematic algorithm that does not
need all to all.

 The algorithmic complexity of AllReduce is the same as AlltoAll.

Aurelien

Le 12 mars 08 à 17:01, Brock Palen a écrit :

I have always been told that calls like MPI_Barrior() MPI_Allreduce()
and MPI_Alltoall() should be avoided.

I understand MPI_Alltoall() as it goes n*(n-1) sends and thus grows
very very quickly.  MPI_Barrior() is very latency sensitive and
generally is not needed in most cases I have seen it used.

But why MPI_Allreduce()?
What other functions should generally be avoided?

Sorry this is kinda off topic for the list :-)

Brock Palen
Center for Advanced Computing
bro...@umich.edu
(734)936-1985


_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users


_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users




_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users

_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users


Reply via email to