2014-02-10 42 views
1

我想知道是否有可能避免GPU和设备之间的内存传输。我最近读过映射内存就是为了这个目的,如果我错了,请纠正我。映射内存和GPU :: CudaMem使用

  1. 多少映射内存可以分配?
  2. 当我们使用映射内存时,GPU的全局内存不会被使用?
  3. 而不是在OpenCV中上传的gpu::GpuMat数据,我们可以使用ALLOC_ZEROCOPY
    gpu::CudaMem节省上传时间像this
  4. 如果是,请举个例子吗?

谢谢!

回答

4

多少映射内存可以分配?

这取决于操作系统和多少的可用物理内存上。 CUDA驱动程序从OS非分页池中分配映射的内存。例如,对于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/

相反的上传数据在GPU :: GpuMat OpenCV中我们可以使用ALLOC_ZEROCOPY在 GPU :: CudaMem节省上传时间就像这个?

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

如果是的话,请你举一个例子?

不能帮助你在这一个。

+0

在关于ALLOC_ZEROCOPY的回答中,你的意思是说这个内存分配的使用不会像上载时间那样保存?换句话说,通过gpuMatIm.upload(cpuMatIm)上传图片所需的时间无法通过映射内存或固定内存来避免或减少?你说什么_discete_ GPU是什么意思?谢谢! – Thoth

+0

独立GPU具有自己的内存,数据通过PCI总线在GPU上和从GPU上移出。这在桌面系统中很常见,并且对于图形来说更快,因为内存带宽不会与CPU共享。集成GPU与CPU共享内存。通常情况下,BIOS设置了多少系统内存用于GPU。这通常称为共享内存。不要与CUDA共享内存混淆。 –

+0

所以,你的意思是映射内存在非分立GPU和分立GPU中更有用,我们的性能会有小的提升? – Thoth