【发布时间】:2011-06-19 21:07:55
【问题描述】:
我有类似的东西:
__constant__ double PNT[ NUMCOORDS ];__device__ double PNT[ NUMCOORDS ];
取决于一些预处理器选择。然后我使用这个变量:
cudaMemcpyToSymbol("PNT", point, pntSize)
但是,有时(我真的不知道什么时候让我感到困惑)我收到错误消息:
通过字符串名称查找重复的全局变量
在检查 CUDA 错误时。我尝试用PNT 替换"PNT",奇怪的是,这有效:
cudaMemcpyToSymbol(PNT, point, pntSize)
我应该在实践中使用这个解决方案(而不是使用字符串"PNT")吗?
【问题讨论】:
-
我认为如果没有更详细的示例,最好是其他人可以复制的形式,很难说出发生了什么。您是否使用不同的宏设置多次解析文件?也许 nvcc 没有更新一些中间文件,结果它同时拥有 constant 和 device 变量?
-
已经谢谢了;只是一个简短的问题:代码
cudaMemcpyToSymbol(PNT, point, pntSize)100% 正确吗?如果是这样,我会坚持使用它,因为我在使用它时不会遇到任何错误! -
CUDA Library documentation 建议您尝试做的事情是正确的。您可能需要再向该函数传递 2 个参数。但是,我会小心,如果 nvcc 弄乱了变量,它实际上也可能在这个函数中弄乱,通过将数据复制到不正确的目的地。
-
好的,谢谢,我会调查的,而不仅仅是验证我的程序返回的数据。
-
您是否在头文件中定义了符号并将其包含在两个不同的文件中?
标签: cuda symbols name-lookup