GPGPU將取代CPU?搶CPU “飯碗”
如果你希望流暢地播放高清視頻,一定會(huì)選擇一款支持NVIDIA PureVideo或AMD Avivo的顯卡(這里指以前的ATI,由于ATI已經(jīng)被AMD收購(gòu),本文中統(tǒng)稱(chēng)為AMD)。視頻解碼原本是CPU的工作,可即便是雙核處理器,在播放1080p高清電影時(shí)仍然比較吃力。利用顯卡的PureVideo/Avivo視頻解碼加速功能,可以大大降低CPU的占用率,讓高清視頻能夠流暢地播放。從廣義來(lái)看,用顯卡來(lái)加速視頻解碼,這就是GPGPU的一種初級(jí)形態(tài)。
GPGPU,也有人形象地稱(chēng)為GP2U(GP的兩次方U)。這兩個(gè)GP代表了不同的含義,后一個(gè)GP表示圖形處理(Graphic Process),和U加在一起正是我們熟知的GPU(圖形處理器);前一個(gè)GP則表示通用目的(General Purpose),所以GPGPU一般也被稱(chēng)為通用圖形處理器或通用GPU。
在3D領(lǐng)域,GPU的用途很簡(jiǎn)單,就是為了更好地渲染3D場(chǎng)景,減輕CPU在圖形運(yùn)算方面的負(fù)擔(dān)。而時(shí)下剛剛出臺(tái)的GPGPU,則是將應(yīng)用范圍擴(kuò)展到了圖形之外,無(wú)論是科研教育、財(cái)務(wù)計(jì)算,還是在工業(yè)領(lǐng)域,GPGPU都得到了廣泛的使用,關(guān)于它的科研成果和新應(yīng)用模式也層出不窮。
GPGPU比CPU強(qiáng)在哪里?
細(xì)心的讀者可能會(huì)問(wèn)了,發(fā)展GPGPU有必要嗎?難道還有什么工作是GPU可以做,而CPU不能完成的?沒(méi)錯(cuò),CPU是一種通用處理器,它無(wú)所不能,但是在某些特定場(chǎng)合,它的能力又是相對(duì)有限的。
1.CPU的浮點(diǎn)運(yùn)算能力嚴(yán)重不足
和GPU相比,CPU最大的軟肋就是浮點(diǎn)運(yùn)算能力不足。現(xiàn)在主流的CPU產(chǎn)品,無(wú)論是Intel的還是AMD的,其浮點(diǎn)運(yùn)算能力大多在10Gflops以下(flops表示每秒鐘能夠完成的浮點(diǎn)運(yùn)算次數(shù),Gflops代表每秒10億次浮點(diǎn)運(yùn)算)。而GeForce 6系列的浮點(diǎn)運(yùn)算能力就已經(jīng)達(dá)到了40Gflops左右,GeForce 7950 GX2的浮點(diǎn)運(yùn)算能力更是達(dá)到了384Gflops??梢?jiàn),CPU和GPU的浮點(diǎn)運(yùn)算能力差距已不止一兩個(gè)數(shù)量級(jí)。
2.GPU的輸入/輸出帶寬遠(yuǎn)超CPU
如果輸入/輸出帶寬有限,縱然內(nèi)部性能再?gòu)?qiáng),也是無(wú)法被系統(tǒng)利用起來(lái)的。對(duì)于GPU而言,這并不是一個(gè)大問(wèn)題,作為提高場(chǎng)景真實(shí)度的一個(gè)重要方法,紋理映射功能很早就被加入到了GPU中,以解決GPU和顯存之間的輸入/輸出帶寬問(wèn)題。GPU和顯存之間的帶寬是CPU和內(nèi)存的10倍以上,GPU是“吃得下”,也“吐得出”,讓巨大的浮點(diǎn)運(yùn)算能力有了用武之地。
AMD的“流處理器”(Stream Processor)
3.GPU更適合重復(fù)的計(jì)算
GPU因?yàn)槭菍?zhuān)門(mén)為圖形運(yùn)算而設(shè)計(jì)的,考慮到了圖形運(yùn)算的特殊性。拿像素著色器(Pixel Shader)來(lái)說(shuō),當(dāng)前批次所有的待處理像素,都會(huì)執(zhí)行相同的像素著色程序,也就是說(shuō),相同或類(lèi)似的運(yùn)算會(huì)在海量的數(shù)據(jù)上重復(fù)運(yùn)行。這恰恰符合SIMD(單指令多數(shù)據(jù))的概念,讓GPU非常適合處理SIMD運(yùn)算,科學(xué)計(jì)算、數(shù)據(jù)庫(kù)分析等高性能計(jì)算正是SIMD類(lèi)型。因此不少在CPU上傷透腦筋的科研人員不得不將目標(biāo)轉(zhuǎn)向GPU,試圖利用GPU的這種優(yōu)化設(shè)計(jì)來(lái)進(jìn)行圖形之外的通用計(jì)算。
4.GPU擁有優(yōu)秀的編程語(yǔ)言
當(dāng)GPU的程序員在編寫(xiě)程序時(shí),會(huì)發(fā)現(xiàn)高級(jí)著色語(yǔ)言也會(huì)給他們不少幫助。以前編寫(xiě)著色程序需要使用匯編語(yǔ)言,難度大、效率低,如今具有類(lèi)C/C++的高級(jí)語(yǔ)言能夠極大地提高程序員的編程效率。微軟的HLSL、OpenGL的GLSL、斯坦福大學(xué)的RTSL,以及NVIDIA的Cg等高級(jí)著色語(yǔ)言都能夠隱藏掉底層硬件的技術(shù)細(xì)節(jié),提高GPU的開(kāi)發(fā)效率。在這一點(diǎn)上,盡管CPU的編程語(yǔ)言走在前列,但GPU也已經(jīng)逐漸趕了上來(lái),開(kāi)發(fā)和利用GPU比以前容易得多了。
DirectX 10時(shí)代的到來(lái),將讓GPU更加適合通用計(jì)算
看到這里,你應(yīng)該會(huì)疑惑,為什么對(duì)比的是GPU和CPU,GPGPU和GPU有什么區(qū)別?這是因?yàn)?,GPGPU就是以GP為基礎(chǔ)開(kāi)發(fā)的,GPU的優(yōu)勢(shì)也正是GPGPU的優(yōu)勢(shì)。從狹義的GPGPU來(lái)講,它在GPU的基礎(chǔ)上進(jìn)行了優(yōu)化設(shè)計(jì),使之更適合高性能計(jì)算,并能使用更高級(jí)別的編程語(yǔ)言,在性能和通用性上更加強(qiáng)大。 #p#page_title#e#
DirectX 10讓GPGPU迎來(lái)黃金時(shí)代
雖然GPGPU早在DirectX 9時(shí)代就已經(jīng)初現(xiàn)雛形,但只有在DirectX 10時(shí)代,新的GPU才能夠真正促進(jìn)GPGPU的成熟和高速發(fā)展。在浮點(diǎn)運(yùn)算能力上,GeForce 8800 GTX的浮點(diǎn)運(yùn)算能力達(dá)到了520 Gflops,是上一代頂級(jí)GPU的3倍以上!在輸入/輸出帶寬方面,上一代GPU只能最多訪問(wèn)4個(gè)頂點(diǎn)紋理和16個(gè)像素紋理,而DirectX 10時(shí)代的GPU可以最多訪問(wèn)128個(gè)紋理,紋理尺寸達(dá)到8192×8192,對(duì)于著色程序來(lái)說(shuō),這就等于“無(wú)限”!讓GPU和顯存可以實(shí)現(xiàn)充分地互訪。此外,GPU的通用計(jì)算主要是使用其像素著色器,上一代GPU的頂點(diǎn)著色器則毫無(wú)用武之地,而從NVIDIA的G80和AMD的R600開(kāi)始,DirectX 10的GPU都會(huì)采用統(tǒng)一著色器,所有的著色器都能用于通用計(jì)算,不會(huì)造成資源的浪費(fèi)
B4.jpg
AMD的兩種物理解決方案
NVIDIA的SLI物理解決方案
除了硬件的巨大進(jìn)步,Shader Model和著色語(yǔ)言的成熟也將有力地助推GPGPU的發(fā)展。由于早期的Shader Model 1.0和Shader Model 2.0不支持動(dòng)態(tài)流控制,只能提供有限的靈活性,阻礙了GPU的通用化。在DirectX 9.0c時(shí)期,動(dòng)態(tài)流控制和著色程序幾乎無(wú)限的資源訪問(wèn)能力,減少了編程時(shí)的限制。而在DirectX 10時(shí)代,Shader Model 4.0在動(dòng)態(tài)流控制和資源訪問(wèn)上讓程序員更加得心應(yīng)手,幾乎不用再擔(dān)心編寫(xiě)程序時(shí)有任何限制,這也將讓GPGPU在新時(shí)代的應(yīng)用有了更多的可能性。關(guān)于DirectX 10和Shader Model 4.0的詳細(xì)介紹,請(qǐng)參看本刊2006年8月上的《走進(jìn)DirectX 10》和8月下的《Shader Model 4.0絕密解封》。
GPGPU就在我們的身邊
依靠上述優(yōu)勢(shì),GPGPU在圖形運(yùn)算之外,能完成一些原本由CPU來(lái)處理的工作,以實(shí)現(xiàn)更高的處理速度和效率。
B6.jpg
GPGPU模擬風(fēng)在城市環(huán)境下(紐約時(shí)代廣場(chǎng))的流動(dòng)情況
B7.jpg
GPGPU模擬煙霧的擴(kuò)散效果。在紐約大學(xué)30顆GPGPU的集群上,它也只能在480×480分辨率下達(dá)到每秒80幀的繪制速度,勉強(qiáng)達(dá)到實(shí)時(shí)性的要求,由此可見(jiàn)流體物理所需要的計(jì)算能力有多高。
GPGPU看上去很遙遠(yuǎn),但它實(shí)際上就在我們的身邊。視頻的編解碼原本是CPU在負(fù)責(zé)處理,但由于高清視頻的盛行,龐大的數(shù)據(jù)運(yùn)算量讓CPU不堪重負(fù)。而在播放高清視頻時(shí),GPU本來(lái)是不參與處理的,強(qiáng)大的性能基本處于閑置狀態(tài)。因此NVIDIA和AMD分別開(kāi)發(fā)了PureVideo和Avivo技術(shù),利用GeForce 6/7系列和Radeon X1000系列GPU的像素著色器來(lái)加速視頻編解碼,包括視頻編碼過(guò)程中的4∶2∶2至4∶2∶0轉(zhuǎn)換、噪聲消除、逆3∶2PD矯正、反交錯(cuò),還包括視頻回放過(guò)程中的反交錯(cuò)、格式轉(zhuǎn)換、塊消除和后期處理等等。隨著DirectX 10時(shí)代的到來(lái),會(huì)有越來(lái)越多的視頻處理可以由GPU來(lái)完成。這可以說(shuō)是目前GPGPU最成熟、最廣泛的一種應(yīng)用,也是我們最常接觸到的廣義GPGPU
既然GPGPU可以應(yīng)用到視頻處理上,那么GPGPU是否可以應(yīng)用到音頻處理上呢?答案是肯定的。英國(guó)劍橋大學(xué)的一個(gè)小組曾經(jīng)宣布它們的音頻視頻交換(Audio Video Exchange)技術(shù)可以把音頻數(shù)據(jù)轉(zhuǎn)換成圖形數(shù)據(jù)交由GPU處理,然后再將GPU處理的數(shù)據(jù)讀出,并解釋成音頻數(shù)據(jù)播放出來(lái)。NVIDIA也表示過(guò)這一應(yīng)用是可行的。但由于種種原因,該項(xiàng)目似乎沒(méi)有了下文,進(jìn)度不明。
既然GPGPU能夠從CPU那里奪來(lái)視頻處理的任務(wù),目前正漸入佳境的物理加速當(dāng)然也少不了GPGPU。發(fā)布首款PhysX物理處理器(PPU)的AGEIA公司認(rèn)為,GPU和PPU應(yīng)該各自獨(dú)立負(fù)責(zé)圖形運(yùn)算和物理加速。不過(guò)NVIDIA和AMD顯然不這樣看,PPU和GPU相互獨(dú)立,在3D渲染計(jì)算量大的時(shí)候,PPU就會(huì)浪費(fèi);碰到物理計(jì)算量大的時(shí)候,GPU就浪費(fèi)了。因此完全可以在對(duì)GPU做少量改動(dòng)的情況下,讓GPU來(lái)完成PPU的工作,并且可以實(shí)時(shí)負(fù)載動(dòng)態(tài)調(diào)整,達(dá)到性能的最優(yōu)化。AMD在去年的臺(tái)北Computex上就展示了基于CrossFire系統(tǒng)的物理加速方案,當(dāng)一個(gè)系統(tǒng)中有三塊顯卡時(shí),可以使用其中一塊顯卡專(zhuān)門(mén)負(fù)責(zé)物理計(jì)算,而另外兩塊顯卡負(fù)責(zé)圖形渲染,即“2+1”模式;如果系統(tǒng)中有兩塊顯卡,則一塊負(fù)責(zé)物理計(jì)算,一塊負(fù)責(zé)圖形渲染,即“1+1”模式。NVIDIA同樣也在SLI平臺(tái)上實(shí)現(xiàn)了“1+1”模式的物理加速方案,而且兩家公司都聲稱(chēng)GPU加速物理運(yùn)算的速度遠(yuǎn)超PPU。在DirectX 10時(shí)代,統(tǒng)一著色構(gòu)架的采用,完全可以讓GPU進(jìn)一步加入物理計(jì)算引擎,讓物理處理和頂點(diǎn)處理、像素處理、幾何處理共享統(tǒng)一著色器。事實(shí)上,NVIDIA宣稱(chēng)G80中已經(jīng)加入了Quantum Effects技術(shù)來(lái)進(jìn)行物理加速,究竟效果如何,讓我們拭目以待。 #p#page_title#e#
當(dāng)然,除了上述這些我們能看得到的應(yīng)用,科學(xué)計(jì)算才是GPGPU真正的目標(biāo)。它強(qiáng)大的浮點(diǎn)運(yùn)算能力,很適合用來(lái)加速通用的矩陣計(jì)算,早期發(fā)表的GPGPU論文中,也大多是這種類(lèi)型。其中,最引人注目的就是對(duì)流體力學(xué)的模擬。眾所周知,流體力學(xué)的模擬十分復(fù)雜而且計(jì)算量大得驚人,用CPU來(lái)處理,既費(fèi)時(shí)又費(fèi)力,要達(dá)到實(shí)時(shí)繪制更是天方夜譚。為了提供足夠的模擬計(jì)算能力,紐約一所大學(xué)的研究所使用了30顆GPGPU的集群,終于基本實(shí)現(xiàn)了流體物理現(xiàn)象的實(shí)時(shí)模擬和繪制。
B8.jpg
B9.jpg
執(zhí)行相同的半線性查詢,GPU只需要CPU的十分之一時(shí)間就夠了;而執(zhí)行范圍查詢,GPU也只需要CPU的五分之一時(shí)間而已,可見(jiàn)GPGPU應(yīng)用于數(shù)據(jù)庫(kù)領(lǐng)域的優(yōu)勢(shì)
除了物理現(xiàn)象的模擬之外,GPGPU同樣在數(shù)據(jù)庫(kù)處理領(lǐng)域取得了很好的進(jìn)展。數(shù)據(jù)庫(kù)中最重要的一個(gè)操作就是對(duì)已有記錄進(jìn)行查詢,它包括關(guān)系查詢(Relational Query)、合取查詢(Conjunction Query)和范圍查詢(Range Query)等。在GPGPU中,我們可以把一個(gè)個(gè)像素當(dāng)作是數(shù)據(jù)項(xiàng),而用紋理來(lái)表示數(shù)據(jù)項(xiàng)的各個(gè)屬性,通過(guò)像素著色程序就可以對(duì)數(shù)據(jù)項(xiàng)的各種屬性進(jìn)行訪問(wèn)和操作。美國(guó)北卡羅萊納大學(xué)曾經(jīng)做過(guò)數(shù)據(jù)庫(kù)查詢操作的對(duì)比實(shí)驗(yàn),一組是在NVIDIA GeForce 5900上,另一組是在Intel雙路Xeon系統(tǒng)上。結(jié)果在幾乎所有的實(shí)驗(yàn)中,都是GeForce 5900的運(yùn)行性能遠(yuǎn)遠(yuǎn)優(yōu)于雙路Xeon系統(tǒng),可見(jiàn)兩者的數(shù)據(jù)庫(kù)查詢性能與它們的價(jià)格成反比。
B10.jpg
HMM搜索計(jì)算的性能對(duì)比
蛋白質(zhì)折疊計(jì)算的性能對(duì)比
AMD、NVIDIA加速研發(fā)GPGPU
由于巨大的商業(yè)價(jià)值,目前AMD和NVIDIA等巨頭都在加速研發(fā)GPGPU。
在2006年底的超級(jí)計(jì)算機(jī)大會(huì)上,AMD發(fā)布了業(yè)界首款“流處理器”(Stream Processor),專(zhuān)為工作站和服務(wù)器等純計(jì)算系統(tǒng)而設(shè)計(jì),適用于金融分析、地震偏移分析、生命科學(xué)等應(yīng)用領(lǐng)域。這款“流處理器”其實(shí)就是基于Radeon X1900顯卡(R580)開(kāi)發(fā)設(shè)計(jì)的。在實(shí)際性能方面,盡管它具有375Gflops的浮點(diǎn)運(yùn)算能力和64GB/s的存儲(chǔ)帶寬,但運(yùn)行Folding@Home分布式通用運(yùn)算時(shí),它的速度只比AMD Opteron 180雙核處理器50%左右,同時(shí)耗電量也更大。可以說(shuō)這只是一款GPGPU“雛形”,還遠(yuǎn)未發(fā)揮出GPGPU的真正威力。
在運(yùn)行Folding@Home分布式通用運(yùn)算時(shí),Radeon X1900比Opteron 180快50%
NVIDIA則在G80上使用了CUDA(Compute Unified Device Architecture,統(tǒng)一計(jì)算設(shè)備架構(gòu)),并在G80上集成了為通用計(jì)算而設(shè)計(jì)的緩存,讓128個(gè)統(tǒng)一著色器能夠協(xié)同進(jìn)行復(fù)雜的計(jì)算,同時(shí)還加入C編譯器,使GPU如虎添翼。此外,NVIDIA也聯(lián)合Adobe宣布,Adobe Acrobat 8和Adobe Reader 8軟件可以使用GPU來(lái)進(jìn)行2D加速,能大幅度加快PDF文檔的瀏覽速度,今后在打開(kāi)和翻頁(yè)大容量PDF文件時(shí)就不會(huì)像現(xiàn)在這么慢了。
當(dāng)然,GPGPU的研發(fā)也并非一帆風(fēng)順。除了GPU本身在發(fā)展時(shí)要解決耗電量過(guò)大和提高頻率的瓶頸問(wèn)題,GPGPU在體系結(jié)構(gòu)的設(shè)計(jì)上還有什么特殊要求呢?首先在在動(dòng)態(tài)流控制設(shè)計(jì)和實(shí)現(xiàn)方面,通用計(jì)算畢竟與圖形運(yùn)算不同,如果GPU對(duì)圖形運(yùn)算在動(dòng)態(tài)流控制上做了過(guò)多的優(yōu)化,就會(huì)降低通用計(jì)算的靈活性,可謂魚(yú)與熊掌不可兼得。此外,GPGPU要同時(shí)處理多種類(lèi)型的任務(wù)時(shí),就會(huì)存在GPU資源的競(jìng)爭(zhēng)問(wèn)題,在任務(wù)之間如何仲裁非常關(guān)鍵,處理不好就會(huì)適得其反。例如當(dāng)GeForce 8800要同時(shí)處理3D渲染和物理計(jì)算時(shí),如何仲裁和分配資源才能達(dá)到最好的性能?這個(gè)問(wèn)題肯定需要軟硬件工程師的共同努力才能找到較好的平衡點(diǎn)。
GPGPU會(huì)取代CPU嗎?
隨著GPU的日漸強(qiáng)大,GPGPU也開(kāi)始獲得越來(lái)越廣泛的應(yīng)用。那么,會(huì)不會(huì)有一天GPGPU的計(jì)算能力和靈活性都超越了CPU,屆時(shí)CPU何去何從?其實(shí),早在2004年的SIGGRAPH圖形大會(huì)上,就有科研人員在GPGPU論壇上預(yù)測(cè),六年之內(nèi)就出現(xiàn)CPU和GPU整合在一起的產(chǎn)品。這在當(dāng)時(shí)來(lái)說(shuō)無(wú)疑太過(guò)驚人,不過(guò)在AMD收購(gòu)ATI之后,情況則發(fā)生了大逆轉(zhuǎn)。AMD已經(jīng)計(jì)劃提供完整的計(jì)算平臺(tái),并打算在其制程轉(zhuǎn)向45nm的時(shí)候,實(shí)現(xiàn)CPU和GPU的整合,兩者不需要再單獨(dú)存在。因此最終的情形可能不是誰(shuí)會(huì)取代誰(shuí),而將誕生兼有圖形計(jì)算和通用計(jì)算的統(tǒng)一處理器。也許,它會(huì)被稱(chēng)為無(wú)所不能的XPU(X處理器)。