Условный “pragma omp”

Я пытаюсь разного рода распараллеливать с помощью OpenMP. В результате у меня есть несколько строк #pragma omp parallel for в моем коде, которые I (un-) комментируют чередуются. Есть ли способ сделать эти строки условными с чем-то вроде следующего, а не рабочего кода?

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

Параллельная конструкция OpenMP может иметь указанное предложение if . В Фортране я бы написал что-то вроде этого:

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

Я иногда использую это, когда проблема может быть слишком маленькой, чтобы беспокоить параллелизм. Думаю, вы могли бы использовать тот же подход, чтобы проверять флаг отладки во время выполнения. Я оставлю это для вас, чтобы понять синтаксис C ++, но, вероятно, он точно такой же.

C99 имеет ключевое слово _Pragma которое позволяет разместить то, что в противном случае будет #pragma внутри макросов. Что-то вроде

 #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 

а затем в вашем коде

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