CUDA 主機記憶體

2021-10-10 09:47:05 字數 1953 閱讀 9052

系統中被cpu訪問的記憶體,分為兩種型別:可分頁記憶體(pageable memory,一般應用中預設使用)和頁鎖定記憶體(page-locked或者pinned)。

可分頁記憶體即為通過作業系統api(malloc(), new())分配的儲存器空間;而頁鎖定記憶體始終不會被分配到低速的虛擬記憶體中,能夠保證存在於物理記憶體中,並且能夠通過dma加速與裝置端的通訊。

為了讓硬體使用dma,作業系統允許主機記憶體進行頁鎖定,並且因為效能原因,cuda包含了開發者使用這些作業系統工具的api。頁鎖定後的且對映為cuda直接訪問的鎖定的記憶體允許以下幾點:

使用pinned memory有很多好處:可以達到更高的主機-裝置端的資料傳送頻寬,如果頁鎖定記憶體以write-commbined方式分配,頻寬更高;某些裝置支援dma功能,在執行核心函式的同時利用pinned memory進行主機端與裝置端之間的通訊;在某些裝置上,pinned memory還可以通過zero-copy功能對映到裝置位址空間,從gpu直接訪問,這樣就不用在主存和視訊記憶體之間進行資料傳輸。

通過cudahostalloc()和cudafreehost()來分配和釋放pinned memory。

在使用cudahostalloc分配頁鎖定記憶體時,加上cudahostallocportable標誌,可以使多個cpu執行緒通過共享一塊頁鎖定記憶體,從而實現cpu執行緒間的通訊。在預設情況下,pinned memory由哪個cpu執行緒分配,就只有該cpu執行緒才能訪問這塊空間。而通過portable memory則可以讓控制不同gpu的幾個cpu執行緒共享同一塊pinned memory,減少cpu執行緒間的資料傳輸和通訊。

當cpu對一塊記憶體中的資料進行處理時,會將這塊記憶體上的資料快取到cpu的l1、l2 cache中,並且需要監視這塊記憶體中資料的更改,以保證快取的一致性。

一般情況下,這種機制可以減少cpu對記憶體的訪問,但在「cpu生產資料,gpu消費資料」模型中,cpu只需要寫這塊記憶體資料即可。此時不需要維護快取一致性,對記憶體的監視反而會降低效能。

通過write-combined memory,就可以不使用cpu的l1、l2 cache對一塊pinned memory中的資料進行緩衝,而將cache資源留給其他程式使用。

write-combined memory在pci-e匯流排傳輸期間不會被來自cpu的監視打斷,可以將主機端-裝置端傳輸頻寬提高多達40%。

在呼叫cudahostalloc()時加上cudahostallocwritecombined標誌,就可以將一塊pinned memory宣告為write-combined memory.

由於對write-combined memory的訪問沒有快取,cpu從write-combined memory上讀資料時速度會有所下降。因最好只將cpu端只寫的資料存放在write-combined memory中。

注意:

鎖頁記憶體註冊將記憶體分配與頁鎖定和主機記憶體對映分離。可以實現操作乙個已分配的虛擬位址範圍,並頁鎖定它。然後,將其對映給gpu,正如cudahostalloc()可以根據需要讓記憶體對映到cuda位址空間或變成可共享的(所有gpu可訪問)。

函式cumemhostregister()/cudahostregister()cumemhostunregister()/cudahostunregister()分別實現吧主機記憶體註冊為鎖頁記憶體和移除註冊的功能。

註冊的記憶體範圍必須是頁對齊的;無論是基位址還是大小,都必須是可被作業系統頁面大小整除。

注意:

當uva(同一虛擬定址)有效,所有的鎖頁記憶體分配均是對映的和可共享的。這一規則的例外是寫結合記憶體和註冊的記憶體。對於這二者,裝置指標可能不同於主機指標,應用程式需要使用cudahostgetdevicepointer()/cumemhostgetdevicepointer()查詢裝置指標。

檢視主機記憶體

一 檢視程序cpu及記憶體方法 1.先確定程序號 2.top p 程序號 關注內容解釋中的背景色標明的物理記憶體占用,cpu占用百分比,mem占用百分比即可。此值即為程序所消耗資源。內容解釋 pid 程序的id user 程序所有者 pr 程序的優先級別,越小越優先被執行 ninice 值 virt...

oracle安裝主機記憶體減少後啟動失敗

oracle安裝主機記憶體減少後啟動失敗 最近宿主機資源緊張,想給虛擬機器 縮容 強行調小記憶體配置,由原來分配的4g調整為2g,虛擬機器能正常開啟,但啟動oracle資料庫時,懵逼了,失敗!直接報錯如下 ora 00845 memory target not supported on this s...

小型機記憶體與pc機記憶體區別

小型機記憶體與pc機記憶體區別 小型機 記憶體型別 小型機記憶體也是記憶體 ram 它與普通pc 個人電腦 機內存在外觀和結構上沒有什麼明顯實質性的區別,主要是在記憶體上引入了一些新的特有的技術,如ecc chipkill 熱插拔技術等,具有極高的穩定性和糾錯效能。伺服器及小型機記憶體主要技術 1 ...