D'abord, gardez à l'esprit que je ne suis pas un utilisateur très fréquent d'OpenMP ... OK? Maintenant que nous sommes passés, y a-t-il une condition critical
?
Je suis particulièrement intéressé par cette ligne dans une boucle for
parallélisée:OpenMP conditionnel critique
(...)
#pragma omp critical
myMapOfVectors[i].push_back(someNumber);
(...)
Je voudrais l'avoir critical
si et seulement si les fils en cours d'exécution de cette ligne spécifique ont la même i
(parce que je expérimenté - et s'il vous plaît corrigez-moi ici si je me trompe - plusieurs threads repoussant au même vector
n'est pas thread sûr et pourrait provoquer un segfault
).
Merci pour votre réponse! J'apprécie votre solution, mais je m'attendrais à ce que des directives m'obligent à faire le gros du travail. Je veux dire, c'est pourquoi nous avons OpenMP, non? : P Pas une plainte envers vous, juste un critique à OpenMP ... –
Parce que pragmas sont des directives de compilation, ils ne peuvent pas être utilisés pour synchroniser sur des objets tas dynamiquement alloués (dans le cas général au moins). Si vous implémentez votre propre objet stack (avec une allocation de mémoire fixe), vous pouvez utiliser '#pragma omp atomic' pour insérer des éléments en interne (l'insertion ne serait pas atomique, mais incrémenterait le nombre). – dlasalle