如何以一种很好的方式禁用OpenMP指令?

我有内置OpenMP pragma的C ++代码。 我想测试这个代码的multithreading模式(使用OpenMP)和单线程模式(没有OpenMP)。

现在,要在模式之间切换,我需要注释#pragma omp (或者至少是parallel )。

启用/禁用OpenMP的最简洁或最默认的方法是什么?

查看禁用OpenMP的交换机的编译器手册。 对于GCC,默认情况下禁用OpenMP并使用-fopenmp选项启用。

另一种选择是在OMP_NUM_THREADS环境变量设置为1的情况下运行代码,尽管这与首先没有OpenMP的编译不完全相同。

如果不使用-fopenmp选项进行编译,则不会获得并行代码。 您可以使用适当的define和makefile来生成所有代码。

OpenMP文档说(仅举例):

 #ifdef _OPENMP #include  #else #define omp_get_thread_num() 0 #endif 

请参阅http://www.openmp.org/mp-documents/spec30.pdf (条件编译)。

通常处理这些事情的方式(一般情况)是使用#define#ifdef

在您的头文件中:

 #ifndef SINGLETHREADED #pragma omp #endif 

编译时,添加-DSINGLETHREADED以禁用OpenMP:

 cc -DSINGLETHREADED  code.c