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

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

6 голосов
/ 03 ноября 2010

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

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

Ответы [ 2 ]

6 голосов
/ 03 ноября 2010

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) {
  ...
}
5 голосов
/ 03 ноября 2010

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

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

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

...