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 ?

46
demandé sur Z boson 2011-06-15 17:25:21

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.

40
répondu Z boson 2018-09-16 13:32:17

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]

4
répondu ysrini 2011-06-15 14:42:19