J'ai du code qui ressemble à ceci:OpenMP multiples pour les boucles
for(i=0; i<max;i++){
for(j=0; j<max2;j++)
//stuff
}
for(i=0; i<max;i++){
for(j=0; j<max2;j++)
//other stuff
}
for(i=0; i<max;i++){
for(j=0; j<max2;j++)
//final stuff
}
Je veux paralléliser cela en utilisant OpenMP. Quelle est la meilleure méthode? J'ai essayé de faire le #pragma omp parallel private(i)
au début et #pragma omp for
avant chaque boucle j
. C'est ce que je veux dire:
#pragma omp parallel private(i)
{
for(i=0; i<max;i++){
#pragma omp for
for (j=0; j<max2;j++){
//and so on and so forth
Le fait est que cela ne me donne aucune amélioration de performance. Je suppose que c'est parce que les 3 for
boucles ne sont pas exécutées en parallèle ... si je pouvais faire fonctionner ces 3 en même temps, je pense que je pourrais obtenir une augmentation de performance. Des idées? Merci!
Voulez-vous dire que les trois boucles ne sont pas des données dépendantes les unes des autres afin qu'ils puissent fonctionner en parallèle ou voulez-vous distribuer chaque boucle entre les fils dans l'équipe OpenMP? –
Oui, les trois boucles ne sont pas dépendantes les unes des autres, donc je veux qu'elles fonctionnent en parallèle – pauliwago
Pourquoi parallélisez-vous la boucle interne? Pour la parallélisation, il est généralement avantageux de donner à chaque thread un gros morceau de données, donc à moins que les itérations de la boucle externe ne dépendent l'une de l'autre (donc la boucle sur i doit être exécutée dans l'ordre) sens de paralléliser la boucle interne au lieu de l'externe. – Grizzly