當(dāng)然API和C語言進(jìn)行開發(fā)是有些不同的,API作為編程接口,它的核心是函數(shù)庫和應(yīng)用程序開發(fā)的一個(gè)硬件接口,它有一個(gè)好處就是可以訪問比較低層次的硬件,對于硬件有比較好的控制權(quán),很多的東西特別是像內(nèi)存的管理,是需要開發(fā)者自己來進(jìn)行管理的。而在利用CUDA C語言來編程的時(shí)候,很多東西是由開發(fā)環(huán)境來進(jìn)行管理的,比如內(nèi)存他是用runtime進(jìn)行管理的,相對來說要容易得多。兩者的關(guān)系有點(diǎn)像低級語言和高級語言間的關(guān)系。
不管是用OpenCL還是用CUDA C語言來編程,最終它們都是需要通過一個(gè)驅(qū)動(dòng)程序來變成一個(gè)PTX的代碼,PTX相當(dāng)于CUDA指令集,然后交給圖形處理其或者交給硬件來進(jìn)行執(zhí)行。
OpenCL對開發(fā)者、業(yè)界人員和消費(fèi)者來說都是一個(gè)非常好的API,它可以使得開發(fā)者很容易的開發(fā)出跨平臺(tái)的GPU計(jì)算程序,充分利用GPU強(qiáng)大的計(jì)算能力然后應(yīng)用在各種領(lǐng)域。對于NVIDIA來說,在CUDA架構(gòu)上除了C語言以外,現(xiàn)在新增加了OpenCL或者DX11這樣的API,提供了更多的GPU計(jì)算開發(fā)環(huán)境選擇。如果開發(fā)者對API很熟悉的話,肯定會(huì)樂意看到OpenCL或者新的API的加入,對于他們來說很容易利用這些API開發(fā)出各種各樣GPU計(jì)算程序。
簡單的說,OpenCL只是一個(gè)API,一個(gè)編程接口,它是對CUDA架構(gòu)的有益補(bǔ)充,實(shí)際上OpenCL是利用CUDA驅(qū)動(dòng)程序堆棧來在NVIDIA GPU上實(shí)現(xiàn)高性能計(jì)算,OpenCL標(biāo)準(zhǔn)的出臺(tái),CUDA更是如虎添翼。
目前NVIDIA CUDA的用戶超過了25000名,應(yīng)用程序數(shù)量超過100個(gè),應(yīng)用范圍也日趨廣泛,相反AMD Stream加速的實(shí)際應(yīng)用暫時(shí)是鳳毛麟角。OpenCL有助于拓展GPU的功能及市場,難怪NVIDIA和AMD都會(huì)積極參與到其中。
|