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!

Était-ce utile?

La solution

Salut la façon de faire est plus facile

omp_set_num_threads(m_iUseableProcessors);

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

scroll top