Globale Operationen
pi1 (
Source
):
Berechnung von Pi über
Parallelisierung der Schleife in mehreren Schritten
pi2 (
Source
):
Aufspalten der Loop auf mehrere Threads
PARALLEL DO
Abkürzung für
PARALLEL
, gefolgt von
DO
pi2 liefert meistens falsche Ergebnisse
Ursache: Threads schreiben "gleichzeitig" nach x und sum
pi3 (
Source
):
lokale Kopie für jeden Thread:
PRIVATE(x, sum)
private Variable
haben keinen Anfangswert
geben ihren Endwert (welchen?) nicht weiter
private Variable mit Anfangswert:
FIRSTPRIVATE(var-liste)
Wert der letzten Iteration weitergeben:
LASTPRIVATE(var-liste)
pi3 fehlerhaft: Die privaten sum's müssen addiert werden.
pi4 (
Source
):
"automatische" Addition der sum-Werte aller Threads:
REDUCTION(+:sum)
mögliche Operatoren für eine Reduktion:
+, -, *, .AND:, .OR., .EQV., .NEQV.
MAX, MIN, IAND, IOR, IEOR
Reduktions-Variable werden "richtig" initialisiert
(0 bei +, 1 bei *,
.TRUE.
bei
.AND.
etc.)
Peter Junglas 16.2.1999