Ich habe mir die offiziellen Definitionen angesehen, bin aber immer noch ziemlich verwirrt.
firstprivate
: Gibt an, dass jeder Thread eine eigene Instanz einer Variablen haben soll und dass die Variable mit dem Wert der Variablen initialisiert werden soll, da sie vor dem parallelen Konstrukt vorhanden ist.
Für mich klingt das sehr nach privat. Ich habe nach Beispielen gesucht, aber ich scheine nicht zu verstehen, wie es besonders ist oder wie es verwendet werden kann.
lastprivate
: Gibt an, dass die Version der Variablen des umschließenden Kontexts der privaten Version des Threads entspricht, der die letzte Iteration (For-Loop-Konstrukt) oder den letzten Abschnitt (# Pragma-Abschnitte) ausführt.
Ich habe das Gefühl, dass ich dies aufgrund des folgenden Beispiels etwas besser verstehe:
#pragma omp parallel
{
#pragma omp for lastprivate(i)
for (i=0; i<n-1; i++)
a[i] = b[i] + b[i+1];
}
a[i]=b[i];
In diesem Beispiel verstehe ich also, dass lastprivate
es möglich ist i
, als letzter Wert außerhalb der Schleife zurückgegeben zu werden.
Ich habe heute gerade angefangen, OpenMP zu lernen.