cudaMemcpyToSymbol与cudaMemcpy为何仍然存在(cudaMemcpyToSymbol)

rub*_*buc 10 cuda

如其他问题所述并根据链接,您不能再使用此功能的符号名称.现在该功能已经消失,什么时候才能使用它cudaMemCpy?你什么时候想要使用它?什么是权衡或利益?

http://developer.download.nvidia.com/compute/cuda/4_1/rel/toolkit/docs/online/group_ CUDART _MEMORY_gf268fa2004636b6926fdcd3189152a14.html

tal*_*ies 25

简而言之,因为没有额外的API调用cudaMemcpy就无法做同样的事情cudaMemcpyToSymbol.考虑一个常量内存数组:

__constant__ float coeffs[8];
Run Code Online (Sandbox Code Playgroud)

要使用cudaMemcpyToSymbol,请将值复制到此数组

cudaMemcpyToSymbol(coeffs, hostData, 8*sizeof(float));
Run Code Online (Sandbox Code Playgroud)

要做到cudaMemcpy这一点需要这个:

float *dcoeffs;
cudaGetSymbolAddress((void **)&dcoeffs, coeffs);
cudaMemcpy(dcoeffs, hostData, 8*sizeof(float), cudaMemcpyHostToDevice);
Run Code Online (Sandbox Code Playgroud)

cudaMemcpy没有先前的符号查找,直接调用是非法的.

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

  • `__constant__`是CUDA中的存储类说明符,表示符号位于GPU DRAM的特殊缓存只读部分.它完全独立于const.您可以使用`&coeffs`因为这意味着主机内存中符号*的地址*而不是GPU内存,这就是API调用所需要的 (3认同)