Условное "прагма омп"
Я пытаюсь различные виды распараллеливания с использованием 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) {
...
}