0

我有类似的东西:

  • __constant__ double PNT[ NUMCOORDS ];
  • __device__ double PNT[ NUMCOORDS ];

取决于一些预处理器选择。然后我使用这个变量:

cudaMemcpyToSymbol("PNT", point, pntSize)

但是,有时(我真的不能说什么时候真的让我感到困惑)我收到错误消息:

按字符串名称查找的重复全局变量

检查 CUDA 错误时。我尝试替换"PNT"PNT奇怪的是,这有效:

cudaMemcpyToSymbol(PNT, point, pntSize)

我应该在实践中使用这个解决方案(而不是使用字符串"PNT")吗?

4

1 回答 1

3

根本问题与cudaMemcpyToSymbol. 您看到的错误是由 CUDA 运行时在搜索您提供的符号时生成的,因为它是在您的代码运行的上下文中多次定义的。__constant__CUDA 运行时版本在检测重复定义(如声明、纹理、__device__函数等)方面越来越好。

解决方案是重构您的代码,以便符号在应用程序中只定义一次。因为 CUDA 没有链接器,所以如果您在两个文件中定义一个符号,就不会出现编译时错误。但是,当 CUDA 运行时将生成的二进制有效负载从最终链接的应用程序加载到上下文中时,可能会发生重复符号冲突并导致运行时错误。

于 2011-06-21T06:05:09.997 回答