我试图弄清楚为什么cudaMemcpyFromSymbol()
存在。似乎'symbol' func 可以做的一切,nonSymbol cmds 可以做。
符号 func 似乎使移动数组或索引的一部分变得容易,但这也可以使用 nonSymbol 函数轻松完成。我怀疑 nonSymbol 方法会运行得更快,因为不需要符号查找。(不清楚符号查找计算是在编译时还是运行时完成的。)
为什么我要使用cudaMemcpyFromSymbol()
vs cudaMemcpy(
)?
我试图弄清楚为什么cudaMemcpyFromSymbol()
存在。似乎'symbol' func 可以做的一切,nonSymbol cmds 可以做。
符号 func 似乎使移动数组或索引的一部分变得容易,但这也可以使用 nonSymbol 函数轻松完成。我怀疑 nonSymbol 方法会运行得更快,因为不需要符号查找。(不清楚符号查找计算是在编译时还是运行时完成的。)
为什么我要使用cudaMemcpyFromSymbol()
vs cudaMemcpy(
)?
cudaMemcpyFromSymbol
是从设备内存中任何静态定义的变量复制的规范方法。
cudaMemcpy
不能直接用于复制到静态定义的设备变量或从静态定义的设备变量复制,因为它需要设备指针,并且在运行时托管代码不知道。因此,需要一个可以查询设备上下文符号表的 API 调用。两种选择是,cudaMemcpyFromSymbol
在一个操作中进行符号查找和复制,或者cudaGetSymbolAddress
返回可以传递给的地址cudaMemcpy
。如果您只想做一个副本,前者可能更有效,如果您想在主机代码中多次使用该地址,则后者可能更有效。