CUDA常量内存无效符号

时间:2010-10-08 17:52:52

标签: cuda

struct d_struct {
// stuff
};

__device__ __constant__ d_struct structs[SIZE];

当我打电话

cudaMemcpyToSymbol("structs", &h_struct, sizeof(d_struct), index * sizeof(d_struct), cudaMemcpyHostToDevice)

在主机内存的d_struct "h_struct"上,我收到invalid device symbol cuda错误。

2 个答案:

答案 0 :(得分:1)

如果您可以提供更多详细信息,那将有所帮助,例如您运行的平台和主机编译器版本?哪个CUDA工具包版本?什么设备?

与此同时,提出了一些建议:

  • 确保您使用的是最新的CUDA工具包。此时3.1是当前的,3.2是Release Candidate
  • 如果您使用CUDA向导在Windows中运行,请尝试切换到NVIDIA提供的标准规则文件
  • 您是否正在构建正确的计算能力?只需检查您是否正在编译sm_13并在sm_12上运行,例如
  • 您是否从声明常量的同一文件中调用cudaMemcpyToSymbol()?如果没有,那么它应该仍然有效,因为查找是通过名称而不是符号完成的,但检查您是否已将其声明为extern "C"并且您是从C ++调用
  • 鉴于您遗漏了大量代码,最好检查一下 - d_struct是不是模板化了?

答案 1 :(得分:-2)

CUDA Programming Guide v4.2 D.2.2.1中,它表示

  

不允许__device____shared____constant__限定符:

     
      
  • classstructunion数据成员
  •   
  • 形式参数,
  •   
  • 在主机上执行的函数中的局部变量。
  •