誰(shuí)主沉浮 OpenCL與CUDA架構(gòu)深入解析
第1頁(yè):前言 |
最近,Khronos公布了OpenCL(Open Computing Language)的第一個(gè)測(cè)試版本,一經(jīng)發(fā)布便在通用計(jì)算領(lǐng)域掀起來(lái)軒然大波!OpenCL是由蘋(píng)果公司發(fā)起,業(yè)界眾多著名廠商共同制作的面向異構(gòu)系統(tǒng)通用目的并行編程的開(kāi)放式、免費(fèi)標(biāo)準(zhǔn),也是一個(gè)統(tǒng)一的編程環(huán)境。便于軟件開(kāi)發(fā)人員為高性能計(jì)算服務(wù)器、桌面計(jì)算系統(tǒng)、手持設(shè)備編寫(xiě)高效輕便的代碼,而且廣泛適用于多核心處理器(CPU)、圖形處理器(GPU)、Cell類(lèi)型架構(gòu)以及數(shù)字信號(hào)處理器(DSP)等其他并行處理器,在游戲、娛樂(lè)、科研、醫(yī)療等各種領(lǐng)域都有廣闊的發(fā)展前景。
那么OpenCL與NVIDIA的CUDA架構(gòu)是什么關(guān)系,是否是外界認(rèn)為的競(jìng)爭(zhēng)關(guān)系?目前眾多的通用計(jì)算標(biāo)準(zhǔn)中,比如NVIDIA的CUDA、Khronos的OpenCL、AMD的Stream,CAL、Brook+、微軟下一代的Computer shader等,他們之間有什么異同,看完這篇文章,相信你就會(huì)有一個(gè)大概的了#p#page_title#e#
#p#page_title#e#
第2頁(yè):OpenCL來(lái)了!
Khronos是一個(gè)開(kāi)發(fā)組織,著名的OpenGL就是出自Khronos之手,Khronos有很多廠商組成,OpenCL工作組同時(shí)也是OpenCL的一個(gè)協(xié)調(diào)機(jī)構(gòu),來(lái)負(fù)責(zé)制定OpenCL的規(guī)格、架構(gòu)等等各方面。業(yè)界最主要的和圖形或者和計(jì)算相關(guān)的廠商都是Khronos的成員。
OpenCL實(shí)際上是針對(duì)異構(gòu)系統(tǒng)進(jìn)行并行編程的一個(gè)全新的API,OpenCL可以利用GPU進(jìn)行一些并行計(jì)算的工作。我們知道,圖形里面有很多API,比如OpenGL是針對(duì)圖形的,而OpenCL則是針對(duì)并行計(jì)算的API。 OpenCL開(kāi)發(fā)人員可以利用GPU和CPU的計(jì)算能力,把GPU和CPU異構(gòu)的系統(tǒng)運(yùn)用在很多并行計(jì)算的領(lǐng)域。
OpenCL對(duì)于業(yè)界來(lái)說(shuō)是非常重要也是非常好的一個(gè)標(biāo)準(zhǔn),這樣業(yè)界有一個(gè)共同的標(biāo)準(zhǔn)可以利用GPU的強(qiáng)大計(jì)算能力,然后應(yīng)用在圖形以外各種各樣的并行計(jì)算方面。nVIDIA公司的副總裁Neil Trevett是OpenCL工作組的主席,引導(dǎo)很多OpenCL的開(kāi)發(fā),NVIDIA公司很多員工都在參與這項(xiàng)工作。
OpenCL最早由Apple公司提出的,OpenCL發(fā)起NVIDIA就和Apple公司進(jìn)行非常緊密的合作。OpenCL開(kāi)發(fā)的過(guò)程中,技術(shù)平臺(tái)均為NVIDIA的GPU,實(shí)際上OpenCL是基于NVIDIA GPU的平臺(tái)進(jìn)行開(kāi)發(fā)的。另外OpenCL在大概兩個(gè)多月以前進(jìn)行了第一次演示,也是運(yùn)行在NVIDIA的GPU上。
對(duì)于Apple公司來(lái)說(shuō)是把GPU計(jì)算當(dāng)成一種未來(lái)的趨勢(shì),他們非常重視OpenCL,在新一代的產(chǎn)品里面選擇了最適合于OpenCL運(yùn)行的平臺(tái)。所以新一代蘋(píng)果的筆記本電腦全都采用了NVIDIA的平臺(tái),不管是MacBook Pro還是MaBook。實(shí)際上這也是從另外一個(gè)方面證明NVIDIA的GPU對(duì)于OpenCL的支持。
#p#page_title#e#
第3頁(yè):OpenCL與CUDA并非敵對(duì)關(guān)系 |
很多人對(duì)什么是CUDA可能還有一些疑慮,并沒(méi)有搞清楚CUDA到底是什么。實(shí)際上CUDA最主要的包含兩個(gè)方面:一個(gè)是ISA指令集架構(gòu);第二硬件計(jì)算引擎;實(shí)際上是硬件和指令集。 也就是說(shuō)我們可以把CUDA看做是與X86或者cell類(lèi)似的架構(gòu),但是是基于是GPU,而不是傳統(tǒng)的CPU。
這個(gè)其實(shí)很好理解,把它和傳統(tǒng)的和CPU的架構(gòu)比較下相信就更容易理解,傳統(tǒng)X86是包含一套指令集和執(zhí)行X86各種各樣的CPU,對(duì)于CUDA也是一樣,CUDA有一套指令集ISA,還有執(zhí)行指令集各種各樣的硬件引擎。CUDA到目前為止包含了一個(gè)C語(yǔ)言的編譯器,當(dāng)然CUDA架構(gòu)還可以支持其他的API,包括OpenCL或者DirectX,同時(shí)CUDA還會(huì)有其他的語(yǔ)言,包括Fortran、Java、Python等各種各樣的語(yǔ)言,可以說(shuō)CUDA架構(gòu)是原生的,專(zhuān)門(mén)為計(jì)算接口而建造的這樣的一個(gè)架構(gòu),這種硬件架構(gòu)包括指令集都是非常適合于這種并行計(jì)算,為異構(gòu)計(jì)算而設(shè)計(jì)的一整套的架構(gòu)。
OpenCL與CUDA的關(guān)系
上圖很好的解釋CUDA和OpenCL的關(guān)系,他們并不是沖突關(guān)系,而是包容關(guān)系。OpenCL是一個(gè)API,在第一個(gè)級(jí)別,CUDA架構(gòu)是更高一個(gè)級(jí)別,在這個(gè)架構(gòu)上不管是OpenCL還是DX11這樣的API,還是像C語(yǔ)言、Fortran、DX11計(jì)算,都可以支持。作為程序開(kāi)發(fā)員來(lái)講,一般他們只懂這些語(yǔ)言或者API,可以采用多種語(yǔ)言開(kāi)發(fā)自己的程序,不管他選擇什么語(yǔ)言,只要是希望調(diào)用GPU的計(jì)算能,在這個(gè)架構(gòu)上都可以用CUDA來(lái)編程。
CUDA編程的道理和CPU的編程很類(lèi)似,比如有了X86的指令集,又有X86各種各樣的CPU,那么我們只需要對(duì)這個(gè)指令集編程即可。X86架構(gòu)上有各種各樣的開(kāi)發(fā)工具,當(dāng)然也有C語(yǔ)言,F(xiàn)ortran語(yǔ)言,Python語(yǔ)言,Java或者以前的Pascal語(yǔ)言,不論你使用什么語(yǔ)言進(jìn)行開(kāi)發(fā),最后還是在X86的架構(gòu)上執(zhí)行。CUDA也是一樣,有了CUDA的指令集,有了支持CUDA的硬件,我們就可以采用不同的途徑來(lái)進(jìn)行開(kāi)發(fā),比如可以采用OpenCL或者DirectX這樣的API,也可以用C語(yǔ)言或者Fortran或者Java開(kāi)發(fā),最終都可以在CUDA架構(gòu)上運(yùn)行。
#p#page_title#e#
第4頁(yè):OpenCL與CUDA C語(yǔ)言的異同 |
前文已經(jīng)說(shuō)過(guò),CUDA架構(gòu)與OpenCL是包容關(guān)系,我們把他們放在同一級(jí)別進(jìn)行討論本來(lái)就是錯(cuò)誤的,與OpenCL在同一級(jí)別不是CUDA架構(gòu),而是CUDA的C語(yǔ)言包,也就是我們常說(shuō)的CUDA版本,比如,CUDA 1.0、CUDA 2.0等等,下面來(lái)介紹一下OpenCL和CUDA C語(yǔ)言的一些異同。
對(duì)于編程人員來(lái)說(shuō)可以選擇不同的開(kāi)發(fā)環(huán)境來(lái)進(jìn)行編程,例如我們可以選擇OpenCL編程也可以選擇CUDA上面的C語(yǔ)言來(lái)編程,或者API的語(yǔ)言來(lái)編程。API和C語(yǔ)言進(jìn)行開(kāi)發(fā)是有一些不同的,API是一個(gè)編程接口,它的核心是函數(shù)庫(kù)和應(yīng)用程序開(kāi)發(fā)的一個(gè)硬件接口,對(duì)于API來(lái)編程的話,好處在于可以訪問(wèn)比較低層次的硬件,單弊端也是顯而易見(jiàn)的,那就是很多程序特別是像內(nèi)存的管理,需要程序員自己來(lái)進(jìn)行管理。而我們?cè)诶肅UDA C語(yǔ)言來(lái)編程的時(shí)候,底層的硬件管理是由CUDA開(kāi)發(fā)包來(lái)進(jìn)行管理,比如內(nèi)存是用runtime進(jìn)行管理(runtime實(shí)際上就是運(yùn)行時(shí)的一些支持程序來(lái)進(jìn)行底層硬件的管理),而不需要開(kāi)發(fā)者考慮底層的硬件效率。不管OpenCL或者CUDA C語(yǔ)言來(lái)編程,最終都是需要通過(guò)一個(gè)驅(qū)動(dòng)程序來(lái)變成一個(gè)PTX的代碼,PTX相當(dāng)于CUDA的指令集來(lái)進(jìn)行執(zhí)行,然后交給圖形處理其或者交給CPU來(lái)進(jìn)行執(zhí)行。
也就是說(shuō),如果開(kāi)發(fā)人員想獲得更多的對(duì)硬件上的控制權(quán)的話,可以使用API來(lái)進(jìn)行編程,而如果類(lèi)似科學(xué)家如果對(duì)API不是太了解,那么就可以用CUDA C語(yǔ)言來(lái)編程,這是兩種不同編程的方式,他們有他們相同點(diǎn)和不同點(diǎn)。OpenCL和CUDA C語(yǔ)言進(jìn)行開(kāi)發(fā)的時(shí)候,在并行計(jì)算上的概念很相似,在程序上是也有很大的相似度,所以程序之間的相互移植相對(duì)來(lái)說(shuō)也比較容易。
當(dāng)然我們也許會(huì)有疑問(wèn),那就是OpenCL看似更趨向于底層開(kāi)發(fā)的API,那相對(duì)于CUDA C來(lái)說(shuō),OpenCL開(kāi)發(fā)的程序執(zhí)行效率會(huì)不會(huì)比CUDA C效率更高一些?實(shí)際上這個(gè)問(wèn)題是不用擔(dān)心的,執(zhí)行效率高不高,并不取決于采用的什么語(yǔ)言,什么樣的API,更大程度上取決于的代碼的優(yōu)化程度!
#p#page_title#e#
第5頁(yè):不同編程模式解讀 |
下面我們來(lái)深入解讀一下CUDA與C語(yǔ)言編程模式的異同。對(duì)C語(yǔ)言進(jìn)行編程的人員都知道,C語(yǔ)言使用驅(qū)動(dòng)程序就是API,實(shí)際上是一種抽象,這個(gè)抽象主要是指和硬件相關(guān)的抽象。實(shí)際上CUDA C語(yǔ)言是一種C語(yǔ)言的擴(kuò)展,這擴(kuò)展的一部分主要是進(jìn)行并行運(yùn)算編程的方面,這些是通過(guò)C的擴(kuò)展來(lái)獲得的?;旧险J(rèn)為CUDA的程序也是一種標(biāo)準(zhǔn)的C語(yǔ)言的程序,然后使用一些關(guān)鍵字然后來(lái)對(duì)并行這方面計(jì)算,最后做一些區(qū)分。C語(yǔ)言最終編譯會(huì)成為PTX的代碼,然后在GPU上執(zhí)行。OpenCL是一個(gè)API,就是應(yīng)用程序的編程接口,OpenCL和OpenGL很像,這種API可以調(diào)用API最底層的數(shù)據(jù),通過(guò)程序開(kāi)發(fā)調(diào)用各種各樣的函數(shù),實(shí)現(xiàn)各種各樣的功能。對(duì)于API來(lái)說(shuō)一般它對(duì)硬件設(shè)備有比較完整的訪問(wèn)權(quán),以訪問(wèn)硬件的設(shè)備,可以對(duì)內(nèi)存進(jìn)行管理,這是由開(kāi)發(fā)人員通過(guò)編程來(lái)做的這些事情。最后OpenCL通過(guò)編譯、通過(guò)驅(qū)動(dòng)程序可以生成PTX代碼在GPU上進(jìn)行執(zhí)行。
編程人員要利用GPU的計(jì)算能力開(kāi)發(fā)你的應(yīng)用的時(shí)候,有兩種模式:如果你需要對(duì)硬件有更多的控制,可以通過(guò)OpenCL來(lái)編你的API和你的程序,那么它可以在CPU上運(yùn)行;如果不需要底層的硬件管理,同時(shí)對(duì)硬件有控制權(quán),而且又不太懂API這些程序,只要用C語(yǔ)言就可以編程了,或者CUDA C語(yǔ)言來(lái)編程,編完程序以后也可以在CPU的硬件上運(yùn)行。
OpenCL和OpenGL在很多方面都很類(lèi)似,他們也是一個(gè)共同的組織Khronos來(lái)進(jìn)行管理的。對(duì)OpenGL圖形開(kāi)發(fā)比較熟悉的人使用OpenCL計(jì)算這方面的開(kāi)發(fā),他們就會(huì)非常熟悉它里面所涉及的很多方面,這是OpenCL的一個(gè)非常明顯的特點(diǎn)。如果你對(duì)圖形編程很熟悉的話,就像是Computer Shader,如果是多媒體等方面的應(yīng)用,又想使用圖形又想使用GPU的來(lái)計(jì)算,用Computer Shader的DX11編程,可能比較容易。但是對(duì)于大部分的科學(xué)家來(lái)說(shuō),可能對(duì)API,OpenCL可能完全不熟悉,他需要的就像在CPU上編程一樣,對(duì)CPU的計(jì)算編程,可以使用CUDA C語(yǔ)言,在CUDA C語(yǔ)言里面我們把CPU看成專(zhuān)門(mén)做計(jì)算的協(xié)處理器來(lái)進(jìn)行編程,這是兩個(gè)之間不同的模式。
如果認(rèn)為一種開(kāi)發(fā)環(huán)境就可以取代其他的開(kāi)發(fā)環(huán)境,這個(gè)是不現(xiàn)實(shí)的。舉個(gè)例子,在X86的架構(gòu)上,除了C語(yǔ)言以外還有Java、Fortran還有Pascal語(yǔ)言,這些不可能互相取代的,每種語(yǔ)言、每種API都有它使用的人群。不同的語(yǔ)言、不同的API都會(huì)滿(mǎn)足不同人群的。GPU計(jì)算和API語(yǔ)言不是太多,目前還比較少,NVIDIA還會(huì)不斷地推出Java、Pascal或者C++也會(huì)支持。如果以前沒(méi)有Fortran,那些“老古董”程序員要讓他們學(xué)習(xí)C語(yǔ)言的話基本不可行,他們可能用Fortran用了幾十年,讓他們使用C語(yǔ)言開(kāi)發(fā)的話他就比較痛苦,所以O(shè)penCL與CUDA C語(yǔ)言并不存在誰(shuí)將取代誰(shuí)的問(wèn)題。
#p#page_title#e#
第6頁(yè):CUDA與ATI Stream異同 |
我們知道,ATI方面也有自己的通用計(jì)算編程接口,叫做Stream。那么他與CUDA架構(gòu)又有什么不同呢?
Stream基本上還是基于一種傳統(tǒng)CPU的一種方式,Stream主要包括CAL與Brook+。CAL是一套指令集,可以用匯編語(yǔ)言的方式來(lái)開(kāi)發(fā)軟件,然而我們匯編方式開(kāi)發(fā)軟件的話,對(duì)搞計(jì)算的人來(lái)說(shuō)不大現(xiàn)實(shí),讓他們用匯編語(yǔ)言來(lái)說(shuō)的話可能確實(shí)是一個(gè)折磨。Brook+是斯坦福大學(xué)開(kāi)發(fā)的,它是類(lèi)似于C語(yǔ)言的東西,是把底層GPGPU的計(jì)算方式類(lèi)似于C的這種語(yǔ)言,這里要說(shuō)明的是Brook+不是C語(yǔ)言而是類(lèi)C語(yǔ)言,語(yǔ)法和C語(yǔ)言比較類(lèi)似,但內(nèi)部做的還是使用頂點(diǎn)這樣的數(shù)據(jù)。
Stream視頻編碼
另外Stream的方式還有一個(gè)很大的問(wèn)題,那就是主要是基于本地的板載內(nèi)存存入數(shù)據(jù),換算完成再寫(xiě)到板載內(nèi)存。這樣對(duì)GPU非常強(qiáng)大的計(jì)算能力來(lái)說(shuō),帶寬是一個(gè)非常大的障礙。例如每秒種進(jìn)行1P的數(shù)字計(jì)算的話,需要多少的帶寬?32位浮點(diǎn)4個(gè)字節(jié),如果是1P的話,我們把乘加這部分也計(jì)算在內(nèi)就相當(dāng)于再乘以2,至少需要每秒2P的吞吐量然后才能夠滿(mǎn)足,板載內(nèi)存每秒需要幾十P??梢?jiàn)Stream的方式從效率上是一個(gè)比較低的計(jì)算,而對(duì)于開(kāi)發(fā)者來(lái)說(shuō)也會(huì)碰到很多的問(wèn)題。
對(duì)于CUDA來(lái)說(shuō)我們支持的C語(yǔ)言,是真正GPU上運(yùn)行的C語(yǔ)言。C語(yǔ)言有一個(gè)很重要的特點(diǎn),需要有存儲(chǔ)體系,而NVIDIA GPU在設(shè)計(jì)之初就考慮到了這點(diǎn),內(nèi)部有擁有share memory,編譯器會(huì)把大部分的數(shù)據(jù)盡可能的在share memory上進(jìn)行計(jì)算。share memory帶寬非常高,因?yàn)樗谛酒瑑?nèi)部,速度接近于寄存器。數(shù)據(jù)在share memory上運(yùn)行,然后再把這個(gè)數(shù)據(jù)再輸出,這樣的話真正地可以利用到絕大部分的GPU性能。
#p#page_title#e#
第7頁(yè):匯編語(yǔ)言的弊端 |
基于Stream來(lái)開(kāi)發(fā)的應(yīng)用軟件,我們知道的只有一個(gè)是folding@home,ATI比NVIDIA進(jìn)入早兩年,但是NVIDIA進(jìn)入以后使用CUDA的語(yǔ)言來(lái)寫(xiě)folding@home客戶(hù)端的軟件,性能比ATI的GPU要高好幾倍。folding@home的一個(gè)版本可以運(yùn)行在在上一代的架HD3850或者HD3870的GPU上,但是HD4850和HD4870發(fā)布后,從浮點(diǎn)性能上來(lái)說(shuō)計(jì)算能力比HD3850、HD3870要高2.5倍,但是folding@home的性能反而下降了?原來(lái)HD3870是200ns/day左右,每天可以模擬200萬(wàn)秒的性能等級(jí),但是HD4870發(fā)布后每天只能模擬170ns/day,這又是為什么?其原因是軟件不是使用Brook+開(kāi)發(fā)的,而直接使用匯編的方式,這就需要對(duì)每一個(gè)新的GPU進(jìn)行編程,每個(gè)架構(gòu)都需要對(duì)它重新進(jìn)行編程,然后才可以得到一個(gè)最好的效率,這就是說(shuō)使用匯編方式的話會(huì)帶來(lái)一個(gè)非常大的問(wèn)題,任何一個(gè)應(yīng)用軟件里面都需要重新優(yōu)化、重新編程。
匯編語(yǔ)言實(shí)際上就是機(jī)械碼來(lái)進(jìn)行編程,屬于體力比較好、記憶也比較好的人才能勝任的工作。高級(jí)語(yǔ)言相對(duì)來(lái)說(shuō)確實(shí)要簡(jiǎn)單太多了,例如有些人甚至對(duì)編程都不是很熟悉,他只要基本上知道源代碼里面哪些代碼是在做什么東西,然后他就可以使用CUDA,核心部分計(jì)算部分一定要自己編寫(xiě),因?yàn)镃UDA有很多現(xiàn)成的庫(kù),都是直接寫(xiě)好的函數(shù),這個(gè)函數(shù)把原來(lái)的函數(shù)替代掉,就可以取得很好的性能。NVIDIA提供很多函數(shù)庫(kù),這些函數(shù)庫(kù)有一些是NVIDIA公司開(kāi)發(fā)的,像FFT、線性代數(shù)或者是快速傅里葉變換等,但是有一些庫(kù)是第三方幫NVIDIA開(kāi)發(fā)的。CUDA實(shí)際上形成一個(gè)非常好的環(huán)境,不斷的有人針對(duì)CUDA來(lái)開(kāi)發(fā),不管是應(yīng)用軟件或者是中間件,這些中間件的話就包含各種各樣的庫(kù)。
因此對(duì)于CUDA來(lái)說(shuō),與Stream相比幾乎現(xiàn)在沒(méi)什么可比性。對(duì)OpenCL、DirectX這樣應(yīng)用在CUDA的架構(gòu)上運(yùn)行程序也比在Stream上運(yùn)行程序好的多。因?yàn)镹VIDIA在使用的CUDA架構(gòu)實(shí)際上字開(kāi)發(fā)的時(shí)候,就考慮到通用計(jì)算方面的應(yīng)用。而ATI方面,可能通用計(jì)算僅僅是圖形的一個(gè)副產(chǎn)品。
#p#page_title#e#
第8頁(yè):OpenCL與CUDA C語(yǔ)言路線圖 |
目前OpenCL路線圖目前還是屬于ALPHA版本。明年第一季度可能是Beta的版本,09年OpenCL1.0可能會(huì)正式推出,OpenCL最早會(huì)出現(xiàn)在Mac OS上,以后逐漸的擴(kuò)展到其他的操作系統(tǒng),像Windows或者Linux。
OpenCL路線圖
下面來(lái)介紹一下CUDA C語(yǔ)言的情況,NVIDIA一直還是不斷地對(duì)這個(gè)語(yǔ)言進(jìn)行更深層次的開(kāi)發(fā),也不斷的有新版本的出現(xiàn),到目前為止已經(jīng)是CUDA 2.0。CUDA C語(yǔ)言研發(fā)已經(jīng)超過(guò)5年時(shí)間,NVIDIA從03年左右就開(kāi)始開(kāi)發(fā)C語(yǔ)言。到目前為止,開(kāi)發(fā)人員的數(shù)量已經(jīng)是超過(guò)25000個(gè),而且現(xiàn)在應(yīng)用程序已經(jīng)超過(guò)100個(gè),特別是很多的科學(xué)計(jì)算的領(lǐng)域,幾乎涉及到各種各樣的HPC高性能計(jì)算的領(lǐng)域都有CUDA的身影出現(xiàn),甚至現(xiàn)在HPC進(jìn)入排行榜前100的高性能計(jì)算機(jī)里面也有使用NVIDIA的Tesla系統(tǒng),GPU集群就是配置成高性能計(jì)算機(jī)的集群數(shù)量已經(jīng)達(dá)到了30個(gè),我國(guó)大陸也有采用。
CUDA C語(yǔ)言是一個(gè)跨操作系統(tǒng)的開(kāi)發(fā)工具,現(xiàn)在支持Windows、Linux、Mac OS,幾乎最主流的操作系統(tǒng)都支持,SUN公司的Solaris系統(tǒng)也會(huì)支持。一些數(shù)學(xué)軟件像Matlab、Mathematica、LabView都有CUDA的插件,可以使用C語(yǔ)言的插件讓他更容易的利用CUDA。
上面是C語(yǔ)言的路線圖,目前的版本是CUDA 2.0,到今年年底CUDA 2.1會(huì)與我們見(jiàn)面,到明年會(huì)有2.2、2.3版本,到明年年底會(huì)到CUDA 3.0版本。隨著CUDA版本的升級(jí),它的功能也在不斷地升級(jí),比如最早的CUDA只能支持單精度的浮點(diǎn)計(jì)算,現(xiàn)在可以支持雙精度,可以支持各種各樣的庫(kù),各種各樣的功能也是越來(lái)越多。
#p#page_title#e#
第9頁(yè):并行計(jì)算時(shí)代已經(jīng)到來(lái)…… |
OpenCL的面世,不管對(duì)開(kāi)發(fā)人員還是業(yè)界人員來(lái)說(shuō)還是消費(fèi)者來(lái)說(shuō)都是一個(gè)非常好的API,它可以使得開(kāi)發(fā)者很容易的開(kāi)發(fā)出跨平臺(tái)的GPU計(jì)算的程序,充分利用GPU強(qiáng)大的計(jì)算能力然后應(yīng)用在各種各樣計(jì)算的方面。 除了CUDA的架構(gòu)上除了C語(yǔ)言以外,現(xiàn)在新增加了OpenCL或者DX11這樣的API,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)也提供了一種更多的GPU計(jì)算的開(kāi)發(fā)環(huán)境的一種選擇。如果對(duì)API很熟悉的程序員,肯定會(huì)很高興的看到OpenCL或者新的API的加入,對(duì)于這些人來(lái)說(shuō)他們很容易利用這種計(jì)算的API然后開(kāi)發(fā)各種各樣GPU計(jì)算的程序。
NVIDIA也會(huì)繼續(xù)對(duì)C語(yǔ)言包括其他語(yǔ)言的支持,實(shí)對(duì)NVIDIA CUDA C語(yǔ)言來(lái)說(shuō)目前還是唯一的針對(duì)GPU的runtime C的語(yǔ)言環(huán)境(runtime C的語(yǔ)言環(huán)境是指GPU直接執(zhí)行這個(gè)C語(yǔ)言)。CUDA C語(yǔ)言還會(huì)進(jìn)一步的發(fā)展,不斷會(huì)有新的版本推出。CUDA C語(yǔ)言會(huì)和OpenCL和DX11這種計(jì)算API會(huì)共存。
除了C語(yǔ)言以外NVIDIA還會(huì)推出更多的其他CUDA的語(yǔ)言,包括Fortran,還會(huì)有Java等。不管C語(yǔ)言還是Fortran,與OpenCL、Computer shader這種API是一種長(zhǎng)期共存的關(guān)系。 GPU通用計(jì)算時(shí)代已經(jīng)到來(lái)了,你已經(jīng)準(zhǔn)備好了嗎……