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