gpt4 book ai didi

linker - nvcc:结合外部和常量

转载 作者:行者123 更新时间:2023-12-04 19:08:10 28 4
gpt4 key购买 nike

我想将我的 CUDA 代码组织成单独的目标文件,以便在编译结束时进行链接,就像在 C++ 中一样。为此,我希望能够声明一个指向 __constant__ 的外部指针。内存在头文件中,并将定义放在 .cu 文件之一中,也遵循 C++ 的模式。但似乎当我这样做时,nvcc 忽略了“extern”——它把每个声明都作为一个定义。有没有解决的办法?

为了更具体地了解代码和错误,我在头文件中有这个:

extern __device__ void* device_function_table[];

然后在 .cu 文件中:
void* __device__ device_function_table[200];

这在编译时会出现此错误:
(path).cu:40: error: redefinition of ‘void* device_function_table [200]’
(path).hh:29: error: ‘void* device_function_table [200]’ previously declared here

我目前的解决方案是使用 Makefile 魔法将我所有的 .cu 文件组合在一起,实际上有一个大的翻译单元,但文件组织有些类似。但这已经显着减慢了编译速度,因为对我的任何一个类进行更改都意味着重新编译所有类;我预计会添加更多类(class)。

编辑:我看到我放了 __constant__在正文和 __device__在示例中;这个问题适用于两者。

最佳答案

长话短说,使用最近的 CUDA 工具包(我在 v8 上)和至少 2.0 的计算能力,在 Visual Studio 中,转到 Project Properties -> CUDA C/C++ -> Common ,在中找到“生成可重定位设备代码”列表,将其设置为“是(-rdc=true)”。

对于命令行 this page建议 –dc编译器选项

关于linker - nvcc:结合外部和常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7959174/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com