1. 程式人生 > >CUDA下在Host端分配的幾種記憶體模式

CUDA下在Host端分配的幾種記憶體模式

平時我們使用的記憶體都是Pageable(交換頁)的,而另一個模式就是Pinned(Page-locked),實質是強制讓系統在實體記憶體中完成記憶體申請和釋放的工作,不參與頁交換,從而提高系統效率,需要使用cudaHostAlloc和cudaFreeHost來分配和釋放。

  優點

  1、頻寬更高

  2、核心處理和記憶體拷貝可同時進行

  3、可以記憶體對映(mapped)

  缺點

  使用pinned會減少系統記憶體的可用量,進而影響系統性能。

  在Pinned模式下又有以下幾種屬性:

  Write-combining

  預設的話pinned擁有cacheable屬性,可以用cudaHostAllocWriteCombined標誌替代

  優點

  1、可以釋放L1和L2資源,讓快取應用於別的地方

  2、write-combining在通過PCIE匯流排傳輸時不會被檢測,大約可提高

  40%的效能

  缺點

  無法讀取或讀取極慢。

  Portable

  對於多執行緒,只能分配pinned的執行緒可以得到好處,如果想讓別的執行緒也共享,需要cudaHostAllocPortable標誌。

  Mapped

  傳入cudaHostAllocMapped標識可以讓宿主與裝置記憶體對映(某些裝置支援),這樣裝置和宿主共用一塊記憶體,在核心函式中可以用cudaHostGetDevicePointer得到指標,不同的宿主執行緒得到的指標是不同的。

  優點

  不用在裝置中分配和拷貝記憶體,資料在需要的時候被核心隱式傳輸

  不需要用Stream來非同步執行,核心函式自動在執行的同時非同步傳輸

  缺點

  由於記憶體共享,記憶體訪問必須同步