2014-12-21 60 views
1

據我所知,cudaMallocManaged無需在主機和設備上顯式分配內存,從而簡化了內存訪問。考慮一下主機內存明顯大於設備內存的情況,比如說16GB主機,這些日子相當普遍的2GB設備。如果我正在處理從外部數據源讀取的大尺寸輸入數據,例如4-5 GB。我是否不得不求助於顯式的主機和設備內存分配(因爲設備內存不足以容納一次)或者CUDA統一內存模型是否有辦法解決這個問題(例如,根據需要自動分配/取消分配)?cudaMallocManaged vs cudaMalloc - 設備內存限制方案

+0

如果訪問模式沒有顯示出大量的重用(或者如果重用可以從GPU的緩存層次結構中得到服務),映射的固定內存可能是一個不錯的選擇。 – ArchaeaSoftware

+0

有趣!但是如文檔所述,如果分配了大量固定內存,它會降低主機系統性能,不是嗎?正如你所說的,當它不顯示大量的重用時,這是一個有效的選擇。謝謝! – mssrivatsa

+0

這取決於系統在做什麼。在我已經完成的測試中(在Windows 7上),在性能開始降低之前,必須鎖定超過一半的系統內存。 – ArchaeaSoftware

回答

5

我被迫訴諸明確的主機和設備內存分配?

你是不是被迫訴諸明確主機和設備內存分配,但你將不得不手動處理分配的內存量。這是因爲,至少在當前硬件上,CUDA統一虛擬內存不允許超額訂購GPU內存。換句話說,一旦分配的內存超過設備上的可用內存,cudaMallocManaged將會失敗。但是這並不意味着你不能使用cudaMallocManaged,它僅僅意味着你必須跟蹤分配的內存量,並且永遠不會超過設備可以支持的數量,通過「流式傳輸」數據而不是一次分配所有內容。

純粹的猜測,因爲我不能爲NVIDIA發言,但我相信這可能是即將到來的硬件的未來改進之一。


事實上,一年上述預測後半,爲CUDA 8,帕斯卡的GPU正在加強與一個頁面出錯的功能,允許內存頁到主機和設備沒有明確的干預之間遷移來自程序員。

+0

謝謝!是的,我的問題是當設備內存不足時,我不得不手動處理內存。這確實是一個很大的改進。 – mssrivatsa