5
正如其他问题所述,根据链接,您不能再使用该函数的符号名称。现在这个功能已经不存在了,什么时候会想要使用cudaMemCpy
?你什么时候想要使用它?什么是权衡或利益?cudaMemcpyToSymbol vs cudaMemcpy它为什么还在(cudaMemcpyToSymbol)
正如其他问题所述,根据链接,您不能再使用该函数的符号名称。现在这个功能已经不存在了,什么时候会想要使用cudaMemCpy
?你什么时候想要使用它?什么是权衡或利益?cudaMemcpyToSymbol vs cudaMemcpy它为什么还在(cudaMemcpyToSymbol)
总之,因为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
是非法的,没有先前的符号查找。
[标准免责声明:写在浏览器中无法获得的文档或编译器的所有代码,在风险自负]
TY,什么是方法签名为const __constant__'内存和参数指针类型之间'的关系。 “__constant__”是否有指向const的指针,因为它是类型的?另外,为什么你不能只是采取&coeffs来获得地址? – rubixibuc
'__constant__'是CUDA中的存储类说明符,表示该符号位于GPU DRAM的特殊高速缓存只读部分。它完全独立于const。你可以使用'&coeffs',因为这意味着主机内存中的符号*的地址*不是GPU内存,这是API调用的要求 – talonmies
指针变量coeffs指向的地址在哪里?地址直接记忆?这是否也适用于用'__device__'声明的变量? – rubixibuc