Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以良好的方式禁用OpenMP指令? 我有C++代码,里面有OpenMP语法。我想在多线程模式(使用OpenMP)和单线程模式(无OpenMP)下测试这段代码_C++_C_Openmp - Fatal编程技术网

如何以良好的方式禁用OpenMP指令? 我有C++代码,里面有OpenMP语法。我想在多线程模式(使用OpenMP)和单线程模式(无OpenMP)下测试这段代码

如何以良好的方式禁用OpenMP指令? 我有C++代码,里面有OpenMP语法。我想在多线程模式(使用OpenMP)和单线程模式(无OpenMP)下测试这段代码,c++,c,openmp,C++,C,Openmp,现在,要在模式之间切换,我需要注释#pragma omp(或者至少是parallel) 启用/禁用OpenMP的最干净或默认方式是什么?查看编译器手册中禁用OpenMP的开关。对于GCC,OpenMP在默认情况下被禁用,并通过-fopenmp选项启用 另一种选择是在OMP_NUM_THREADS环境变量设置为1的情况下运行代码,尽管这与在没有OpenMP的情况下编译代码并不完全相同。通常处理此类事情的方式(一般情况)是使用\define和\ifdef: 在头文件中: #ifndef SINGLE

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


启用/禁用OpenMP的最干净或默认方式是什么?

查看编译器手册中禁用OpenMP的开关。对于GCC,OpenMP在默认情况下被禁用,并通过-fopenmp选项启用


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

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

在头文件中:

#ifndef SINGLETHREADED
#pragma omp
#endif
编译时,添加-dsinglethread以禁用OpenMP:

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

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

OpenMP文档说明(仅为示例):

\ifdef\u OPENMP
#包括
#否则
#定义omp\u get\u thread\u num()0
#恩迪夫

请参阅(条件编译)。

使用“#pragma omp…”编写代码,然后不启用-fopenmp会导致链接错误,如“未定义对GOMP#u parallel_start的引用”,我发现
omp#u set_num_threads(1)
最有用(遗憾的是,我认为不是很优雅)对于我们的项目,我们有一个带OPENMP的布尔构建时选项,用于处理passing-fopenmp和任何定义(如果需要)。我向在项目中使用openmp的任何其他人建议这一点,在不使用openmp的情况下进行测试的能力有时会有助于排除它是导致任何错误的原因。上述条件在不提供else语句的情况下仍然有效。
#ifdef _OPENMP
   #include <omp.h>
#else
   #define omp_get_thread_num() 0
#endif