Aufgabenstellung:
- Routinen für nicht-blockierenden Broadcast, analog zu Isend/Irecv
- Benutzung der Routinen:
#include "ibcast.h"
Ibcast_handle * request;
...
Ibcast(buf, count, datatype, root, comm, &request);
...
Ibcast_wait(&request);
- Vorhandensein von Threads nicht vorausgesetzt
Grund-Algorithmus, einfache Version:
- Prinzip:
- Ibcast:
Root schickt an alle anderen
diese starten Receive
- Ibcast_wait:
Receives werden beendet
- Nachteil: viel Kommunikation (
)
- Vorteil: Ibcast_wait evtl. sofort fertig, guter Überlapp
Grund-Algorithmus, binärer Baum:
- Prinzip:
- Ibcast:
root schickt,
Zwischen- und Endknoten starten Empfang
- Ibcast_wait:
Zwischenknoten beenden Empfang und schicken weiter
Endknoten empfangen
- Vorteil: wenig Kommunikation (
)
- Nachteil: es bleibt viel Wartezeit beim Ibcast_wait
Hauptproblem:
- Kommunikation kann nur während Ibcast und Ibcast_wait
gestartet werden.
- mögliche Verbesserung: ``Hälfte'' der Sends im Ibcast, andere im
Ibcast_wait
- grundsätzliche Lösung: mit Threads

Peter Junglas 11.5.2000