2013-04-08 1 views
0

J'ai lu que les variables dans OpenMP sont partagées par défaut. Cela signifie-t-il que dans le code suivant, qui est censé additionner tous les nombres de 0 à N-1, il y a une condition de concurrence?Condition de course OpenMP?

int sum = 0,i; 
#pragma omp parallel for 
for (i = 0; i < N; i++) 
    sum+=i; 

Répondre

2

Oui, il existe une condition de concurrence. Vous devriez ajouter reduction(+:sum) au pragma. Cela va effectivement faire des copies privées invisibles dans chaque thread, puis les additionner après la boucle.

+0

et aussi rendre «i» privé? – jitihsk

+1

Cela n'est pas nécessaire ici, car les variables d'itération de boucle dans openmp 'for' sont privées automatiquement. –