Schleifen in Unterprogrammen
orphan1 (
Source
):
Hauptprogramm: "Zeitschleife", nicht parallelisierbar
Schleifen in smooth_x/y sind parallelisierbar
großer Overhead: bei jedem Call wieder neu fork/join
orphan2 (
Source
):
einmal Threads erzeugen mit
PARALLEL
-Block um die Zeischleife
wird von allen ausgeführt
Laufvariable t automatisch privat
DO
in den Subroutines zur Verteilung der Schleifen
nicht im lexikalischen Bereich eines
PARALLEL
("orphaned" = verwaist)
erkennt, daß Threads vorhanden sind
Synchronisation der Threads ("Barrier") bei
END DO
orphan3 (
Source
):
END DO NOWAIT
: keine Barrier am Ende von
DO
Beschleunigung durch Verringerung der Thread-Wartezeiten
Achtung: führt hier zum Fehler (auch schon bei
NOWAIT
einer Loop)!
Explizite Synchronisation:
BARRIER
orphan4 (
Source
):
Kommandos nur durch einen Thread ausführen:
SINGLE / END SINGLE
Synchronisation am Ende
print von mehreren Threads ok, aber Verschränkung des Outputs möglich
Peter Junglas 16.2.1999