«Pragma omp» conditionnel

J’essaie différents types de parallélisation avec OpenMP. En conséquence, j’ai plusieurs lignes de #pragma omp parallel for dans mon code pour lesquelles je (comment) commente en alternance. Existe-t-il un moyen de rendre ces lignes conditionnelles avec quelque chose comme le code suivant, qui ne fonctionne pas?

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

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

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

J’utilise parfois cela quand un problème peut être trop petit pour déranger paralléliser. J’imagine que vous pourriez utiliser la même approche pour vérifier un indicateur de débogage au moment de l’exécution. Je vous laisse le soin de déterminer la syntaxe C ++, mais elle est probablement identique.

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 

et ensuite dans votre code

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