I ont deux fonctions, do_step_one(i)
et do_step_two(i)
, pour i
de 0
à N-1
.Comment créer un `omp parallèle for` avec synchronisation (` barrier`) de tous les fils dans le milieu avec OpenMP
Actuellement, j'ai ce code (séquentiel):
for(unsigned int i=0; i<N; i++) {
do_step_one(i);
}
for(unsigned int i=0; i<N; i++) {
do_step_two(i);
}
Chaque appel de do_step_one()
et do_step2()
peut être fait dans l'ordre et en parallèle, mais toute do_step_two()
a besoin de la fin de tous les do_step_one()
pour commencer (il utilise do_step_one()
résultats).
J'ai essayé les éléments suivants:
#omp parallel for
for(unsigned int i=0; i<N; i++) {
do_step_one(i);
#omp barrier
do_step_two(i);
}
Mais gcc se plaint
convolve_slices.c: 21: avertissement: zone barrière ne peut pas être étroitement imbriquées à l'intérieur du partage du travail, critique, ordonné, master ou zone de tâche explicite.
Qu'est-ce que je ne comprends pas? Comment résoudre ce problème?
Votre syntaxe OpenMP semble erroné - pour les appels que vous semblez être manquant le '# pragma' - l'avez-vous omis ou n'est-ce pas là? –
Je l'omets, désolé, mais dans le code réel, ils sont ici. –