2010-12-05 9 views
1

Quelle est la différence dans la combinaison 2 pour les boucles et parallizing ensemble et séparément parallizingOpenMP: différence dans la combinaison 2 pour la boucle et non combinant

Exemple 1. ensemble en parallèle

#pragma omp parallel for 
for(i = 0; i < 100; i++) { 
//.... some code 
} 

#pragma omp parallel for 
for(i = 0; i < 1000; i++) { 
//.... some code 
} 

2. paralléliseur ensemble

#pragma omp parallel 
{ 
#pragma omp for 
for(i = 0; i < 100; i++) { 
//.... some code 
} 

#pragma omp for 
for(i = 0; i < 1000; i++) { 
//.... some code 
} 
} 

quel code est meilleur et pourquoi ????

Répondre

2

On pourrait s'attendre à une petite victoire dans la seconde, parce que l'un est fork/joint (ou l'équivalent fonctionnel) les threads OMP deux fois, plutôt qu'une fois. Si elle fait une différence réelle pour votre code est une question empirique mieux répondu par mesure. La seconde peut également avoir un avantage plus important si le travail dans les deux boucles est indépendant, et vous pouvez démarrer la seconde à tout moment, et il y a des raisons d'attendre un déséquilibre de charge dans la première boucle. Dans ce cas, vous pouvez ajouter une clause nowait au premier t omp for et, plutôt que tous les threads attendant la fin de la boucle for, celui qui a terminé en premier peut immédiatement commencer à travailler sur la deuxième boucle. Ou, on pourrait mettre les deux morceaux de codes chacun dans un section, ou task. En général, vous avez beaucoup de contrôle sur ce que font les threads et comment ils le font dans une section parallèle; alors qu'une fois que vous avez terminé la section parallèle, vous perdez cette flexibilité - tout doit se rejoindre et vous avez terminé.

Questions connexes