Newsgroups: comp.parallel.mpi
From: cameron@epcc.ed.ac.uk (Kenneth Cameron)
Subject: Re: MPI_Alltoall() on Cray T3D
Organization: Edinburgh Parallel Computing Centre
Date: Fri, 15 Nov 1996 13:29:03 GMT
Message-ID: <E0wysI.ID6.0.staffin.dcs.ed.ac.uk@dcs.ed.ac.uk>

In article <56b72fINNpv6@aleutian.cis.ohio-state.edu>, sundar@aleutian.cis.ohio-state.edu (N Sundar) writes:
> I understand MPI_Alltoall() is implemented with each processor
> directly sending to every other such that no processor receives from
> two others in the same step. But is this an exchange algorithm i.e.
> if processor x sends to y in a step, it also receives from y? Is any
> attempt made to avoid contention for the network links by messages?  I
> guess I'd really appreciate if somebody can mention the exact way the
> schedule is generated.

OK. Imagine the processes within a communicator in a ring. Every process tells
it's immediate neighbour to the right where it would like it's neighbour to
write the data. It then writes data to the correct place on its left neighbour.
Repeat this n times, stepping one process further round the ring each step.
No attempt is made to avoid collision on links, only to minimise the number of
processors writing to a particular processor at any step. We experimented with
several options for the collective operations, and found that the cost of
synchronisation associated with some of the more "optimal" algorithms
significantly outweighed any link contention overheads.


> Also, is MPI_Alltoallv() implemented with the same algorithm?

Almost. Where this is a zero-length transfer, this is no protocol exchange.
Otherwise it's the same.

,Kenneth (It's all my fault) Cameron

-- 
e||) Kenneth Cameron (kenneth@ed)     Edinburgh Parallel Computing Centre e||)
c||c Applications Scientist             University of Edinburgh, Scotland c||c
Declare Function MPI_Comm_dup Lib "MPI.DLL" ( _
                      By Val comm As MPI_Comm, newcomm As MPI_Comm) As Integer

