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