c – cudaMemcpyToSymbol使用或不使用字符串

c – cudaMemcpyToSymbol使用或不使用字符串,第1张

概述我试图以这种方式将结构复制到常量内存: struct Foo { int a, b, c;};__constant__ Foo cData;int main() { Foo hData = {1, 2, 3}; cudaMemcpyToSymbol(cData, &hData, sizeof(Foo)); // ...} 这工作正常,在我的内核中我可以直 我试图以这种方式将结构复制到常量内存:

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使用或不使用字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1219858.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存