2010-11-03 4 views
3

J'essaie différents types de parallélisation en utilisant OpenMP. En conséquence j'ai plusieurs lignes de #pragma omp parallel for dans mon code que je (dé-) commente en alternance. Y at-il un moyen de rendre ces lignes conditionnelles avec quelque chose comme le code suivant, pas de travail?Conditionnel "pragma omp"

define OMPflag 1 
    #if OMPFlag pragma omp parallel for 
    for ... 
+0

Je ne comprends pas ce que vous voulez ... désolé. : -/ –

Répondre

3

Une construction parallèle OpenMP peut avoir une clause if spécifiée. En Fortran j'écrire quelque chose comme ceci:

!$omp parallel if(n>25) ... 

J'utilise parfois quand un problème est peut-être trop petit pour paralléliser la peine. Je suppose que vous pourriez utiliser la même approche pour vérifier un indicateur de débogage lors de l'exécution. Je vous laisse le soin de comprendre la syntaxe C++, mais c'est probablement la même chose.

+2

J'ai trouvé les détails ici: https://computing.llnl.gov/tutorials/openMP/#Combined -> Directives OpenMP – Framester

+0

Hm, la question est sur C, ni C++ ni fortran. –

+0

Um, ouais wtf? . –

6

C99 a le mot-clé _Pragma qui vous permet de placer ce qui serait autrement #pragma dans les macros. Quelque chose comme

#define OMP_PARA_INTERNAL _Pragma("omp parallel for") 
#if [your favorite condition] 
#define OMP_FOR OMP_PARA_INTERNAL for 
#else 
#define OMP_FOR for 
#endif 

puis dans votre code

OMP_FOR (unsigned i; i < n; ++i) { 
    ... 
}