Comment faire pour s'assurer qu'un tableau alloué dynamiquement est privé dans openmp
Je travaille en C avec openMP à l'aide de gcc sur une machine linux. Dans un parallèle openmp pour la boucle, je peux déclarer une allouée statiquement tableau comme privé. Le fragment de code:
int a[10];
#pragma omp parallel for shared(none) firstprivate(a)
for(i=0;i<4;i++){
Et tout fonctionne comme prévu. Mais si, au contraire, j'alloue de manière dynamique,
int * a = (int *) malloc(10*sizeof(int));
#pragma omp parallel for shared(none) firstprivate(a)
les valeurs de a (au moins un[1...9]) ne sont pas protégés, mais d'agir comme si elles sont partagées. Ceci est compréhensible dans la mesure où rien dans le pragma commande semble dire omp comment big le tableau un qui a besoin d'être privé. Comment puis-je transmettre cette information à openmp? Comment dois-je déclarer la totalité de la allouée dynamiquement tableau en privé?
source d'informationauteur cboettig
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que vous n' - ce que j'ai fait pour résoudre ce problème a été utilisé une région parallèle
#pragma omp parallel shared(...) private(...)
et attribué le tableau dynamiquement à l'intérieur de la région parallèle. Essayez ceci:Que m'a produit les mêmes résultats que mon expérience antérieure programme:
Au jugé, je dirais parce que OpenMP peut pas en déduire la taille du tableau, il ne peut pas être privé uniquement au moment de la compilation des tableaux peut être fait de cette façon. Je reçois des erreurs de segmentation lorsque j'essaie de privé un tableau alloué dynamiquement, probablement en raison de violations d'accès. Allouer le tableau sur chaque thread comme si vous aviez écrit cela en utilisant les pthreads sens et résout le problème.
Vous dit OpenMP que le pointeur
a
est privé, c'est à dire reproduit dans chaque thread. Votre tableau est juste certaines données arbitrairesa
points, et OpenMP ne seront pas répliqués (peut-être parce que ce serait-il nécessaire d'allouer et de libérer de la réplication des tableaux).