Éteignez OpenMP
-
20-09-2019 - |
Question
Dans mon programme C ++, je voudrais lancer son exécutable parfois avec et parfois sans utiliser OpenMP (à savoir un seul filetage ou multi-threading). Je considère l'un des deux cas suivants comment mon code utilise OpenMP:
(1) On suppose que mon code est seulement d'avoir des directives de #include <omp.h>
et OpenMP.
(2) Idem que (1) et mon code appelle d'autres fonctions comme OpenMP omp_get_thread_num()
.
Afin de ne pas avoir code différent pour les différents cours d'exécution, est-ce la seule façon utilisant une variable precompiler auto-définie pour garder où OpenMP apparaît dans mon code?
Merci et salutations!
La solution
Salut la façon de faire est plus facile
omp_set_num_threads(m_iUseableProcessors);
où m_iUseableProcessors
est le nombre de processeurs que vous voulez diviser le calcul. Je ne sais pas comment le faire sans les fonctions OpenMP. Vous pourriez probablement les #ifdef
, mais que vous fait désactiver OpenMP au moment de la compilation.
Autres conseils
Vous pouvez utiliser la variable d'environnement:
set OMP_NUM_THREADS=1
En fait, il ne tourne pas OpenMP hors tension. Il forcera OpenMP à créer un seul thread pour une application. Il fonctionne sans recompilation. J'utilise cette variable pour tester l'évolutivité sur 1, 2, 3, 4 fils, etc.
Vous pouvez mettre le comprennent comme suit:
#ifdef _OPENMP_
#include<omp.h>
#endif
Maintenant, si vous exécutez votre programme sans drapeau -fopenmp, il ne tiendrait pas compte des directives OpenMP
En plus de la suggestion de _OPENMP
, vous trouverez peut-être utile d'utiliser la _Pragma
de C99 (ou __pragma
, si vous utilisez des compilateurs C ++ - voir