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