久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

OpenCL和CUDA全解釋

 oskycar 2013-02-01
Khronos組織最近規(guī)范了OpenCL 1.0,, OpenCL實(shí)際上是針對(duì)異構(gòu)系統(tǒng)進(jìn)行并行編程的一個(gè)全新的API,簡(jiǎn)單來(lái)說(shuō)OpenCL它可以利用GPU,,然后進(jìn)行一些并行計(jì)算這方面的工作,,這是API應(yīng)用程序的編程接口,圖形里面也有很多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)域里面,。Khronos是一個(gè)組織,有很多廠商組成,,有非常多的成員,,這個(gè)工作組同時(shí)也是OpenCL的一個(gè)協(xié)調(diào)機(jī)構(gòu),也就是Khronos這個(gè)工作組他來(lái)負(fù)責(zé)制定OpenCL的規(guī)格,、架構(gòu)等等各方面,。業(yè)界最主要的和圖形或者和計(jì)算相關(guān)的廠商都是Khronos的成員。

  OpenCL里面有很多的成員,,這就導(dǎo)致了有更多可以利用OpenCL來(lái)開(kāi)發(fā)的程序,、軟件以及各種各樣的應(yīng)用。這從一方面肯定了OpenCL強(qiáng)大的聚合實(shí)力,,但一方面也預(yù)示著這將會(huì)形成一個(gè)旺盛的需求,。實(shí)際上,OpenCL對(duì)于業(yè)界來(lái)說(shuō)是非常重要也是非常好的一個(gè)標(biāo)準(zhǔn),,NVIDIA看準(zhǔn)了這一標(biāo)準(zhǔn),,利用GPU的強(qiáng)大計(jì)算能力應(yīng)用在圖形以外各種各樣的并行計(jì)算方面,NVIDIA一直在參與OpenCL的工作。NVIDIA副總裁Neil Trevett,,目前則是OpenCL工作組的主席,,引導(dǎo)很多OpenCL的開(kāi)發(fā)。這個(gè)組織里面當(dāng)然還有很多其他開(kāi)發(fā)公司,。NVIDIA公司不少員工都在參與這項(xiàng)工作,。


  OpenCL最早是Apple公司提出來(lái)的,由于OpenCL一開(kāi)始NVIDIA就和Apple公司進(jìn)行非常緊密的合作,。所以目前OpenCL也完全是基于NVIDIA GPU的平臺(tái)進(jìn)行開(kāi)發(fā)的,。Apple十分重視OpenCL,不管是MacBook Pro,、Mac OSX等新產(chǎn)品采用了NVIDIA的平臺(tái),。目前OpenCL路線圖目前還是屬于Alpha版本,明年第一季度可能是Beta的版本,,09年時(shí)OpenCL1.0可能正式推出,,OpenCL最開(kāi)始可能出現(xiàn)在Mac OS上,以后逐漸的擴(kuò)展到其他的操作系統(tǒng),,像Windows或者Linux,。


  NVIDIA一直還是不斷地對(duì)這個(gè)語(yǔ)言進(jìn)行更深層次的開(kāi)發(fā),到目前為止已經(jīng)是CUDA 2.0,。開(kāi)發(fā)人員的數(shù)量已經(jīng)超過(guò)25000個(gè),,應(yīng)用程序數(shù)量也已經(jīng)超過(guò)100個(gè),,特別是很多的科學(xué)計(jì)算的領(lǐng)域等幾乎涉及到各種各樣的HPC高性能計(jì)算的領(lǐng)域都有CUDA的身影出現(xiàn),,甚至現(xiàn)在HPC進(jìn)入排行榜前100的高性能計(jì)算機(jī)里面也有使用Tesla系統(tǒng),Tesla系統(tǒng)就是一個(gè)GPU集群計(jì)算典范,,現(xiàn)在支持Windows,、Linux、Mac OS,,幾乎最主流的操作系統(tǒng)NVIDIA都能支持,。CUDA最主要的包含兩個(gè)方面:一個(gè)是ISA指令集架構(gòu);第二硬件計(jì)算引擎,;實(shí)際上是硬件和指令集,,這兩個(gè)方面是CUDA的架構(gòu)。從這張圖片可以看到,,當(dāng)GPU變身成CUDA運(yùn)算時(shí)候,,NVIDIA的GPU的架構(gòu)就全是CUDA的架構(gòu),你可以把它看成是跟X86或者cell,,他們都是架構(gòu),,這個(gè)也是CUDA架構(gòu),但是是基于GPU的架構(gòu)。這個(gè)和CPU的架構(gòu)很類似,,比如X86是包含一套指令集和執(zhí)行X86各種各樣的CPU,,對(duì)于CUDA也是一樣的,NVIDIA自有一套指令集ISA,,還有各種各樣執(zhí)行指令集各種各樣的硬件引擎,。另外CUDA到目前為止,它包含了一個(gè)C語(yǔ)言的編譯器,,就是在CUDA上面的C語(yǔ)言,,CUDA這個(gè)架構(gòu)還可以支持其他的API,包括OpenCL或者DirectX,,同時(shí)以后NVIDIA還有其他的語(yǔ)言,,包括Fortran、Java,、Python等各種各樣的語(yǔ)言,,可以說(shuō)這種架構(gòu)是原生的,專門(mén)為計(jì)算接口而建造的這樣的一個(gè)架構(gòu),,NVIDIA的硬件架構(gòu)包括指令集都是非常適合于這種并行計(jì)算,,這種異構(gòu)計(jì)算而設(shè)計(jì)的一整套的架構(gòu)。


  CUDA和OpenCL的關(guān)系是不沖突的,,OpenCL是一個(gè)API,,在第一個(gè)級(jí)別,CUDA這個(gè)架構(gòu)是更高一個(gè)級(jí)別,,但是在這個(gè)架構(gòu)上不管是OpenCL還是DX11這樣的API,,還是像C語(yǔ)言、Fortran,、DX11計(jì)算,,NVIDIA都可以支持。作為程序開(kāi)發(fā)員來(lái)講,,一般他只懂這些語(yǔ)言或者API,,他可以選擇我用什么樣的語(yǔ)言來(lái)開(kāi)發(fā)我的程序,不管他選擇什么語(yǔ)言,,他希望調(diào)用GPU的計(jì)算能,,在這個(gè)架構(gòu)上都可以用CUDA來(lái)編程,對(duì)于編程人員來(lái)講這個(gè)很容易,,他不需要對(duì)OpenCL的架構(gòu)有非常深的了解,,他就可以做到。這個(gè)方面上面實(shí)際上是一些開(kāi)發(fā)工具,,這個(gè)道理和CPU的編程實(shí)際上還是很類似的,,比如你有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ā),最后你的執(zhí)行還是在X86的架構(gòu)上執(zhí)行,。NVIDIA的CUDA也是一樣,,有CUDA這一套指令集,有這樣的硬件,,也就是說(shuō)有不同的途徑來(lái)進(jìn)行開(kāi)發(fā),,你可以用OpenCL或者DirectX這樣的API來(lái)進(jìn)行計(jì)算的開(kāi)發(fā),也可以用C語(yǔ)言或者Fortran或者Java開(kāi)發(fā),,這個(gè)道理是一模一樣的,,可以做這方面的類比。OpenCL和C語(yǔ)言的一些異同點(diǎn),。對(duì)于編程人員來(lái)說(shuō)他可以選擇不同的東西來(lái)進(jìn)行編程,,就像之前說(shuō)的可以選擇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)編程的話,,它有一個(gè)好處,那就是可以訪問(wèn)比較低層次的硬件,,但是他也有一點(diǎn),,就是很多的東西特別是像內(nèi)存的管理,這個(gè)是需要程序員自己來(lái)進(jìn)行管理的,。而C語(yǔ)言相對(duì)來(lái)說(shuō)NVIDIA在利用CUDA C語(yǔ)言來(lái)編程的時(shí)候,很多東西是由開(kāi)發(fā)環(huán)境來(lái)進(jìn)行管理的,,比如內(nèi)存他是用runtime進(jìn)行管理的,,runtime實(shí)際上就是運(yùn)行時(shí)的一些支持程序來(lái)進(jìn)行這方面的管理。不管OpenCL或者CUDA C語(yǔ)言來(lái)編程,,最終它都是需要通過(guò)一個(gè)驅(qū)動(dòng)程序來(lái)變成一個(gè)PTX的代碼,,PTX相當(dāng)于CUDA的指令集來(lái)進(jìn)行執(zhí)行,然后交給圖形處理其或者交給硬件來(lái)進(jìn)行執(zhí)行,。這兩個(gè)最終達(dá)到都是使用PTX或者在GPU上進(jìn)行執(zhí)行,。基本上大家可以理解為如果你想獲得更多的對(duì)硬件上的控制權(quán)的話,你可以使用API來(lái)進(jìn)行編程,,比如我是一個(gè)科學(xué)家我對(duì)API不是太了解,,你也可以用CUDA C語(yǔ)言來(lái)編程,這是兩種不同編程的方式,,他們有他們相同點(diǎn)和不同點(diǎn),。但是有一點(diǎn)OpenCL和CUDA C語(yǔ)言進(jìn)行開(kāi)發(fā)的時(shí)候,在并行計(jì)算這塊,,他們的概念是差不多的,,這兩種程序在程序上是有很大的相似度,所以程序之間的相互移植相對(duì)來(lái)說(shuō)也是比較容易,。


  大家如果使用了C語(yǔ)言的話都知道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里面,,通過(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í)行,。鄧?yán)蠋熤v的這個(gè)目的是如果你作為編程人員要利用GPU的計(jì)算能力開(kāi)發(fā)你的應(yīng)用的時(shí)候,,有兩種模式——根據(jù)你不同的需求:如果你需要對(duì)硬件有更多的控制,你可以通過(guò)OpenCL來(lái)編你的API和你的程序,,那么它可以在CPU上運(yùn)行,;如果你不需要這個(gè),,同時(shí)對(duì)硬件有控制權(quán),而且你又不太懂API這些東西,,只要用C就可以編程了,,或者CUDA來(lái)編程,編完程序以后也可以在CPU的硬件上跑,,這個(gè)東西不需要在CUDA支持GPU上跑,。講這個(gè)的目的是不同的編程模式可以選擇不同的方法,就是用OpenCL還是用CUDA C語(yǔ)言,。
   OpenCL和OpenGL在很多方面都很類似,,實(shí)際上他們也是一個(gè)共同的組織來(lái)進(jìn)行管理的。對(duì)OpenGL圖形開(kāi)發(fā)比較熟悉的人他使用OpenCL計(jì)算這方面的開(kāi)發(fā),,他們就會(huì)非常熟悉它里面所涉及的很多方面,,這是OpenCL的一個(gè)非常明顯的特點(diǎn)。如果你對(duì)圖形編程很熟悉的話,,使用DX11編程,,可能比較容易,這是API的一個(gè)好處,。但是對(duì)于大部分的科學(xué)家來(lái)說(shuō),,可能對(duì)API,OpenCL這種東西可能完全不熟悉,,他需要的是我就像在CPU上編程一樣,,對(duì)CPU的計(jì)算編程,他可以使用CUDA C語(yǔ)言,,在CUDA C語(yǔ)言里面把CPU看成專門(mén)做計(jì)算的協(xié)處理器來(lái)進(jìn)行編程的,。這是兩個(gè)之間不同的模式。
總結(jié):
  OpenCL不管對(duì)開(kāi)發(fā)人員還是業(yè)界人員來(lái)說(shuō)還是消費(fèi)者來(lái)說(shuō)都是一個(gè)非常好的API,,一個(gè)應(yīng)用程序的接口,。它可以使得開(kāi)發(fā)者很容易的開(kāi)發(fā)出跨平臺(tái)的GPU計(jì)算的程序,充分利用GPU強(qiáng)大的計(jì)算能力然后應(yīng)用在各種各樣計(jì)算的方面,。
  對(duì)于NVIDIA來(lái)說(shuō),,在CUDA的架構(gòu)上除了C語(yǔ)言以外,現(xiàn)在新增加了OpenCL或者DX11這樣的API,,對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)也提供了一種更多的GPU計(jì)算的開(kāi)發(fā)環(huán)境的一種選擇,。他們?nèi)绻麑?duì)API很熟悉的一批人,他們肯定會(huì)很高興的看到OpenCL或者新的API的加入,,對(duì)于這些人來(lái)說(shuō)他們很容易利用這種計(jì)算的API然后開(kāi)發(fā)各種各樣GPU計(jì)算的程序。對(duì)于NVIDIA來(lái)說(shuō)還會(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ǔ)言,。
  現(xiàn)在已經(jīng)有非常多的用戶已經(jīng)在使用CUDA C語(yǔ)言,剛才介紹有25000名這樣的開(kāi)發(fā)者,,應(yīng)用程序也有很多,,而且這種應(yīng)用程序每一刻都在不斷地增加數(shù)量。CUDA C語(yǔ)言還會(huì)進(jìn)一步的發(fā)展,,就像剛才所說(shuō)的還會(huì)有新的版本推出,,而且會(huì)和像OpenCL和DX11這種計(jì)算API會(huì)共存,今后也是這樣,。除了C語(yǔ)言以外NVIDIA還會(huì)推出更多的其他CUDA的語(yǔ)言,,包括Fortran,還會(huì)有Java等,。
關(guān)于OpenCL與CUDA的一些問(wèn)題:
問(wèn):
AMD是OpenCL里面的嗎,?
答:
對(duì)。OpenCL是包含很多家公司的,,主要業(yè)界的公司都包含在里面,,包括IBM、戴爾這些公司包括HP,。OpenCL是一個(gè)非常開(kāi)放的行業(yè)組織,,所有的公司都在里面,他們和NVIDIA是沒(méi)有沖突的,,NVIDIA也是很積極地參與技術(shù),。
  Stream基本上還是基于一種傳統(tǒng)CPU的一種方式,AMD當(dāng)然他會(huì)說(shuō)他會(huì)有CAL,,CAL實(shí)際上是套指令集,,可以用匯編語(yǔ)言的方式來(lái)開(kāi)發(fā)軟件,但是匯編方式開(kāi)發(fā)軟件的話,,對(duì)搞計(jì)算的人來(lái)說(shuō)不大現(xiàn)實(shí),,你要讓他用匯編語(yǔ)言來(lái)說(shuō)的話可能確實(shí)是一個(gè)折磨。還有一個(gè)Brook,,這個(gè)是斯坦福大學(xué)開(kāi)發(fā)的,,它是類似于C的東西,他是把底層GPGPU的計(jì)算方式類似于C的這種語(yǔ)言,,他不是C語(yǔ)言而是類C語(yǔ)言,,語(yǔ)法和C語(yǔ)言比較類似,他內(nèi)部做的還是使用頂點(diǎn)這樣的數(shù)據(jù),。
  另外Stream的方式還有一個(gè)很大的問(wèn)題,,他主要是基于本地的板載內(nèi)存,板載內(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的話,,NVIDIA把他承加這部分也算上就相當(dāng)于再乘以2,,至少需要每秒2P的吞吐量然后才能夠滿足它,板載內(nèi)存的話每秒需要幾十P,,這實(shí)際上是Stream的方式,,從效率上是一個(gè)比較低的計(jì)算。而對(duì)于開(kāi)發(fā)者來(lái)說(shuō)也會(huì)碰到很多的問(wèn)題,,對(duì)于NVIDIA來(lái)說(shuō)支持C,,這是真正GPU上運(yùn)行的C語(yǔ)言。C語(yǔ)言有一個(gè)很重要的特點(diǎn),,需要有存儲(chǔ)體系,,對(duì)于NVIDIA GPU來(lái)說(shuō)是有存儲(chǔ)體系的,內(nèi)部有share memory,,然后大部分的數(shù)據(jù),,編譯器會(huì)把大部分的數(shù)據(jù)盡可能的讓它在share memory上進(jìn)行計(jì)算,share memory帶寬非常高,,因?yàn)樗谛酒瑑?nèi)部,,它的速度接近于寄存器的速度,他在share memory上跑的話,,然后再把這個(gè)數(shù)據(jù)再輸出,,這樣的話他真正地可以利用到絕大部分的計(jì)算機(jī)。實(shí)際上CUDA的效率,,在應(yīng)用軟件上可以看出來(lái),,像傳統(tǒng)的高性能計(jì)算領(lǐng)域的話,NVIDIA的峰值速度比如像G80是300多G浮點(diǎn)計(jì)算能力,,效率是非常高的,。這也是為什么這么多人在使用CUDA C語(yǔ)言來(lái)進(jìn)行開(kāi)發(fā),這是一個(gè)很重要的原因,。
   實(shí)際上你說(shuō)要使用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客戶端的軟件,,性能立刻比它高好幾倍,folding@home你可以看到一個(gè)很特別的——他原來(lái)一個(gè)版本是可以跑在它上一代的架構(gòu)應(yīng)該是3850或者3870的GPU上,,但是如果它4850和4870出來(lái)以后,,從原點(diǎn)上來(lái)說(shuō)他的計(jì)算能力比3850,、3870要高2.5倍,,但是它的folding@home的性能反而下降了,,原來(lái)他是200左右,就是3870,,他是每天可以模擬200萬(wàn)秒的性能等級(jí),,4870出來(lái)以后每天只能模擬170萬(wàn)秒。這是為什么,?這個(gè)軟件不是使用Brook開(kāi)發(fā)的,,直接使用匯編的方式開(kāi)發(fā)的,這樣的話你需要對(duì)每一個(gè)新的GPU,,你都要對(duì)他進(jìn)行編程,,每個(gè)架構(gòu)都需要對(duì)它重新進(jìn)行編程,然后才可以得到一個(gè)最好的效率,。中間有很長(zhǎng)時(shí)間4870的性能都比3870在folding@home上低,,后來(lái)他確實(shí)重新編程了,過(guò)了好幾個(gè)月,,有些新的版本出來(lái)了,,4870比3870高了。這就是說(shuō)使用匯編方式的話會(huì)帶來(lái)一個(gè)非常大的問(wèn)題,,你任何一個(gè)應(yīng)用軟件里面都需要重新優(yōu)化,、重新編程。
  匯編語(yǔ)言實(shí)際上就是機(jī)器碼來(lái)進(jìn)行編程,,這個(gè)是屬于體力比較好的人才能干的了,,就是記憶也比較好的人才能干的了。高級(jí)語(yǔ)言相對(duì)來(lái)說(shuō)確實(shí)要簡(jiǎn)單太多了,,就像剛才我說(shuō)的有些人甚至對(duì)編程都不是很熟悉的,,他只要基本上知道源代碼里面哪些代碼是在做什么東西,然后他就可以使用CUDA,,他不見(jiàn)得核心部分計(jì)算部分一定要自己編,,就像剛才說(shuō)的NVIDIA有很多現(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ā)的,。NVIDIA實(shí)際上形成一個(gè)非常好的環(huán)境,,不斷的有人針對(duì)CUDA來(lái)開(kāi)發(fā),不管是應(yīng)用軟件或者是中間件,,這些中間件的話就包含各種各樣的庫(kù),。
對(duì)于CUDA來(lái)說(shuō),說(shuō)老實(shí)話和Stream相比的話,,幾乎現(xiàn)在沒(méi)什么可比性,。確實(shí)對(duì)OpenCL、DirectX這樣應(yīng)用的話,,我相信在CUDA的架構(gòu)上運(yùn)行這個(gè)程序也比在Stream上運(yùn)行程序好的多,。因?yàn)镹VIDIA使用的架構(gòu)實(shí)際上你開(kāi)發(fā)的時(shí)候,NVIDIA就考慮到計(jì)算方面的應(yīng)用,。別的方案的話,,他有可能計(jì)算僅僅是圖形的一個(gè)副產(chǎn)品。NVIDIA在開(kāi)發(fā)的時(shí)候圖形和計(jì)算這兩部分幾乎作為同等重要的,,兩個(gè)都必須要滿足的東西來(lái)做架構(gòu)方面的設(shè)計(jì),。
問(wèn):
OpenCL它的特點(diǎn)一個(gè)是開(kāi)放,OpenGL也很開(kāi)放,,但是它的更新實(shí)際上非常,、非常的慢,OpenCL會(huì)有這種情況嗎,?
答:更新的話,,這是由一個(gè)專門(mén)的組織Khronos,這個(gè)組織是有很多廠商來(lái)組成的,,每個(gè)廠商派一些人然后進(jìn)來(lái)在組織里面,,然后每個(gè)公司互相協(xié)商,然后制定各種各樣的標(biāo)準(zhǔn),,比如你推出一個(gè)新的版本要達(dá)到什么功能,,價(jià)格是怎么樣的?這些廠商來(lái)進(jìn)行協(xié)商的,,廠商不太一樣,,比如Microsoft我自己的東西,我說(shuō)的算,,這是完全不一樣的,。但是我相信OpenCL從目前來(lái)看的話,它還是挺快的,,你看它現(xiàn)在的α版本明年一季度就進(jìn)入β版本,,明年終第一版就會(huì)推出。
問(wèn):
OpenGL和DirectX的關(guān)系一樣,我現(xiàn)在看到CUDA這邊更新的頻率明顯比OpenCL快很多,,NVIDIA想把這個(gè)東西打造成一個(gè)GPU通用計(jì)算上的DirecX嗎,?
答: 我覺(jué)得應(yīng)該是沒(méi)有什么可比性的。剛剛強(qiáng)調(diào)DirectX是API,,CUDA不是API,,CUDA是一個(gè)硬件架構(gòu)。剛才說(shuō)的很多版本是CUDA C語(yǔ)言的版本,,這是CUDA C語(yǔ)言版本的路線圖,,(PPT)C是語(yǔ)言,CUDA是一個(gè)硬件架構(gòu),,GPU的架構(gòu)。大家很容易會(huì)把C和CUDA融在一塊兒,,不是這樣的,。CUDA架構(gòu)類似與X86的架構(gòu)。 實(shí)際上CUDA的C語(yǔ)言和OpenCL在并行計(jì)算這塊,,它的一些觀念都挺類似的,,包括它計(jì)算的數(shù)據(jù)組織方式都很類似。我相信NVIDIA在OpenCL的規(guī)格,、開(kāi)發(fā)方面聯(lián)系一直是非常緊密的,,包括Apple也參與到其中。NVIDIA在這方面的很多經(jīng)驗(yàn),,也會(huì)得到一些體現(xiàn),。這兩個(gè)程序之間的移植也是很容易的,現(xiàn)在他使用CUDA C語(yǔ)言來(lái)寫(xiě),,OpenCL出來(lái)以后,,如果他想移植OpenCL的程序,相對(duì)來(lái)說(shuō)不用全部重頭寫(xiě),。
問(wèn):
這個(gè)東西能否用在微軟上,?
答:
可以,像OpenGL也不是微軟的,,但是一樣可以在微軟上跑,。
問(wèn):
現(xiàn)在一般都是OpenCL,?
答:
這個(gè)是程序模型的原因,而且現(xiàn)在看起來(lái)在OpenCL在Vista下,,目前看起來(lái)沒(méi)有太大的問(wèn)題,。原來(lái)大家都一直以為在Vista下面OpenCL不會(huì)有ICD,實(shí)際上最后還是有ICD。這個(gè)東西的話現(xiàn)在OpenGL的軟件,,我經(jīng)常跑各種各樣的專業(yè)軟件,,很多在OpenGL下來(lái)以后都沒(méi)有問(wèn)題,非常典型的OpenGL的應(yīng)用程序跑地都挺好的,。對(duì)于OpenCL或者OpenGL在微軟下,,你可以看成是一個(gè)API,這個(gè)API你是可以安裝的,,比起微軟自己原來(lái)帶有的這個(gè)東西,。這算是一種應(yīng)用程序吧。
問(wèn):
OpenCL看似更趨向于底層開(kāi)發(fā)的API,,那相對(duì)于CUDA C來(lái)說(shuō),,OpenCL開(kāi)發(fā)的程序執(zhí)行效率會(huì)不會(huì)比CUDA C效率更高一些?
答:
完全不存在這個(gè)問(wèn)題,。說(shuō)老實(shí)話效率高不高,,并不取決于你用的什么語(yǔ)言,什么樣的API,,更大程度上取決于你的代碼,,你代碼的優(yōu)化程度是怎樣的?這個(gè)才是影響他代碼的效率,。
問(wèn):
在OpenCL出來(lái)之前,,CUDA并行計(jì)算的優(yōu)勢(shì)已經(jīng)很大了,現(xiàn)在為什么還非要出一個(gè)OpenCL通過(guò)中間的東西來(lái)調(diào)用,,我感覺(jué)不是費(fèi)一道事嗎,?
答:
OpenCL是一個(gè)跨平臺(tái)的一種API,這個(gè)API就像OpenGL一樣,,它也是希望跨平臺(tái),,就是跨軟件和硬件的API,OpenCL也是一樣也是跨軟件和硬件平臺(tái)的API,,算是一個(gè)業(yè)界的標(biāo)準(zhǔn),,不管是哪一家的,原則上都可以支持OpenCL這個(gè)平臺(tái),,支持API,。OpenCL不是NVIDIA推出來(lái)的,OpenCL最開(kāi)始是Apple提出來(lái)的,,但是NVIDIA確實(shí)是在這個(gè)標(biāo)準(zhǔn)的制定當(dāng)中,,NVIDIA和Apple進(jìn)行了很緊密的合作,然后NVIDIA提供了很多支持包括硬件方面的支持,。 模式不一樣適用的人群也不一樣,。適用的人群也不一樣,,我的理解是OpenCL和OpenGL他們?cè)诤芏喾矫娑挤浅5慕咏绻?xí)慣使用OpenGL他如果用OpenCL來(lái)開(kāi)發(fā)的話會(huì)感覺(jué)到輕車熟路,,就像是Computer shader也一樣,,如果你是多媒體這方面的應(yīng)用,你又想使用圖形又想使用GPU的來(lái)計(jì)算,,你用Computer shader來(lái)做很容易,。但是對(duì)CUDA C來(lái)說(shuō),它是用的人群是你能夠使用C語(yǔ)言的人你都可以使用CUDA C來(lái)開(kāi)發(fā),。使用人群完全是不一樣的,,我想可能也有一些人雖然他也會(huì)C語(yǔ)言,但是他還是希望用OpenCL來(lái)進(jìn)行開(kāi)發(fā),,用他跨平臺(tái)的特性,。另外或者因?yàn)槠渌囊恍┰?,包括他希望更多?duì)硬件方面的控制,然后他應(yīng)用軟件里面他可能希望對(duì)內(nèi)存進(jìn)行完全的控制,,這些用戶的話他可能就會(huì)選用OpenCL來(lái)進(jìn)行開(kāi)發(fā)。這是兩個(gè)不同的東西,。我相信即使OpenCL出來(lái)以后,CUDA C語(yǔ)言的使用者還是會(huì)越來(lái)越多的,。
如果認(rèn)為一種開(kāi)發(fā)環(huán)境就可以取代其他的開(kāi)發(fā)環(huán)境,,這個(gè)是不現(xiàn)實(shí)的。我舉個(gè)例子來(lái)說(shuō)在X86的架構(gòu)上,,除了C語(yǔ)言以外還有Java,、Fortran還有Pascal語(yǔ)言,這些不可能互相取代的,,每種語(yǔ)言,、每種API都有它使用的人群,都有喜歡用的人,。不同的語(yǔ)言,、不同的API都會(huì)滿足不同人群的。我覺(jué)得現(xiàn)在不是太多,,GPU計(jì)算和API語(yǔ)言不是太多,,現(xiàn)在還比較少,NVIDIA還會(huì)不斷地推出Java,、Pascal或者C++也會(huì)支持,。如果以前沒(méi)有Fortran,那些老年人你要讓他們學(xué)習(xí)C語(yǔ)言的話,他們可能用Fortran用了幾十年,,所以說(shuō)讓他開(kāi)發(fā)的話他就比較痛苦,,現(xiàn)在有了Fortran,他就可以直接用Fortran來(lái)寫(xiě)CUDA的程序,,說(shuō)不同開(kāi)發(fā)的途徑有不同的用戶,,這個(gè)是肯定的。
問(wèn):
Havok現(xiàn)在怎么樣了,?
答:
Havok目前為止基本上只能使用CPU做物理計(jì)算,,而PhysX可以使用GPU、可以使用CPU也可以使用PPU來(lái)做物理方面的計(jì)算,。當(dāng)然這三種里面GPU的效率是最高的,,PPU的話估計(jì)現(xiàn)在也沒(méi)什么人買(mǎi),,GPU的效率是最高的,,而且他真的是可以帶來(lái)10倍的性能提升,這個(gè)性能提升在物理計(jì)算方面,,CPU和GPU相比的話性能提升10倍,這是很常見(jiàn)的,。而且PhysX它是可以作為一種最基本的平臺(tái),,還有很多第三方的中間件在上面,基于PhysX,。它實(shí)際上是利用PhysX的平臺(tái)可以實(shí)現(xiàn)別的東西,比如類似于人工智能,。NVIDIA曾經(jīng)給大家提供過(guò)一個(gè)美式橄欖球的游戲視頻,那個(gè)游戲真的是很酷,,但是我不能放給大家看,,那家公司要求NVIDIA只能提供視頻給大家,不能把游戲給大家看,。真的是很酷,,非常大的場(chǎng)面,那個(gè)場(chǎng)面里面每個(gè)觀眾都是一個(gè)不同的人,,有一個(gè)體育場(chǎng)9000人,,每個(gè)觀眾都是一個(gè)實(shí)際的人,而且每個(gè)觀眾都是不太一樣的,。最主要他真正的把人的動(dòng)作模擬的非常逼真,,你撞擊撞到什么位置,,比如說(shuō)你看到撞過(guò)來(lái)的你會(huì)下意識(shí)的做一些防守的動(dòng)作。這些防守的動(dòng)作人跑過(guò)來(lái)不同的方向,,動(dòng)作也不一樣的,。比如你跌倒,跌倒空中你可能會(huì)有下意識(shí)的支撐動(dòng)作,,這些都會(huì)有,,以后游戲真的是會(huì)越來(lái)越逼真。NVIDIA所謂靜態(tài)逼真和動(dòng)態(tài)逼真就是這樣,。靜態(tài)逼真像這個(gè),,Crysis已經(jīng)做的很逼真了,但是真正動(dòng)起來(lái)還是感覺(jué)比較僵硬,,就是整個(gè)場(chǎng)景里面不管人物的動(dòng)作或者其他的運(yùn)動(dòng)都是事先設(shè)置好的,,就像放的錄像一樣,而不是真正時(shí)時(shí)運(yùn)算出來(lái)的,。如果你使用大量物理計(jì)算的話,,真的可以獲得很好的動(dòng)態(tài)逼真度。如果要實(shí)時(shí)計(jì)算對(duì)硬件的要是就會(huì)很高,,如果持有CPU加速的話它的動(dòng)態(tài)架構(gòu)和NVIDIA的動(dòng)態(tài)架構(gòu)就有區(qū)別,,就會(huì)影響速度不一樣。Havok用CPU來(lái)做物理計(jì)算,,它計(jì)算能力只能那么高,,你里面設(shè)置的物理效果相對(duì)來(lái)說(shuō)就會(huì)很有限。而且CPU還有很重要的任務(wù)在人工智能或者場(chǎng)景管理的方面,,所以說(shuō)使用GPU來(lái)做物理方面的加速是非常有效的。另外還有一點(diǎn)新的180驅(qū)動(dòng)支持更多的GPU PhysX的配置,,你可以使用2片的顯卡,,一片用來(lái)渲染,一片用來(lái)做物理加速,,這是效率最高的一種方式,。你用一片來(lái)做同時(shí)做渲染同時(shí)做物理計(jì)算,這也是可以的,,和純粹使用CPU做物理計(jì)算的話性能會(huì)高很多,,但是并行計(jì)算和渲染都是需要GPU的計(jì)算資源,所以如果你用單獨(dú)的一片顯卡的話,,用來(lái)做物理加速的話,,性能又會(huì)得到一個(gè)很大的提升。大家最好可以測(cè)試一下這方面的效果,。
問(wèn):
比如像EA的100多款游戲,,它那個(gè)PhysX主要是用GPU運(yùn)算還是CPU運(yùn)算,?
答:
只要是PhysX支持的游戲當(dāng)然是GPU了。每一款游戲都可以采用不同的策略,,我相信這些游戲開(kāi)發(fā)商的話也會(huì)采用不同的策略來(lái)處理這些事情,,當(dāng)然他最好的效果肯定是使用GPU來(lái)做物理這方面的計(jì)算,然后游戲里面放大量的物理效果,,這是最好的方式,。當(dāng)然也會(huì)有一些比較簡(jiǎn)化的模式,就是說(shuō)你沒(méi)有NVIDIA的顯卡,,然后給你提供一個(gè)比較簡(jiǎn)單,,物理效果比較少的模式。你還可以運(yùn)行,,但是物理效果帶來(lái)的各種各樣的好處相對(duì)就比較少,。這也是為什么跟大家強(qiáng)調(diào)的,NVIDIA現(xiàn)在叫GeForce + CUDA,,里面有很多的新功能,,PhysX是NVIDIA獨(dú)有的,這是別人沒(méi)有辦法做到的,。你要想作為一個(gè)玩家,,你想享受更好的效果當(dāng)然要在NVIDIA的顯卡上運(yùn)行,才會(huì)有更好的效果,。這個(gè)市場(chǎng)是開(kāi)放的,,誰(shuí)都可以去,但是看誰(shuí)能夠跑在前面,。
問(wèn):
PhysX是跨平臺(tái)的嗎,?PhysX主要是用于游戲嗎?現(xiàn)在大部分的游戲基本上都是DirecX的,。
答:
游戲機(jī)也可以支持,。OpenGL和DirecX的API是獨(dú)立的,現(xiàn)在OpenGL游戲確實(shí)越來(lái)越少,,所以大部分的游戲都是DirecX的,。
問(wèn):
PhysX不是跑在CPU上的?
答:
他是跑在GPU上,。對(duì)于PhysX來(lái)說(shuō)CPU也可以跑,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多