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

Jak*_* M. 17 c c++ openmp

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

现在,要在模式之间切换,我需要评论#pragma omp(或至少parallel).

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

sna*_*erk 28

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

OpenMP文档说(仅举例):

#ifdef _OPENMP
   #include <omp.h>
#else
   #define omp_get_thread_num() 0
#endif
Run Code Online (Sandbox Code Playgroud)

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


jan*_*neb 14

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

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

  • 我发现`omp_set_num_threads(1)`最有用(遗憾的是,在我看来并不是很优雅) (5认同)
  • 使用“#pragma omp ...”编写代码,然后不启用 -fopenmp 会导致链接错误,例如“对 GOMP_parallel_start 的未定义引用” (2认同)