c – cudaMemcpyToSymbol使用或不使用字符串
发布时间:2020-12-16 10:23:56 所属栏目:百科 来源:网络整理
导读:我试图以这种方式将结构复制到常量内存: struct Foo { int a,b,c;};__constant__ Foo cData;int main() { Foo hData = {1,2,3}; cudaMemcpyToSymbol(cData,hData,sizeof(Foo)); // ...} 这工作正常,在我的内核中我可以直接访问常量数据: __global__ void k
我试图以这种方式将结构复制到常量内存:
struct Foo { int a,b,c; }; __constant__ Foo cData; int main() { Foo hData = {1,2,3}; cudaMemcpyToSymbol(cData,&hData,sizeof(Foo)); // ... } 这工作正常,在我的内核中我可以直接访问常量数据: __global__ void kernel() { printf("Data is: %d %d %dn",cData.a,cData.b,cData.c); // 1 2 3 } 但后来我尝试使用const char *作为符号名称,事情停止了: cudaMemcpyToSymbol("cData",sizeof(Foo)); // prints 0 0 0 我认为两个版本都相似,但似乎我错了. 怎么了? 编辑: __constant__ int someData[10]; __constant__ int *ptrToData; int *dataPosition; cudaGetSymbolAddress((void **)&dataPosition,someData); // Works // cudaGetSymbolAddress((void **)&dataPosition,"someData"); // Do not work cudaMemcpyToSymbol(ptrToData,&dataPosition,sizeof(int *)); 解决方法
从CUDA 5开始,不再支持使用字符串作为符号名称.这在CUDA 5发行说明
here中有所介绍
其中一个原因与启用真正的设备链接器有关,这是CUDA 5中的新功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |