Условное "прагма омп"

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

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

2 ответа

Решение

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

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

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

С99 имеет _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) {
  ...
}
Другие вопросы по тегам