J'ai consulté les définitions officielles, mais je suis toujours aussi confus.
firstprivate
: Spécifie que chaque thread doit avoir sa propre instance d'une variable, et que la variable doit être initialisée avec la valeur de la variable, car elle existe avant la construction parallèle.
Pour moi, ça ressemble beaucoup à du privé. J'ai cherché des exemples, mais je n'arrive pas à comprendre en quoi c'est spécial ou comment on peut l'utiliser.
lastprivate
: Spécifie que la version de la variable dans le contexte englobant est égale à la version privée du thread qui exécute la dernière itération (construction for-loop) ou la dernière section (sections #pragma).
J'ai l'impression de comprendre un peu mieux cette question grâce à l'exemple suivant :
#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];
Donc, dans cet exemple, je comprends que lastprivate
permet i
pour être retourné en dehors de la boucle comme la dernière valeur qu'il était.
Je viens de commencer à apprendre OpenMP aujourd'hui.