2017-08-21 8 views
-2

Je souhaite transmettre une variable en tant que variable partagée dans le code parallèle openmp, mais je ne suis pas sûr de ce que je devrais faire pour transmettre une variable structurée en variable partagée. Voici mon code: Je ne sais pas si cela est la bonne façon de le faire ou non:Variable de type structuré en code openmp partagé ou privé

struct lvl{ 
int *L; 
int *list; 
}; 

struct lvl* lvls(int s,int k){ 
    struct lvl* lvls =malloc(sizeof (struct lvl)); 
    lvls->L = (int*)calloc(s+1, sizeof(int)); 
    lvls->list=(int*)calloc(k+1,sizeof(int)); 
    return lvls; 
} 
int main(int argc, char *argv[]) 
{ 
int n=100; 
int k=200; 
struct lvls *lvl = lvls(n,K); 
#pragma omp parallel num_threads(threadnum) private(k,bi,b,kstart,kend,v,bmax,max,bwt) firstprivate(BinAff,Blist) shared(capacity,lvl) 
{ 
     #pragma omp for schedule (static,100) 
     for (u=0;u<G->n;u++){ 
      //some code in here 
     } 
    } 
} 

Non, je voulais savoir si elle est partagée (lvl) est la bonne façon de faire les deux tableaux de la struct (L et liste) des tableaux partagés? Si non, que dois-je faire? J'ai essayé de faire shared (lvl->L,lvl->list) mais j'ai quelques erreurs de compilation.

Répondre

0

Il n'y a pas de tableaux dans votre struct. Il n'y a que des pointeurs. lvl est également juste un pointeur. Les clauses de partage de données (par exemple, shared) ne s'appliquent qu'à la variable elle-même (l'adresse lvl pointe vers). À propos, si vous ne spécifiez pas d'attribut partagé de données, les variables définies en dehors de la portée des régions parallèles sont implicitement shared. Les variables définies à l'intérieur sont implicitement private. Il est conseillé de toujours définir les variables aussi localement que possible, cela facilite l'écriture du code correct. Par exemple, les variables privées, telles que k, ne sont pas initialisées dans la région parallèle. Par exemple, les variables privées, telles que k, ne sont pas initialisées.