2010-11-03 2 views
3

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

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

Я не понимаю, что вы хотите ... извините. : -/ –

ответ

3

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

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

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

+2

Я нашел здесь информацию: https://computing.llnl.gov/tutorials/openMP/#Combined -> Директивы OpenMP – Framester

+0

Хм, вопрос о C, ни C++, ни fortran. –

+0

Ум, да, wtf? , –

6

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) { 
    ... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^