关于cudaMemcpyToSymbol拷贝数组、结构体出现的问题解决方案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

全局变量

__device__, __share__, __constant___要使用cudaMemcpyToSymbol进行赋值,cudaMemcpyFromSymbol进行从设备的数值读取,cudaMemcpy只适合本地host中变量的赋值和读取。

在函数体外声明的变量默认为__device__类型,即全局变量类型。

还需注意,对于__constant__类型,不允许动态分配内存。即__constant__ * pointer 为错误的。

但是可以__constant__ pointer[NUM];

同理,__constant__类型变量不能被执行cudamalloc,cudafree函数

在对__cosntant__ float pionter[NUM],使用cudaMemcpyToSymbol进行赋值时,出现invalid device symbol错误,查看电脑显卡版本(GPU SDK C/bin/realease 64/deviceQuery.exe),查得自己的显卡支持2.1,于是将项目属性中cuda的device下generate code 由compute_10,sm_10编译参数生成代码改为compute_20, sm_20。错误解决,经测试能够正常传递数组。

相关文档
最新文档