OpenCL2.0特性之SVM
from: http://blog.csdn.net/hdanbang/article/details/50198415
在OpenCL2.0中,增加了SVM(shared virtual memory)的特性。在開始講解SVM之前,我們先用圖片來看下OpenCL1.2中主機與設(shè)備端的地址空間:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖1 OpenCL1.2中主機與設(shè)備端地址空間
? ? ? ? 從圖1可以看到,主機與設(shè)備具有不同的地址空間,各自需要對各自的內(nèi)存進(jìn)行管理。彼此之間不能直接訪問對方的地址空間。所以,兩者之間數(shù)據(jù)需要通信的話,只能把數(shù)據(jù)在主機與設(shè)備間來回拷貝,或者把設(shè)備端地址空間map /unmap到主機端。對于這樣一種模式下,如果我們要想在設(shè)備端處理主機端的鏈表、樹之類的數(shù)據(jù)。我們只能鞭長莫及!對于異構(gòu)平臺,我們就真的沒辦法愉快地處理鏈表之類的數(shù)據(jù)么?技術(shù)是發(fā)展的,有需求就必有技術(shù)來解決!
? ? ?從CUDA6以后,GPU與CPU之間支持統(tǒng)一尋址(Unified Memory) ?,GPU與CPU間可以直接訪問彼此的地址空間,不需要我們?nèi)藶榈臄?shù)據(jù)拷貝。這給異構(gòu)計算又帶入了一個新的高度,我們可以處理鏈表數(shù)據(jù)啦!既然CUDA都開始支持了,OpenCL也不能落后呀。在OpenCL2.0中,增加了共享虛擬內(nèi)存(shared virtual memory),我們還是以一張圖片來形象的描述:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2?OpenCL2.0中主機與設(shè)備端地址空間
? ? ? 從圖2可以看到,圖1中原來兩個彼此不相交的地址空間現(xiàn)在有個公共交集,這個公共交集就是SVM.。對于SVM的地址空間,主機和設(shè)備都可以直接訪問,媽媽再也不用擔(dān)心異構(gòu)平臺的數(shù)據(jù)訪問方式了!
說完了SVM的意義,我們來聊聊SVM的具體細(xì)節(jié)。
? ? ? ? 對于SVM的創(chuàng)建,OpenCL2.0中有兩種方式,一種緩沖分配(buffer allocation),另一種是系統(tǒng)分配(System allocation):
? ? ? ? 1、所謂緩沖分配,就是我們使用OpenCL API函數(shù)clSVMAlloc來分配,然后使用clSetKernelArgSVMPointer把分配的SVM作為內(nèi)核參數(shù)傳入
? ? ? ? ?2、所謂系統(tǒng)分配,就是在主機端,我們可以使用malloc,new之類的系統(tǒng)分配內(nèi)存函數(shù)來分配空間,然后使用clSetKernelArgSVMPointer把分配的SVM作為內(nèi)核參數(shù)傳入。
? ? ? ? 對于SVM的類型,OpenCL2.0也是有兩種類型:一種是粗粒度;另一種是細(xì)粒度:
? ? ? ? 1、粗粒度SVM:共享發(fā)生在OpenCL緩沖內(nèi)存對象區(qū)域粒度。在同步點強制內(nèi)存一致性,使用map/unmap命令來更新主機與設(shè)備間的數(shù)據(jù)。粗粒度的SVM與OpenCL1.2中使用緩沖對象類似,不過唯一不同的是:我們不需要來回拷貝數(shù)據(jù),設(shè)備與主機可以直接訪問對方的數(shù)據(jù),這才是重點!
? ? ? ?2、所謂細(xì)粒度SVM:共享發(fā)生在OpenCL緩沖對象單個的加載/存儲粒度。內(nèi)存一致性在同步點得到保證。
? ? ? ? 好,結(jié)合SVM分配方式和SVM類型,可以把OpenCL2.0中的SVM分為:粗粒度緩沖SVM,細(xì)粒度緩沖SVM,細(xì)粒度系統(tǒng)SVM。(木有粗粒度系統(tǒng)SVM)。對于你的OpenCL設(shè)備(請確保你的設(shè)備支持OpenCL2.0),到底支持上述三種的哪三種呢?我們可以通過如下代碼查詢:
? ? ? ? ?
[cpp] view plaincopy
[html] view plaincopy
? ? ? 粗粒度緩沖SVM和細(xì)粒度緩沖SVM大致用法,如下表格所示
| [cpp] view plaincopy | [cpp] view plaincopy |
具體的SVM例子,請移步這里。
OpenCL2.0 SVM的講解,就到這吧!
?ps:最后嘮叨一句:對于SVM,方便了我們碼農(nóng)編程,從硬件上來說,OpenCL設(shè)備與主機不一定是共享物理內(nèi)存的。
總結(jié)
以上是生活随笔為你收集整理的OpenCL2.0特性之SVM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详细程序注解学OpenCL一 环境配置和
- 下一篇: CSDN技术主题月----“深度学习”代