是否可以在 CUDA 文件中使用 openMP 编译指示(而不是在内核代码中)?
我将结合GPU和CPU计算。但是,如果我将程序与 openmp 选项链接(在 Linux 下),nvvc 编译器会失败,并显示“无法找到未知选项‘openmp’”
一种解决方法是仅在 c/c++ 文件中使用 openMP 语句。
我刚刚发现这个
http://www.cse.buffalo.edu/faculty/miller/Courses/CSE710/heavner.pdf
第25页说:
- 使用海湾合作委员会:
#include
omp.h
添加
[原文如此] 标志-fompenmp
- 对于 nvcc,这应该是
,因为这需要直接传递给 gcc-Xcompiler -fopenmp
将标志直接传递给主机编译器-Xcompiler
在链接阶段添加
标志。-lgomp
我还没试过...
我尝试在“附加编译器选项”中写入参数,但没有成功。
我为 Visual Studio 2010 和 CUDA 4.2 所做的事情:
在项目属性 -> 配置属性 -> CUDA C/C++ -> 命令行 -> 其他选项中: -X编译器“/openmp”
这导致生成的构建命令中有两个 -Xcompiler 参数,但没有引起任何问题并且工作成功。
从nvidia-forum找到的Visual Studio的解决方案:
将“/openmp”标志添加到 cuda 构建规则中的额外 C++ 选项中。稍后我会尝试linux解决方案。
我必须将
-Xcompiler=-fopenmp
作为编译选项添加到我的 CMakeLists.txt 文件中,以使用 OpenMP 指令构建 CUDA 主机代码:
# your CMakeLists.txt should contain something like this already
project(<project> Languages CXX CUDA)
find_package(CUDA REQUIRED)
find_package(OpenMP)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
# the following line was also necessary
target_compile_options(<target> PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: -Xcompiler=-fopenmp>)