我有内置OpenMP pragma的C ++代码。我想测试这个代码的多线程模式(使用OpenMP)和单线程模式(没有OpenMP)。
目前,要在模式之间切换,我需要发表评论#pragma omp
(或至少parallel
)。
启用/禁用OpenMP的最简洁或最默认的方法是什么?
答案 0 :(得分:28)
如果不使用-fopenmp选项进行编译,则不会获得并行代码。您可以使用适当的define和makefile来生成所有代码。
OpenMP文档说(仅举例):
#ifdef _OPENMP
#include <omp.h>
#else
#define omp_get_thread_num() 0
#endif
答案 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