cudaMemcpyToSymbol vs.cudaMemcpy为什么它仍然存在(cudaMemcpyToSymbol)

cudaMemcpyToSymbol vs.cudaMemcpy为什么它仍然存在(cudaMemcpyToSymbol),cuda,Cuda,如其他问题和链接所述,您不能再使用此函数的符号名称。现在,该功能已经消失,您什么时候会希望通过cudaMemCpy使用该功能?你什么时候想用它?折衷或好处是什么 简而言之,因为cudaMemcpy不需要额外的API调用,就不能做与cudaMemcpyToSymbol相同的事情。考虑一个常量内存数组: __constant__ float coeffs[8]; 要使用cudaMemcpyToSymbol将值复制到此数组,只需执行以下操作 cudaMemcpyToSymbol(coeffs, ho

如其他问题和链接所述,您不能再使用此函数的符号名称。现在,该功能已经消失,您什么时候会希望通过
cudaMemCpy
使用该功能?你什么时候想用它?折衷或好处是什么


简而言之,因为
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
是非法的


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

ty,方法签名中的
\uuuuuuuu constant\uuuuuuu内存和指向const的参数类型指针之间的关系是什么。
\uuuuuuu常量\uuuuuuu
是否将指针指向常量作为其类型?另外,为什么不能直接使用&coefs来获取地址?
\uuuuu constant\uuuuu
是CUDA中的存储类说明符,表示符号位于GPU DRAM的特殊缓存只读部分。它完全独立于常数。您不能使用
&coefs
,因为这意味着主机内存中符号的地址不是GPU内存,这是API调用所需的地址指针变量coefs中的地址指向哪里,指向该地址的副本会将内存指向哪里?这是否也适用于使用
\uuuu device\uuuu
声明的变量?通过CUDA API复制到该地址将失败,并出现无效参数错误,因为它不是API先前分配的GPU内存空间中的地址。是的,这也适用于通用的
\uuuu设备\uuu
指针和静态声明的设备符号。API是否区分使用指针的设备地址和使用cudaGetSymbolAddress的非指针设备变量。调用时,它是采用内存中实际指针变量的地址,还是采用指向内存的起始地址?这与获取标准int设备变量的地址相比如何?