CUDA遭遇勁敵? GPU計(jì)算OpenCL標(biāo)準(zhǔn)分析
在消費(fèi)級(jí)市場(chǎng),基于CUDA技術(shù)的PhysX物理加速和Badaboom視頻編碼所帶來(lái)的超強(qiáng)性能令人驚訝不已,而在專業(yè)級(jí)的科學(xué)、氣象、金融甚至是軍事領(lǐng)域,海量并行計(jì)算對(duì)性能的渴求永無(wú)止境,CUDA所帶來(lái)的超強(qiáng)運(yùn)算能力正好符合科研工作者的需求,這也就是CUDA在近兩年來(lái)發(fā)展如此迅猛的根本原因!
面對(duì)前景如此廣闊的市場(chǎng),IT巨頭們個(gè)個(gè)摩拳擦掌、欲大展身手,Intel、AMD、NVIDIA、IBM都紛紛致力于研發(fā)自己的通用并行計(jì)算平臺(tái),乘市場(chǎng)未成熟之際搶占份額,一時(shí)間場(chǎng)面比較混亂,沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)。
天下大勢(shì),分久必合。這次關(guān)于開(kāi)放式通用計(jì)算平臺(tái)的統(tǒng)一,發(fā)起于以“封閉”著稱的蘋(píng)果公司。這個(gè)新的標(biāo)準(zhǔn)被稱為OpenCL,英文全稱是Open Computing Language。他們將這個(gè)標(biāo)準(zhǔn)提交到了The Khronos Group,這是一個(gè)業(yè)界的標(biāo)準(zhǔn)化組織,目前管理著大名鼎鼎的OpenGL(圖形)和OpenAL(音頻)
OpenCL為基石 GPU通用計(jì)算行業(yè)標(biāo)準(zhǔn)誕生
負(fù)責(zé)推廣OpenGL等開(kāi)放標(biāo)準(zhǔn)的行業(yè)組織Khronos Group日前正式宣布,將組建一個(gè)新的“計(jì)算工作組”,負(fù)責(zé)起草針對(duì)GPU、CPU并行計(jì)算進(jìn)行編程的全免費(fèi)開(kāi)放行業(yè)標(biāo)準(zhǔn)。蘋(píng)果提出的OpenCL將成為該標(biāo)準(zhǔn)的奠基文檔。
OpenCL一經(jīng)提出就受到業(yè)界的大力支持
該工作組的首批成員包括:3Dlabs、AMD、蘋(píng)果、ARM、Codeplay、愛(ài)立信、飛思卡爾、Graphic Remedy、IBM、Imagination Technologies、Intel、諾基亞、NVIDIA、摩托羅拉、QNX、高通、三星、Seaweed、德州儀器和瑞典Ume 大學(xué)。工作組的目標(biāo)非常明確,將運(yùn)算核心越來(lái)越多,性能越來(lái)越強(qiáng)的GPU從僅限于圖形運(yùn)算領(lǐng)域的桎梏中解放出來(lái),充分調(diào)動(dòng)其運(yùn)算能力。未來(lái),該標(biāo)準(zhǔn)能夠提供給不同廠商的硬件提供一個(gè)通用的應(yīng)用程序接口,使計(jì)算機(jī)中的GPU和CPU共同發(fā)揮運(yùn)算能力完成各類計(jì)算任務(wù),包括同為該組織標(biāo)準(zhǔn)的OpenGL、OpenGL ES API加速,以及諸如物理效果運(yùn)算,圖像處理和圖像識(shí)別等等。
在WWDC蘋(píng)果開(kāi)發(fā)者大會(huì)上,蘋(píng)果宣布預(yù)計(jì)明年發(fā)布的Mac OS X 10.6 Snow Leopard操作系統(tǒng)將引入名為OpenCL的新特性,通過(guò)基于C語(yǔ)言的編程接口實(shí)現(xiàn)GPU通用計(jì)算支持。Khronos工作組表示,他們歡迎成員企業(yè)和全球其他任何企業(yè)為開(kāi)放通用運(yùn)算標(biāo)準(zhǔn)提供內(nèi)容。但毫無(wú)疑問(wèn),蘋(píng)果提出的OpenCL已經(jīng)成了該標(biāo)準(zhǔn)的奠基石。甚至現(xiàn)在看來(lái),蘋(píng)果當(dāng)初的命名想必也已經(jīng)考慮了成為行業(yè)標(biāo)準(zhǔn)的前景。未來(lái)該標(biāo)準(zhǔn)直接定名為OpenCL,從目前來(lái)看幾乎是一件順理成章的事情。
當(dāng)前,AMD和NVIDIA甚至Intel都有各自獨(dú)立的GPU通用計(jì)算計(jì)劃。而對(duì)消費(fèi)者來(lái)說(shuō),一個(gè)開(kāi)放的行業(yè)標(biāo)準(zhǔn)無(wú)疑要比各自為戰(zhàn)的企業(yè)標(biāo)準(zhǔn)親切的多。由于AMD、NVIDIA、Intel同為工作組成員,這一標(biāo)準(zhǔn)的提出為我們描繪了一個(gè)美好的未來(lái):無(wú)需區(qū)分哪家廠商的產(chǎn)品,不分GPU、CPU,系統(tǒng)可以根據(jù)當(dāng)時(shí)的應(yīng)用需要,調(diào)動(dòng)各個(gè)處理器的運(yùn)算能力,以協(xié)同合作的方式最快速度完成工作。另外,Khronos Group還表示,該標(biāo)準(zhǔn)不僅面向桌面PC,還將針對(duì)嵌入式系統(tǒng)。從工作組名錄中出現(xiàn)的諾基亞、愛(ài)立信、摩托羅拉、三星、高通等名字也能看出端倪,移動(dòng)設(shè)備的通用計(jì)算肯定也在工作組的計(jì)劃當(dāng)中。
OpenCL將統(tǒng)一管理一臺(tái)電腦上的所有計(jì)算資源,比如你的多核CPU,以及多個(gè)GPU。OpenCL將這些資源統(tǒng)一看待,算作計(jì)算單元,并配置各種級(jí)別的內(nèi)存:private、local和global。每個(gè)計(jì)算單元可以容納多個(gè)工作單元,類似CUDA里的thread概念。#p#page_title#e#
簡(jiǎn)單說(shuō)明下OpenCL和CUDA的不同:
- OpenCL提供統(tǒng)一的標(biāo)準(zhǔn),讓不同廠家的設(shè)備來(lái)支持,使得我們可以統(tǒng)一看待計(jì)算資源。這個(gè)計(jì)算資源不但包括GPU,也包括CPU。
- OpenCL更關(guān)注于多個(gè)計(jì)算資源的管理,不但在計(jì)算單元內(nèi)部可以實(shí)現(xiàn)并行,而且對(duì)于一臺(tái)宿主機(jī)上的所有計(jì)算設(shè)備的并行化進(jìn)行管理。
雖然CUDA和OpenCL是兩種標(biāo)準(zhǔn)兩種概念,但其實(shí)兩者并不是對(duì)立的存在,不但不會(huì)產(chǎn)生利益沖突,反倒是一種互補(bǔ)互利的關(guān)系。因?yàn)镹VIDIA不但是OpenCL標(biāo)準(zhǔn)的制定者之一,而且是蘋(píng)果的親密合作伙伴。比如蘋(píng)果新一代MacBook將會(huì)采用NVIDIA的GeForce 9400M GPU,這款整合顯卡擁有16個(gè)流處理器,既能運(yùn)行基于CUDA的應(yīng)用程序以及對(duì)其進(jìn)行編程,將來(lái)也能完美支持基于OpenCL API的并行計(jì)算程序。
AMD在內(nèi)部文檔中暗指NVIDIA的CUDA為“封閉技術(shù)”
此前AMD攻擊NVIDIA,稱CUDA為封閉的標(biāo)準(zhǔn),而AMD則大力支持完全開(kāi)放的OpenCL。但目前來(lái)看NVIDIA兩手抓兩手都要硬的策略還是更加靠普,在OpenCL成型之前的真空期,CUDA已經(jīng)大展宏圖取得了驕人的戰(zhàn)績(jī),待到OpenCL完善后NVIDIA也會(huì)無(wú)條件提供支持,將兼容性和效能發(fā)揮到最大。而對(duì)于AMD來(lái)說(shuō),GPU通用計(jì)算則要完全依賴OpenCL,因此目前AMD并行計(jì)算尚未正式進(jìn)入實(shí)際應(yīng)用階段,只有等待OpenCL API成熟之后,才能在其基礎(chǔ)上進(jìn)行二次開(kāi)發(fā),無(wú)論運(yùn)算效率還是軟件支持度都將會(huì)大打折扣!
針對(duì)CUDA與OpenCL之間錯(cuò)綜復(fù)雜的關(guān)系,筆者咨詢了NVIDIA相關(guān)技術(shù)人員,分享給喜歡研究技術(shù)與關(guān)注行業(yè)動(dòng)態(tài)的朋友們。
- NVIDIA已經(jīng)有了自家的CUDA平臺(tái),為什么還要支持OpenCL標(biāo)準(zhǔn)?
答:當(dāng)然要支持。Apple是一家實(shí)力強(qiáng)勁的合作伙伴,他們宣布以GPU作為其操作系統(tǒng)以及應(yīng)用程序戰(zhàn)略的核心,這是對(duì)并行計(jì)算運(yùn)動(dòng)提供強(qiáng)有力的支持。我們已經(jīng)在CUDA身上投入了五年多的精力,而支持CUDA的NVIDIA GPU數(shù)量也超過(guò)了8000萬(wàn)顆,NVIDIA不但是Windows平臺(tái)的最佳選擇,對(duì)與Mac OS X以及Linux等各種操作環(huán)境也極為重視。OpenCL標(biāo)準(zhǔn)的出臺(tái)有助于拓展GPU的功能及市場(chǎng),NVIDIA沒(méi)有理由不支持。
- NVIDIA在OpenCL標(biāo)準(zhǔn)的制定過(guò)程中扮演著什么樣的角色?
答:作為GPU技術(shù)的行業(yè)領(lǐng)袖,我們有責(zé)任推動(dòng)和發(fā)起并行計(jì)算運(yùn)動(dòng)。我們已經(jīng)在CUDA身上投入了五年多的精力,CUDA團(tuán)隊(duì)將繼續(xù)支持我們所有的合作伙伴,幫助他們將并行GPU計(jì)算推向市場(chǎng)。NVIDIA在CUDA研發(fā)過(guò)程中的經(jīng)驗(yàn)以及NVIDIA GPU龐大的市場(chǎng)占有率奠定了舉足輕重、不可或缺的角色!
- OpenCL是否基于CUDA而開(kāi)發(fā)??jī)烧叩漠愅?/li>
答:CUDA包含編譯器、軟件工具以及應(yīng)用程序接口(API),是一款經(jīng)過(guò)精心調(diào)試與完善的編程環(huán)境和架構(gòu),對(duì)我們而言,OpenCL是進(jìn)入CUDA并行編程架構(gòu)的另一種應(yīng)用程序接口。
針對(duì)OpenCL以及CUDA,編程人員可以使用相同的理念體系以及并行編程策略。二者在句法上非常相似,但是OpenCL更適用于OS X,而CUDA則基于標(biāo)準(zhǔn)的C語(yǔ)言,可適用于各種平臺(tái)。我們已經(jīng)設(shè)計(jì)出了軟件棧,因此對(duì)我們的硬件來(lái)說(shuō),OpenCL以及CUDA看上去是一樣的。它們只是通向GPU加速代碼的兩種不同途徑而已。
- CUDA與OpenCL能否互相兼容?
答:CUDA和OpenCL二者的應(yīng)用程序接口(API)有所不同,因此代碼也不會(huì)完全兼容。然而,它們?cè)诙x數(shù)據(jù)并行機(jī)制方面有類似的構(gòu)造,因此它們的代碼會(huì)非常相似,而且移植工作也會(huì)非常省力。現(xiàn)在的情況是,CUDA已經(jīng)面世并且得到了包括OS X在內(nèi)的所有大多數(shù)操作系統(tǒng)的支持,這就意味著開(kāi)發(fā)人員現(xiàn)在擁有了一個(gè)穩(wěn)定、普及的環(huán)境來(lái)開(kāi)發(fā)gigaflop級(jí)浮點(diǎn)性能GPU應(yīng)用程序。這種開(kāi)發(fā)環(huán)境在OpenCL發(fā)布時(shí)可通過(guò)OpenCL輕松地與OS X整合在一起。
- OpenCL是否會(huì)代替CUDA?NVIDIA是否支持將OpenCL指定為一種行業(yè)標(biāo)準(zhǔn)?
答:CUDA是不會(huì)被取代的,OpenCL實(shí)際上可利用CUDA驅(qū)動(dòng)程序堆棧來(lái)在NVIDIA GPU上實(shí)現(xiàn)更高的性能。NVIDIA當(dāng)然支持OpenCL,我們支持所有的標(biāo)準(zhǔn)制定工作