我有类似的东西:
__constant__ double PNT[ NUMCOORDS ];
__device__ double PNT[ NUMCOORDS ];
取决于一些预处理器选择。然后我使用这个变量:
cudaMemcpyToSymbol("PNT", point, pntSize)
然而,有时(我真的不能说什么时候让我感到困惑)我收到错误消息:
按字符串名称
查找重复的全局变量
检查CUDA错误时。我尝试用"PNT"
替换PNT
,奇怪的是,这有效:
cudaMemcpyToSymbol(PNT, point, pntSize)
Shound我在实践中使用此解决方案(而不是使用字符串"PNT"
)?
答案 0 :(得分:3)
潜在问题与cudaMemcpyToSymbol
无关。您看到的错误是由CUDA运行时搜索您提供的符号时生成的,因为它是在运行代码的上下文中多次定义的。 CUDA运行时版本在检测重复定义方面越来越好(例如__constant__
声明,纹理,__device__
函数)。
解决方案是重构代码,以便只在应用程序中定义一次符号。由于CUDA没有链接器,因此如果在两个文件中定义符号,则不会出现编译时错误。但是,当CUDA运行时将最终链接的应用程序生成的二进制有效负载加载到上下文中时,可能会发生重复的符号冲突,并且可能导致运行时错误。