OpenMP: les variables locales sont-elles automatiquement privées?
#pragma omp parallel
{
int x; // private to each thread ?
}
#pragma omp parallel for
for (int i = 0; i < 1000; ++i)
{
int x; // private to each thread ?
}
Merci!
P.S. si les variables locales sont automatiquement privées, à quoi bon utiliser la clause privée ?
2 réponses
Oui, les variables locales sont automatiquement privées.
la raison d'être de la clause private
est que vous n'avez pas à changer votre code .
la seule façon de paralléliser le code suivant sans la clause privée
int i,j;
#pragma omp parallel for private(j)
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
//do something
}
}
doit changer le code. Par exemple comme ceci:
int i
#pragma omp parallel for
for(i = 0; i < n; i++) {
int j;
for(j = 0; j < n; j++) {
//do something
}
}
qui est parfaitement valide code C89/C90 mais un de les objectifs D'OpenMP n'ont pas à changer votre code, sauf pour ajouter des instructions pragma
qui peuvent être activées ou désactivées au moment de la compilation.
les données dans une région parallèle sont privées à chaque thread.
veuillez vous référer à http://en.wikipedia.org/wiki/OpenMP#Data_sharing_attribute_clauses [Data sharing attribut clauses]