2012-07-06 145 views
8

系統內存(RAM)如何映射以進行GPU訪問?我很清楚虛擬內存是如何工作在CPU上的,但我不確定當GPU訪問GPU映射系統內存(主機)時該如何工作。基本上與數據如何從系統內存複製到主機內存有關,反之亦然。你能否提供參考文章支持的解釋?GPU - 系統內存映射

回答

10

我發現下面的slideset非常有用:聚變APUS 零拷貝 皮埃爾Boudier AMD 研究員的OpenGL/OpenCL的 格雷厄姆賣方 AMD 經理的OpenGL

的好處 http://developer.amd.com/afds/assets/presentations/1004_final.pdf

存儲器系統

AMD Fusion Developer Summit 2011年6月

但請注意,這是一個快速移動的REA。與(最終)將諸如虛擬內存這樣的概念應用於GPU相比,並不是開發新概念。讓我總結一下。

在過去,比如2010年之前,GPU通常是獨立的PCI或PCI -presspress卡或主板。他們在GPU卡上安裝了一些DRAM。這種機載DRAM速度非常快。他們也可以通過PCI上的DMA拷貝引擎訪問CPU端的DRAM。 GPU像這樣訪問CPU內存通常很慢。

GPU內存未被分頁。對於這個問題,GPU內存通常是未緩存的,除了GPU內的軟件管理緩存之外,就像紋理緩存一樣。 「軟件管理」意味着這些緩存不是緩存一致的,必須手動刷新。

通常,只有一小部分CPU DRAM被GPU訪問 - 一個光圈。通常,它被固定 - 不受分頁。通常,甚至不受虛擬地址轉換的影響 - 通常是虛擬地址=物理地址,也可能是一些偏移量。 (當然,CPU內存的其餘部分是正確的虛擬內存,分頁,翻譯和緩存,只是GPU不能安全地訪問它,因爲GPU確實(沒有)訪問虛擬內存子系統和高速緩存一致性系統

現在,上述工作,但它是一個痛苦。在CPU內部的第一件事,然後在GPU內部運行緩慢。容易出錯。並且很大的安全風險:用戶提供的GPU代碼經常可以訪問(緩慢和不安全)所有CPU DRAM,因此可能被惡意軟件使用

AMD已經宣佈了一個更緊密集成GPU和CPU的目標,其中一個步驟是創建「融合」APU,包含CPU和GPU的芯片。 (英特爾已經完成了與Sandybridge的類似工作;我期望ARM也這樣做)。

AMD也宣佈他們打算讓GPU使用虛擬內存子系統並使用緩存。 AMD IOMMU向使GPU使用虛擬內存的方向邁出了一步。英特爾有類似的。儘管IOMMU更多地面向虛擬機,而非虛擬機操作系統的虛擬內存。

CPU和GPU位於同一芯片內的系統通常使CPU和GPU訪問相同的DRAM芯片。所以不再有「GPU上」和「GPU外」的DRA​​M。

但是,系統主板上的DRAM通常仍然存在拆分,分區到主要由CPU使用的內存以及主要由GPU使用的內存。即使內存可能存在於相同的DRAM芯片內部,通常很大一塊是「圖形」。在上面的文件中,由於歷史原因,它被稱爲「本地」內存。 CPU和圖形內存可能會有不同的調整 - 通常GPU內存的優先級較低,除了視頻刷新,並具有較長的突發。

在本文中,我指的是,有不同的內部總線:洋蔥爲「系統」內存,「大蒜」爲更快訪問圖形內存分區。大蒜內存通常是未緩存的。

我提到的論文討論了CPU和GPU如何具有不同的頁表。他們的副標題「零複製的好處」是指將CPU數據結構映射到GPU頁面表中,這樣就不需要複製它。

等等等等,

系統的這個區域正在迅速發展,所以2011年的文件已經過時差不多。但是你要注意趨勢

(一)軟件WANTS統一訪問CPU和GPU內存 - 虛擬內存和緩存

(B),雖然硬件試圖提供(一),特殊圖形內存功能幾乎總是可以製作專用的圖形內存,即使只是相同DRAM的一個分區,顯着更快或更省電。

差距可​​能在縮小,但是每當您認爲它即將消失時,就可以播放另一個硬件技巧。