我想知道是否可以避免gpu和设备之间的内存传输。我最近读过映射内存用于此目的,如果我错了请纠正我。
gpu::GpuMat
,而不是在opencv中ALLOC_ZEROCOPY
上传数据
gpu::CudaMem可以像this一样节省上传时间? 谢谢!
答案 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上)。
如果是的话,你能举个例子吗?
无法帮助你。