Как правильно отключить директивы OpenMP? - PullRequest
17 голосов
/ 21 октября 2011

У меня есть код C ++ с прагмами OpenMP внутри.Я хочу протестировать этот код как для многопоточного режима (с OpenMP), так и в однопоточном режиме (без OpenMP).

На данный момент, чтобы переключаться между режимами, мне нужно комментировать #pragma omp (или, по крайней мере, parallel).

Какой самый чистый или используемый по умолчанию способ включения / отключения OpenMP?

Ответы [ 3 ]

28 голосов
/ 05 декабря 2011

Если вы не скомпилируете с опцией -fopenmp, вы не получите параллельный код.Вы можете сделать это с помощью подходящего определения и файла сборки, который генерирует все коды.

В документации OpenMP сказано (только пример):

#ifdef _OPENMP
   #include <omp.h>
#else
   #define omp_get_thread_num() 0
#endif

См. http://www.openmp.org/mp-documents/spec30.pdf (условная компиляция).

14 голосов
/ 21 октября 2011

Посмотрите в руководстве по компилятору ключ, который отключает OpenMP.Для GCC OpenMP по умолчанию отключен и включен с параметром -fopenmp.

Другой вариант - запуск кода с переменной среды OMP_NUM_THREADS, установленной в 1, хотя это не совсем то же самое, что компиляция без OpenMPво-первых.

3 голосов
/ 21 октября 2011

Обычно такие вещи обрабатываются (в общем случае) с помощью #define s и #ifdef:

В вашем заголовочном файле:

#ifndef SINGLETHREADED
#pragma omp
#endif

Когда вы компилируете,добавьте -DSINGLETHREADED, чтобы отключить OpenMP:

cc  -DSINGLETHREADED <other flags go here> code.c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...