2010-10-08 45 views
0
struct d_struct { 
// stuff 
}; 

__device__ __constant__ d_struct structs[SIZE]; 

当我打电话CUDA不断内存无效符号

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

在主机内存中,我得到一个invalid device symbol CUDA错误。

+0

版本/操作系统?请确保总体结构的大小小于常量内存的大小 – fabrizioM 2010-10-11 17:16:24

回答

1

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

与此同时,一些建议:

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

CUDA Programming Guide v4.2 D.2.2.1,它说,

__device____shared____constant__预选赛不允许在:

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

这不是一个结构数据成员,它是一个结构数组。 – harrism 2012-08-31 07:07:52