Re: 2-phase collective

Rolf Rabenseifner (Rabenseifner@RUS.Uni-Stuttgart.DE)
Mon, 10 Feb 1997 09:25:25 +0100 (MEZ)

>> 1) 3 pairs of functions for each two faced collective
>>
>> start_non_collective_foo
>> end_collective_foo
>>
>> start_collective_foo
>> end_non_collective_foo
>>
>> start_collective_foo
>> end_collective_foo

Is this a good compromise in maximizing the efficiency of parallel
applications on many platforms and minimizing the needs in
implementing this, learning this and programming appl. with this?

I believe the better compromise is to have only one start/end
interface with
- the implementors are allowed to program each of them as blcking
collective
- the implementors are encouraged to implement "start" as non-blocking
in all cases and "end" as non-blocking if the "start" is already
issued at all processes of the communicator.

This implies a clear advice to the users, to call "start" and "end"
approximately at the same time in the case that the MPI
implementation implements with iblocking collective,
and gives the chance to have no unnecessary idle if the MPI
implementation implements "as encouraged" and the idifferent
application processes do not run more away as the time interval
between "start" and "end".

And MPI implementors that cannot or do not want to implement
a efficient two-phase interface can implement "start" as a
second entry to the existing blocking collective routine
and "end" as a dummy (and we can add this to the list of
routines that are allowed to be in C only a cpp macro).

I do not see any needs of the application programmers
to have a more complicated interface -- and they do not want
to learn the details of a more complicated interface.

And MPI implementors also do not like to have more complexity
(== implementation effort).

Rolf


Rolf Rabenseifner (Computer Center )
Rechenzentrum Universitaet Stuttgart (University of Stuttgart)
Allmandring 30 Phone: ++49 711 6855530
D-70550 Stuttgart 80 FAX: ++49 711 6787626
Germany rabenseifner@rus.uni-stuttgart.de