11

正如其他问题和链接所述,您不能再为此功能使用符号名称。现在这个功能已经消失了,什么时候会想用这个cudaMemCpy呢?您什么时候想使用它?权衡或好处是什么?

https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__MEMORY.html#group__CUDART__MEMORY_1g9bcf02b53644eee2bef9983d807084c7

4

1 回答 1

38

简而言之,因为cudaMemcpy不能做与cudaMemcpyToSymbol没有额外 API 调用相同的事情。考虑一个常量内存数组:

__constant__ float coeffs[8];

要使用 将值复制到此数组cudaMemcpyToSymbol,只需执行

cudaMemcpyToSymbol(coeffs, hostData, 8*sizeof(float));

做同样的事情cudaMemcpy需要这样:

float *dcoeffs;
cudaGetSymbolAddress((void **)&dcoeffs, coeffs);
cudaMemcpy(dcoeffs, hostData, 8*sizeof(float), cudaMemcpyHostToDevice);

cudaMemcpy如果没有事先进行符号查找,直接调用是非法的。

[标准免责声明:所有在浏览器中编写的代码,无需访问文档或编译器,使用风险自负]

于 2013-04-13T06:45:17.673 回答