
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 %d\n",cdata.a,cdata.b,cdata.c); // 1 2 3} 但后来我尝试使用const char *作为符号名称,事情停止了:
cudamemcpyToSymbol("cdata",sizeof(Foo)); // prints 0 0 0 我认为两个版本都相似,但似乎我错了.
怎么了?
编辑:
我想用cudaGetSymbolAddress报告这个相同的行为,如果没有使用const char *,它对我有用:
__constant__ int someData[10];__constant__ int *ptrToData;int *dataposition;cudaGetSymbolAddress((voID **)&dataposition,someData); // Works// cudaGetSymbolAddress((voID **)&dataposition,"someData"); // Do not workcudamemcpyToSymbol(ptrToData,&dataposition,sizeof(int *));解决方法 从CUDA 5开始,不再支持使用字符串作为符号名称.这在CUDA 5发行说明 here中有所介绍
•The use of a character string to indicate a device symbol,which was possible with certain API functions,is no longer supported. Instead,the symbol should be used directly.
其中一个原因与启用真正的设备链接器有关,这是CUDA 5中的新功能.
总结以上是内存溢出为你收集整理的c – cudaMemcpyToSymbol使用或不使用字符串全部内容,希望文章能够帮你解决c – cudaMemcpyToSymbol使用或不使用字符串所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)