CUDA下在Host端分配的几种内存模式
CUDA下在Host端分配的幾種內(nèi)存模式
0條評論 2009-11-27 11:21 ??IT168網(wǎng)站原創(chuàng) 作者: 關(guān)鑫的博客 編輯: 覃里【IT168 文檔】Pageable VS Pinned
平時我們使用的內(nèi)存都是Pageable(交換頁)的,而另一個模式就是Pinned(Page-locked),實質(zhì)是強(qiáng)制讓系統(tǒng)在物理內(nèi)存中完成內(nèi)存申請和釋放的工作,不參與頁交換,從而提高系統(tǒng)效率,需要使用cudaHostAlloc和cudaFreeHost來分配和釋放。
優(yōu)點
1、帶寬更高
2、內(nèi)核處理和內(nèi)存拷貝可同時進(jìn)行
3、可以內(nèi)存映射(mapped)
缺點
使用pinned會減少系統(tǒng)內(nèi)存的可用量,進(jìn)而影響系統(tǒng)性能。
在Pinned模式下又有以下幾種屬性:
Write-combining
缺省的話pinned擁有cacheable屬性,可以用cudaHostAllocWriteCombined標(biāo)志替代
優(yōu)點
1、可以釋放L1和L2資源,讓緩存應(yīng)用于別的地方
2、write-combining在通過PCIE總線傳輸時不會被檢測,大約可提高
40%的性能
缺點
無法讀取或讀取極慢。
Portable
對于多線程,只能分配pinned的線程可以得到好處,如果想讓別的線程也共享,需要cudaHostAllocPortable標(biāo)志。
Mapped
傳入cudaHostAllocMapped標(biāo)識可以讓宿主與設(shè)備內(nèi)存映射(某些設(shè)備支持),這樣設(shè)備和宿主共用一塊內(nèi)存,在內(nèi)核函數(shù)中可以用cudaHostGetDevicePointer得到指針,不同的宿主線程得到的指針是不同的。
優(yōu)點
不用在設(shè)備中分配和拷貝內(nèi)存,數(shù)據(jù)在需要的時候被內(nèi)核隱式傳輸
不需要用Stream來異步執(zhí)行,內(nèi)核函數(shù)自動在執(zhí)行的同時異步傳輸
缺點
由于內(nèi)存共享,內(nèi)存訪問必須同步
總結(jié)
以上是生活随笔為你收集整理的CUDA下在Host端分配的几种内存模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是安斯库姆四重奏?为什么统计分析之前
- 下一篇: OpenCV掩码、blending、改变