CUDA與OpenCL之間的差異

CUDA和OpenCL都是實現(xiàn)計算機異構并行計算架構,然而CUDA是針對NVIDIA公司的GPU箫爷,而OpenCL是一種通用的計算框架。兩者基本的差別為:
表 4 CUDA與OpenCL基本差別

CUDA OpenCL
技術類型 控制 開源和VIP服務
出現(xiàn)時間 2006年 2008年
SDK企業(yè) NVIDIA 具體根據(jù)企業(yè)
SDK是否免費 Yes 依賴企業(yè)
實現(xiàn)企業(yè) 僅NVIDIA Apple、NVIDIA扼仲、AMD远寸、IBM
支持系統(tǒng) Windows, Linux, Mac OS X; 32 and 64‐bit 依賴具體企業(yè)
支持設備類型 僅NVIDIA GPU 多種類型
支持嵌入式設備 NO Yes

1. 硬件架構

1.1 芯片結構


CUDA和OpenCL的芯片結構類似,都是按等級劃分的屠凶,并逐漸提高等級驰后。然而OpenCL更具通用性并使用更加一般的技術,如OpenCL通過使用Processing Element代替CUDA的Processor矗愧,同時CUDA的模型只能在NVIDIA架構的GPU上運行灶芝。


OpenCL與CUDA芯片結構.png

1.2 存儲結構


CUDA和OpenCL的存儲模型如圖20所示,兩者的模型類型唉韭,都是將設備和主機的存儲單元獨立分開夜涕,它們的都是按等級劃分并需要程序員進行精確的控制,并都能通過API來查詢設備的狀態(tài)属愤、容量等信息女器。而OpenCL模型更加抽象,并為不同的平臺提供更加靈活的實現(xiàn)住诸,在CUDA模型的Local Memory在OpenCL沒有相關的概念驾胆。對于CUDA和OpenCL模型的類似概念,通過表5列出兩者對存儲單元命名的差異贱呐。

CUDA與OpenCL存儲模型.png

表 5 CUDA與OpenCL存儲器對比

OpenCL CUDA
Host memory Host memory
Global memory Global or Device memory
Global memory Local memory
Constant memory Constant memory
Global memory Texture memory
Local memory Shared memory
Private memory Registers

2. 軟件架構

2.1 應用框架


一個典型的應用框架都包含有l(wèi)ibraries丧诺、API、drivers/compilies和runtime
system等來支持軟件開發(fā)吼句。CUDA和OpenCL也擁有相似的特性锅必,都擁有runtime API和library API,但具體環(huán)境下的創(chuàng)建和復制API是不同的惕艳,并且OpenCL可以通過平臺層查詢設備的信息搞隐;CUDA的kernel可以直接通過NVIDIA 驅動執(zhí)行,而OpenCL的kernel必須通過OpenCL驅動远搪,但這樣可能影響到性能劣纲。因為OpenCL畢竟是一個開源的標準,為了適應不同的CPU谁鳍、GPU和設備都能夠得到正常執(zhí)行癞季;而CUDA只針對NVIDIA的GPU產(chǎn)品。

CUDA與OpenCL應用框架.png

2.2 編程模型


  1. 開發(fā)模型
    CUDA和OpenCL應用的開發(fā)模型基本一致倘潜,都是由Host和Device程序組成绷柒。程序首先開始執(zhí)行Host程序,然后由Host程序激活Device程序kernel執(zhí)行涮因。其中兩者也存在一些差別废睦,如表6所示。
    表 6 CUDA與OpenCL開發(fā)模型比較
CUDA OpenCL
精確的host和device代碼分離 Yes Yes
定制的kernel編程語言 Yes Yes
并行的kernel編程語言 Yes 僅有OpenCL C或具體的企業(yè)語言
支持數(shù)據(jù)并行kernels Yes Yes
支持任務并行kernels No Yes
多編程接口 Yes养泡,包括OpenCL 僅支持標準C的API
host和device結合程度 Yes嗜湃,效率非常高 No奈应,分離的編譯并且kernel和API調用是不相干的
Graphics支持 OpenGL and Direct3D OpenGL
  1. kernel編程

kernel程序是指Device設備上執(zhí)行的代碼,它是直接在設備上執(zhí)行购披,受具體設備的限制杖挣,具體兩者的差別,如表7所示刚陡。

表 7 kernel編程差異

CUDA OpenCL
基于開發(fā)語言版本 基本C和C++惩妇、C++14 C99
訪問work-item方式 通過內置的變量 通過內置函數(shù)
內置vector類型 基本vector類型,沒有操作和函數(shù) vector橘荠、literals類型屿附,并內置操作和函數(shù)
Voting函數(shù) Yes (CC 1.2 or greater) No
Atomic函數(shù) Yes (CC 1.1 or greater) Only as extension
異步內存空間復制和預取函數(shù) No Yes
支持C++語言功能 Yes,受限哥童,但大部分功能都支持 No
  1. Host 編程

Host端基本是串行的挺份,CUDA和OpenCL的差別主要表現(xiàn)在調用Device的API的差異,所以表8描述了兩者之間API的差異贮懈。

表 8 Host端可用的API比較

C Runtime for CUDA CUDA Driver API OpenCL API
Setup
Initialize driver Get device(s) (Choose device) Create context Initialize plauorm Get devices Choose device Create context Create command queue
Device and host memory buffer setup
Allocate host memory Allocate device memory for input Copy host memory to device memory Allocate device memory for result Allocate host memory Allocate device memory for input Copy host memory to device memory Allocate device memory for result Allocate host memory Allocate device memory for input Copy host memory to device memory Allocate device memory for result
Initialize kernel
Load kernel module Load kernel source
(Build program) Create program object
Get module function Build program
Create kernel object bound to kernel function
Execute the kernel
Setup execution configuration Setup kernel arguments Setup execution configuration Invoke the kernel Setup kernel arguments Setup execution configuration
Invoke the kernel (directly with its parameters) Invoke the kernel
Copy results to host
Copy results from device memory Copy results from device memory Copy results from device memory
Cleanup
Cleanup all set up above Cleanup all set up above Cleanup all set up above

3. 性能

本節(jié)根據(jù)學術上對CUDA和OpenCL的研究匀泊,比較兩者的性能,其中本文簡單以[1-3]研究成功比較CUDA和OpenCL之間的性能差異朵你,若需詳細了解CUDA和OpenCL之間的性能差異可以參考[4-15]各聘。

3.1 AES實現(xiàn)


Wang[1]提出一種在XTS模式的AES實現(xiàn),并對OpenCL和CUDA性能進行比較抡医。如圖 22和圖23所示躲因,總體性能CUDA要比OpenCL好10%~20%之間。

the performance for OpenCL and CUDA in NVIDIA GTX 285.png

the runtime for OpenCL and CUDA in NVIDIA GTX 285.png

3.2 三維可視化加速模型


上海理工大學[3]提出合理設計內核函數(shù)實現(xiàn)改進的光線投射算法在GPU上并行和并發(fā)運行的三維可視化加速模型忌傻,該模型實現(xiàn)代碼可不用修改在兩大主流顯卡平臺NVIDIA和AMD上任意移植大脉,通過實驗證明比較OpenCL與CUDA之間的性能。


各種實現(xiàn)光線投射算法的三維可視化模型的運行效果對比表.png

3.3 MAGMA和DGEMM算法


作者[2]已經(jīng)在先前的版本中使用CUDA實現(xiàn)了MAGMA(Matrix Algebra on GPU and multicore
architectures)和DGEMM算法水孩,現(xiàn)在將其實現(xiàn)移植到OpenCL
API镰矿,并對兩者的性能進行比較。在NVIDIA處理器上進行測試俘种,其結果是CUDA的性能要高于OpenCL秤标。


DGEMM performance on Tesla C2050 under OpenCL and CUDA.png

4. 總結

====
CUDA與OpenCL的功能和架構相似,只是CUDA只針對NVIDIA的產(chǎn)品宙刘,而OpenCL是一種通用性框架苍姜,可以使用多種品牌的產(chǎn)品,所以CUDA的性能一般情況下要比OpenCL的性能要高10%~20%之間悬包。

CUDA與OpenCL的相似點

  • 關注數(shù)據(jù)并行計算模型衙猪;
  • 將主機和設備的程序和存儲分離;
  • 提供定制和標準C語言對設備進行編程;
  • 設備屈嗤、執(zhí)行和存儲模型是現(xiàn)類似的;
  • OpenCL已經(jīng)可以在CUDA之上進行實現(xiàn)了吊输。
    CUDA和OpenCL主要的差異點
  • CUDA是屬于NVIDIA公司的技術框架饶号,只有NVIDIA的設備才能執(zhí)行;
  • OpenCL是一個開源的框架季蚂,其目標是定位不同的設備茫船;
  • CUDA擁有更多的API和幫助文檔;
  • CUDA投入市場的時間更早扭屁,所以得到更多的支持算谈,并且在研究、產(chǎn)品和應用都比OpenCL豐富料滥;
  • CUDA有非常多的文檔然眼,但也更加模糊。

References

  1. Wang, X., et al. AES finalists implementation for GPU and multi-core CPU
    based on OpenCL. in Anti-Counterfeiting, Security and Identification (ASID),
    2011 IEEE International Conference on. 2011: IEEE.

  2. Du, P., et al., From CUDA to OpenCL: Towards a performance-portable solution
    for multi-platform GPU programming. Parallel Computing, 2012. 38(8): p.
    391-407.

  3. 袁健與高勃, 基于 OpenCL 的三維可視化加速模型. 小型微型計算機系統(tǒng), 2015.
    36(002): 第327-331頁.

  4. Karimi, K., N.G. Dickson and F. Hamze, A performance comparison of CUDA and
    OpenCL. arXiv preprint arXiv:1005.2581, 2010.

  5. McConnell, S., et al. Scalability of Self-organizing Maps on a GPU cluster
    using OpenCL and CUDA. in Journal of Physics: Conference Series. 2012: IOP
    Publishing.

  6. Fang, J., A.L. Varbanescu and H. Sips. A comprehensive performance
    comparison of CUDA and OpenCL. in Parallel Processing (ICPP), 2011
    International Conference on. 2011: IEEE.

  7. Oliveira, R.S., et al., Comparing CUDA, OpenCL and OpenGL implementations of
    the cardiac monodomain equations, in Parallel Processing and Applied
    Mathematics. 2012, Springer. p. 111-120.

  8. Harvey, M.J. and G. De Fabritiis, Swan: A tool for porting CUDA programs to
    OpenCL. Computer Physics Communications, 2011. 182(4): p. 1093-1099.

  9. 林樂森, 基于 OpenCL 的 AES 算法并行性分析及加速方案, 2012, 吉林大學.

  10. 易卓霖, 基于 GPU 的并行支持向量機的設計與實現(xiàn), 2011, 西南交通大學.

  11. 蔣麗媛等, 基于 OpenCL 的連續(xù)數(shù)據(jù)無關訪存密集型函數(shù)并行與優(yōu)化研究.
    計算機科學, 2013. 40(3): 第111-115頁.

  12. 詹云, 趙新燦與譚同德, 基于 OpenCL 的異構系統(tǒng)并行編程. 計算機工程與設計,

    1. 33(11): 第4191-4195頁.
  13. 王晗, 基于多核環(huán)境下的多線程并行程序設計方法研究, 2014, 中原工學院.

  14. 黃文慧, 圖像處理并行編程方法的研究與應用, 2012, 華南理工大學.

  15. 劉壽生, 虛擬現(xiàn)實仿真平臺異構并行計算關鍵技術研究, 2014, 中國海洋大學.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末葵腹,一起剝皮案震驚了整個濱河市高每,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌践宴,老刑警劉巖鲸匿,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阻肩,居然都是意外死亡带欢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門烤惊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乔煞,“玉大人,你說我怎么就攤上這事撕氧×鏊酰” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵伦泥,是天一觀的道長剥啤。 經(jīng)常有香客問我,道長不脯,這世上最難降的妖魔是什么府怯? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮防楷,結果婚禮上牺丙,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好冲簿,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布粟判。 她就那樣靜靜地躺著,像睡著了一般峦剔。 火紅的嫁衣襯著肌膚如雪档礁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天吝沫,我揣著相機與錄音呻澜,去河邊找鬼。 笑死惨险,一個胖子當著我的面吹牛羹幸,可吹牛的內容都是我干的。 我是一名探鬼主播辫愉,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼栅受,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了一屋?” 一聲冷哼從身側響起窘疮,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冀墨,沒想到半個月后闸衫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡诽嘉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年蔚出,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虫腋。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡骄酗,死狀恐怖,靈堂內的尸體忽然破棺而出悦冀,到底是詐尸還是另有隱情趋翻,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布盒蟆,位于F島的核電站踏烙,受9級特大地震影響,放射性物質發(fā)生泄漏历等。R本人自食惡果不足惜讨惩,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寒屯。 院中可真熱鬧荐捻,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至魂角,卻和暖如春农渊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背或颊。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留传于,地道東北人囱挑。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像沼溜,于是被迫代替她去往敵國和親平挑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容

  • CUDA和OpenCL都是實現(xiàn)計算機異構并行計算架構系草,然而CUDA是針對NVIDIA公司的GPU通熄,而OpenCL是...
    王偵閱讀 7,860評論 0 4
  • CUDA從入門到精通(零):寫在前面 本文原版鏈接: 在老板的要求下,本博主從2012年上高性能計算課程開始接觸C...
    Pitfalls閱讀 3,600評論 1 3
  • 1. 介紹 首先讓我們來看看TensorFlow找都! 但是在我們開始之前唇辨,我們先來看看Python API中的Ten...
    JasonJe閱讀 11,721評論 1 32
  • 1. CPU vs. GPU 1.1 四種計算機模型 GPU設計的初衷就是為了減輕CPU計算的負載,將一部分圖形計...
    王偵閱讀 20,781評論 3 20
  • 1. 簡介 官網(wǎng)在這里 OpenCL(Open Computing Language)能耻,即開放運算語言赏枚,是一個統(tǒng)一...
    王偵閱讀 1,815評論 0 1