Yes, I see that for implementing 2-phase it is easier to have the right
to implement both (start&end) as collective blockking operations.
I believe that the burden to the application writers is not so heavy
(they must guarantee that collective&blocking starts and ends do not
cause a deadlock), that they should require that the starts are
non blocking.
> > So, does anyone have a suggestion on how to implement (efficiently) a
> > nonblocking reduce, so that this holds? The only way I know how to
> > do this is for systems with shared memory and with few processes: ...
>
> I believe, implementations have also a good chance to prohibit
> unnecesary idles on virtual shared memory systems.
> E.g. in ALLTOALL for each pair of processes the data can be always
> transferred in both directions by direct (virtual) memory access
> after the second process has invoked the start and the end has only
> to wait if not all are already started.
>
> *****
> If the only example of a nonblocking implementation is DSVM, then I don't
> buy the construct.
>
> Marc
> *******
I can imagine that you also know how to implement 2-phase collective
on your hardware without unnecessary synchronizations for the
application, i.e. without unnecessary idles.
You too?
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