2016-09-29 4 views
1

J'ai quelques variables globales que j'ai besoin d'utiliser dans une section parallélisée de mon programme. J'ai donc écrit ceci:pragma omp raccourcis dans c

#define N 2000 
int x[N], matrix[N][N] 

int main(int argc, char **argv) 
... 
#pragma omp parallel 
{ 
    #pragma omp privatethread(x,matrix) 
    #pragma omp for 
    for(int k=0; k<100;++k) 
    /*some function to modify values of x and matrix differently 
    from run to run*/ 
    ... 
} 
... 

est la partie avec #pragma équivalent à:

... 
#pragma omp privatethread(x,matrix) parallel for 
... 

Y at-il une différence entre la déclaration #pragma omp parallèle puis #pragma omp privatethread et déclarant d'abord #pragma omp privatethread puis #pragma omp parallèle pour? Dois-je mettre un {après la partie privathread?

#pragma omp privatethread(x,matrix) 
{ //<-- here 
#pragma omp for 

Enfin, est qu'une bonne façon de travailler avec de grands vecteurs c ou est-il préférable d'utiliser malloc dans mon pragma OMP et enlever la partie privatethread? (S'il vous plaît laissez-moi savoir si c'est mieux que je pose cette question de fin dans un nouveau message)

Répondre

1

1.Le code ci-dessous vous donne une erreur. Même si vous supprimez le pour.

... 
#pragma omp privatethread(x,matrix) parallel for 
... 

La déclaration doit suivre cette syntaxe

#pragma omp threadprivate (list) 

2. Il n'y a pas de différence entre,

#pragma omp parallel 
{ 
    #pragma omp privatethread(list) 
    //CODE 
} 

et

#pragma omp privatethread(list) 
#pragma omp parallel 
{ 
    //CODE 
} 

Comme vous pouvez le voir n » Je dois mettre {parenthèses après le #pragma omp privatethread .Cette instruction n'exécute aucun code en parallèle, elle rend la variable d'étendue globale locale et persistante à un thread.