En parallèle OpenMP boucle avec l'instruction break
Je sais que vous ne pouvez pas avoir une instruction break pour une OpenMP boucle, mais je me demandais si il n'y a aucune solution de contournement tout en continuant de bénéficier de parallélisme. Fondamentalement, je dois "pour" boucle qui parcourt les éléments d'un grand vecteur à la recherche d'un élément qui satisfait une certaine condition. Cependant il y a un seul élément qui puisse satisfaire à la condition donc une fois que c'est trouvé, nous pourrons sortir de la boucle, Merci d'avance
for(int i = 0; i <= 100000; ++i)
{
if(element[i] ...)
{
....
break;
}
}
- êtes-vous lié à l'omp?
- connexes: Comment sortir d'une étude parallèle (OpenMP) Fortran boucle idiomatique?
Vous devez vous connecter pour publier un commentaire.
Vous pourriez essayer de faire manuellement ce que le openmp pour la boucle n', à l'aide d'une boucle while:
De cette façon, vous devez les tester "aller" à chaque cycle, mais cela ne devrait pas beaucoup d'importance. Le plus important est que cela correspondrait à un "statique" omp pour la boucle, ce qui n'est utile que si vous pouvez vous attendre à toutes les itérations de prendre la même quantité de temps. Sinon, 3 threads peut-être déjà terminé alors qu'on a encore à mi-chemin de got...
go
atomiquement. Aussi le modèle de mémoire garantit pas de visibilité, sauf si vous ajoutezseq_cst
à la fois des opérations atomiques.std::atomic<bool>
pourgo
. Je vais modifier la réponse en conséquence.Voir cet extrait:
Cette situation est plus approprié pour pthread.
Je serais probablement faire (copié un peu de yyfn)
Voici une version simplifiée de la accepté de répondre.