使用 OpenMP 支持编译和链接 CUDA 源文件

发布于 2024-09-09 03:10:20 字数 192 浏览 4 评论 0原文

是否可以在 CUDA 源文件(而不是内核代码)中使用 OpenMP 编译指示?

我将结合 GPU 和 CPU 计算。但是,当我使用 openmp 选项(在 Linux 下)链接程序时,nvcc 编译器失败,并显示“找不到未知选项 'openmp'”。

解决方法是仅在 C/C++ 文件中使用 OpenMP 编译指示。

It it possible to use OpenMP pragmas in CUDA source files (not in kernel code)?

I will combine GPU and CPU computation. But the nvcc compiler fails with "cannot find Unknown option 'openmp'", when I link the program with an openmp option (under Linux).

A workaround is to use OpenMP pragmas only in C/C++ files.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

海风掠过北极光 2024-09-16 03:10:20

我刚刚找到了这个

http://www.cse。 buffalo.edu/faculty/miller/Courses/CSE710/heavner.pdf

第25页说:

  • 使用海湾合作委员会:
    • #include omp.h

    • 添加 -fompenmp [sic] 标志

      • 对于 nvcc,这应该是 -Xcompiler -fopenmp 因为这需要直接传递给 gcc
      • -Xcompiler 将标志直接传递给主机编译器
    • 在链接阶段添加 -lgomp 标志。

请注意第三行中 -fopenmp 的拼写错误。

I've just found this

http://www.cse.buffalo.edu/faculty/miller/Courses/CSE710/heavner.pdf

Page 25 says:

  • With gcc:
    • #include omp.h

    • Add the -fompenmp [sic] flag

      • With nvcc, this should be -Xcompiler -fopenmp as this needs to be passed directly to gcc
      • -Xcompiler passes flags directly to host compiler
    • Add -lgomp flag during the linking stage.

Note the misspelling of -fopenmp in the third line.

蓦然回首 2024-09-16 03:10:20

我尝试在“附加编译器选项”中写入参数,但它不起作用。

我对 Visual Studio 2010 和 CUDA 4.2 所做的操作:

在项目属性中 ->配置属性-> CUDA C/C++ ->命令行 ->附加选项:
-Xcompiler "/openmp"

这导致生成的构建命令中有两个 -Xcompiler 参数,但没有引起任何问题并且工作成功。

I tried writing the parameter in "Additional Compiler Options" but it didn't work.

What I did for Visual Studio 2010 and CUDA 4.2:

In Project Properties -> Configuration Properties -> CUDA C/C++ -> Command Line -> Additional Options:
-Xcompiler "/openmp"

This resulted in two -Xcompiler parameters in the resulting build command but did not cause any problems and worked successfully.

涫野音 2024-09-16 03:10:20

使用 CMake 构建

我必须将 -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 
lt;
lt;COMPILE_LANGUAGE:CUDA>: -Xcompiler=-fopenmp>)

Building with CMake

I had to add -Xcompiler=-fopenmp as an compile option to my CMakeLists.txt file to build CUDA host code with OpenMP directives:

# 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 
lt;
lt;COMPILE_LANGUAGE:CUDA>: -Xcompiler=-fopenmp>)
猫烠⑼条掵仅有一顆心 2024-09-16 03:10:20

从 nvidia-forum 找到的 Visual Studio 解决方案:

将“/openmp”标志添加到 cuda 构建规则中的 Extra C++ 选项中。稍后我会尝试linux解决方案。

The solution for the Visual Studio found from the nvidia-forum:

add the '/openmp'-flag to the Extra C++ Options in cuda build rules. I will try the linux solution later.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文