关于cudaMemcpyToSymbol拷贝数组、结构体出现的问题解决方案
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。错误解决,经测试能够正常传递数组。