映射内存和gpu :: CudaMem用法

时间:2014-02-10 22:18:45

标签: opencv cuda gpu

我想知道是否可以避免gpu和设备之间的内存传输。我最近读过映射内存用于此目的,如果我错了请纠正我。

  1. 可以分配多少映射内存?
  2. 当我们使用映射内存时,gpu的全局内存保持未使用状态?
  3. 我们可以在中使用gpu::GpuMat,而不是在opencv中ALLOC_ZEROCOPY上传数据 gpu::CudaMem可以像this一样节省上传时间?
  4. 如果是的话,你能举个例子吗?
  5. 谢谢!

1 个答案:

答案 0 :(得分:4)

  

可以分配多少映射内存?

这取决于操作系统和可用的物理内存量。 CUDA驱动程序从操作系统非页面缓冲池中分配映射内存。例如,对于64位Windows 7,这可以高达物理内存的75%或128GB,以较小者为准。有关详细信息,请参阅http://blogs.technet.com/b/markrussinovich/archive/2009/03/26/3211216.aspx

  

当我们使用映射内存时,gpu的全局内存保持未使用状态?

对于问题隐含的独立GPU,GPU内存保持未使用状态。请参阅NVIDIA关于映射和固定内存的白皮书:https://devtalk.nvidia.com/cmd/default/download-comment-attachment/50683/

  

我们可以在opencv中使用ALLOC_ZEROCOPY而不是在opencv中的gpu :: GpuMat中上传数据   gpu :: CudaMem可以节省上传时间吗?

“zerocopy”缓冲区被映射和固定。请记住,在分配映射和固定内存时,内存配置的物理实际情况不会发生变化。对于独立GPU,仍然必须通过PCI或PCIe总线将数据从主机复制到设备。它只是隐式而不是明确地发生。您可以编写更少的代码,但可能无法提高性能(在独立的GPU上)。

  

如果是的话,你能举个例子吗?

无法帮助你。