Comment paralléliser correctement une boucle for nestede

Je travaille avec OpenMP pour paralléliser une boucle scalaire nestede:

double P[N][N]; double x=0.0,y=0.0; for (int i=0; i<N; i++) { for (int j=0; j<N; j++) { P[i][j]=someLongFunction(x,y); y+=1; } x+=1; } 

Dans cette boucle, l’important est que la masortingce P soit identique dans les versions scalaire et parallèle:

Toutes mes épreuves possibles n’ont pas réussi …

Le problème ici est que vous avez ajouté des dépendances d’itération à itération avec:

 x+=1; y+=1; 

Par conséquent, dans l’état actuel du code, il n’est pas parallélisable. Tenter de le faire aboutira à des résultats incorrects. (comme vous le voyez probablement)

Heureusement, dans votre cas, vous pouvez les calculer directement sans introduire cette dépendance:

 for (int i=0; i 

Maintenant, vous pouvez essayer de lancer un pragma OpenMP à ce sujet et voir si cela fonctionne:

 #pragma omp parallel for for (int i=0; i