Условный «прагма нампа»
Вопрос
Я пробую разные виды параллелизма с использованием OpenMP. В результате у меня есть несколько строк #pragma omp parallel for
В моем коде, который я (не) комментарий чередуется. Есть ли способ сделать эти строки условным с чем-то вроде следующего, а не рабочего кода?
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) {
...
}