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

时间:2011-10-21 10:07:34

标签: c++ c openmp

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

目前,要在模式之间切换,我需要发表评论#pragma omp(或至少parallel)。

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

3 个答案:

答案 0 :(得分:28)

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

OpenMP文档说(仅举例):

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

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

答案 1 :(得分:14)

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

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

答案 2 :(得分:3)

通常处理此类事情的方式(一般情况)是#define#ifdef

在您的标头文件中:

#ifndef SINGLETHREADED
#pragma omp
#endif

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

cc  -DSINGLETHREADED <other flags go here> code.c