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

时间:2013-04-13 06:20:24

标签: cuda

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

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

1 个答案:

答案 0 :(得分:23)

简而言之,因为cudaMemcpy无法在没有额外API调用的情况下执行与cudaMemcpyToSymbol相同的操作。考虑一个常量内存数组:

__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是非法的。

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