首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我在编译包含用nvcc编译的.cu文件和用gcc编译的.cpp文件的代码时遇到问题。

我在编译包含用nvcc编译的.cu文件和用gcc编译的.cpp文件的代码时遇到问题。
EN

Stack Overflow用户
提问于 2019-02-08 03:50:13
回答 1查看 669关注 0票数 0

我有一个相当大的C++代码(超过60个单独的文件),我正在尝试使用CUDA-9框架将一些计算切换到GPU。使用gcc (V7),代码通常编译得很好。作为练习,我将其中一个源文件的扩展名从.cpp更改为.cu,但没有更改其中的任何代码。我运行make,它用g++编译.cpp文件,用nvcc编译.cu文件,然后得到一个可执行文件。然而,当我运行可执行文件时,我几乎立即得到了一个seg错误。不用说,代码在用gcc编译时运行得很好。事实上,它在英特尔编译器上也能很好地编译和运行。这些是传递给nvcc编译器的标志

nvcc -g -Xcudafe "--diag_suppress=code_is_unreachable“-Xcudafe”--diag_suppress=额外的分号“

而g++的标志是

g++ -fPIC -O3 -g -Wno-未使用-变量-Wno-注释-Wno-可能-未初始化-Wno-严格别名-Wno-长-长-Wno-符号-比较-Wno-不推荐使用-f模板-深度-39-Wno-可变-maris -m64

考虑到代码的大小,我希望避免将所有文件重命名为.cu。此外,它依赖于与gcc一起编译的库,因此将整个问题切换到nvcc是不切实际的,更不用说nvcc与gcc相比似乎非常慢。在cuda-9.0/bin中,用于gcc的符号链接指向gcc-7。我还尝试将开关--device-c添加到nvcc,但在本例中它不会链接...任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-08 07:00:42

这听起来确实像是一个链接问题。请在此处查看有关将cuda设备代码与c++代码链接的全面说明:https://devblogs.nvidia.com/separate-compilation-linking-cuda-device-code/

不幸的是,您没有提供链接命令。我会试着让我的建议尽可能笼统。它的不足之处在于,只有nvcc知道如何将设备代码链接到CPU目标代码,因此它需要参与链接过程,而不仅仅是作为编译器。看看上面链接中的“使用设备代码链接”和“高级用法:使用不同的链接器”部分。您可以使用nvcc作为编译器和链接器,也可以使用nvcc使用-dlink选项将组合的cpu和设备代码对象文件链接在一起,然后就可以正常地将所有内容链接在一起。在这两种情况下,您都应该在编译包含设备代码的源文件时将-dc选项传递给nvcc (这表明您希望稍后将设备代码链接在一起)。

还要注意,nvcc可以编译.cpp文件;默认情况下,它将假定.cpp文件只包含cpu-code。您不需要重命名仅用于cpu的源文件即可使用nvcc对其进行编译。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54581216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档