cudaMemcpy() 与 cudaMemcpyFromSymbol()

标签 cuda

我试图找出为什么 cudaMemcpyFromSymbol() 存在。似乎“symbol” func 可以做的所有事情,nonSymbol cmd 也可以做。

symbol 函数似乎可以轻松移动数组或索引的一部分,但这也可以使用 nonSymbol 函数轻松完成。我怀疑非符号方法会运行得更快,因为不需要符号查找。 (尚不清楚符号查找计算是在编译时还是运行时完成。)

为什么我要使用 cudaMemcpyFromSymbol()cudaMemcpy()?

最佳答案

cudaMemcpyFromSymbol 是从设备内存中静态定义的任何变量进行复制的规范方法。

cudaMemcpy 不能直接用于复制静态定义的设备变量或从静态定义的设备变量复制,因为它需要设备指针,而运行时主机代码并不知道该指针。因此,需要一个可以查询设备上下文符号表的 API 调用。有两种选择:cudaMemcpyFromSymbol(在一次操作中执行符号查找和复制)或cudaGetSymbolAddress(返回可传递给cudaMemcpy的地址) >。如果您只想执行一份副本,则前者可能更有效;如果您想在主机代码中多次使用该地址,则后者可能更有效。

关于cudaMemcpy() 与 cudaMemcpyFromSymbol(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14817186/

相关文章:

caching - CUDA将数据从全局内存中缓存到统一缓存中,存储到共享内存中?

cuda - 防止 CUDA 中的内核调用后析构函数调用

c++ - 使用nsight调试

c++ - 检查 CUDA 存在的程序需要 CUDA?

cuda - OpenCL 和 CUDA 中的持久线程

CUDA 矩阵乘法写入错误的内存位置

c++ - CUDA - 使用共享内存优化矩阵行计算的平均值

cuda - 如何在cuda中编译多个文件?

c++ - 结构的 cudaMalloc 和相同结构的元素

cuda - 如何计算正在启动的 CUDA 线程数?