web-dev-qa-db-fra.com

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 ?
}

Je vous remercie!

P.S. Si les variables locales sont automatiquement privées, quel est l'intérêt d'utiliser la clause private?

52
pic11

Oui, les variables locales sont automatiquement privées.

La raison de l'existence de la clause private est que vous n'avez pas besoin de 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
    }
}

est de 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
    }
}

C'est un code C89/C90 parfaitement valide mais l'un des objectifs d'OpenMP n'est pas de changer votre code sauf pour ajouter des instructions pragma qui peuvent être activées ou désactivées au moment de la compilation.

45
Z boson

Les données d'une région parallèle sont privées pour chaque thread.

Veuillez vous référer http://en.wikipedia.org/wiki/OpenMP#Data_sharing_attribute_clauses [Clauses d'attribut de partage de données]

4
ysrini