1

我正在使用 CUDA 5.0,并且我有单独编译的模块。我想从所有模块访问常量内存中的相同值。问题如下,当我在每个模块中定义符号时,链接器声称该符号已被重新定义。是否有解决此问题的解决方法或解决方案?感谢您的帮助。

4

1 回答 1

3

在 CUDA 单独编译模式下,有一个真正的链接器,并且链接到最终设备二进制有效负载中的每个符号都是唯一定义的。这意味着 __constant__ 内存符号只能在链接在一起的所有代码中的一个位置定义。

解决方案可能是将符号声明为extern在每个翻译单元范围内,除了一个,其中包含符号的定义。请注意,这是唯一可以将 extern 与 __constant__ 符号一起使用的情况,否则它们是隐式静态的。对单独的编译模型进行了一般性讨论,该模型描述了隐藏在文档中的这种情况(编程指南和 nvcc 手册 IIRC)。

于 2013-08-14T10:48:47.143 回答