2014-02-10 43 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