Вопрос

Я пробую разные виды параллелизма с использованием 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) {
  ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top