Comment faire pour désactiver les directives OpenMP dans une belle façon?
J'ai un code C++ avec OpenMP pragmas à l'intérieur. Je veux tester ce code à la fois pour le multithread mode (avec OpenMP) et dans un seul thread de mode (pas OpenMP).
Pour l'instant, pour basculer entre les modes j'ai besoin de commentaire #pragma omp
(ou au moins parallel
).
Ce qui est le plus propre, ou par défaut, de façon à activer /désactiver OpenMP?
OriginalL'auteur Jakub M. | 2011-10-21
Vous devez vous connecter pour publier un commentaire.
Regarder dans le compilateur d'emploi pour l'interrupteur de désactivation de la OpenMP. Pour GCC, OpenMP est désactivé par défaut et activé à l'-fopenmp option.
Une autre option serait d'exécuter du code avec les OMP_NUM_THREADS variable d'environnement définie à 1, si ce n'est pas exactement la même que la compilation sans OpenMP en premier lieu.
J'ai trouvé
omp_set_num_threads(1)
les plus utiles (malheureusement, pas très élégant à mon avis)Pour notre projet, nous avons WITH_OPENMP - un booléen moment de la construction de l'option qui gère passant -fopenmp et toute définit si elles sont nécessaires. Id de le proposer à quelqu'un d'autre en utilisant openmp dans un projet, la capacité de tester sans openmp peut être utile à la fois à la règle comme cause de tout les bugs.
OriginalL'auteur janneb
Si vous n'avez pas compiler avec-fopenmp option, vous n'aurez pas de code parallèle. Vous pouvez le faire avec un approprié de définir et de makefile qui génère tous les codes.
OpenMP documentation dit (juste un exemple):
Voir http://www.openmp.org/mp-documents/spec30.pdf (compilation conditionnelle).
OriginalL'auteur snatverk
La façon dont ces choses sont habituellement gérées (le cas général) est avec
#define
s et#ifdef
:Dans votre fichier d'en-tête:
Lorsque vous compilez, ajoutez -DSINGLETHREADED pour désactiver OpenMP:
OriginalL'auteur Klas Lindbäck