適者生存!顯卡 DirectX API 進(jìn)化論
★ 類人猿——GeForce 8800
無論從哪個(gè)方面來看,GeForce 8800與DX9時(shí)代的Radeon 9700都非常相似,微軟的新一代API尚未正式發(fā)布,而新顯卡居然開賣了大半年,雖然沒有新游戲的支持,但在老游戲下的性能依然非常完美。因此每一代成功的顯卡最關(guān)鍵的還不是API,還是核心架構(gòu)。DX10是API的又一次革命,而G80則是GPU架構(gòu)的一次偉大革命:
如果說R580像素與紋理3:1的比例讓人很費(fèi)解的話,那么G80的流處理器設(shè)計(jì)則讓用戶們一頭霧水:從G71的24條像素管線一下變成了128個(gè)流處理器,哪來的這么多?
傳統(tǒng)的GPU Shader架構(gòu)
傳統(tǒng)的Shader不管是像素還是頂點(diǎn),其實(shí)都是SIMD(單指令多數(shù)據(jù)流)結(jié)構(gòu),就是個(gè)4D矢量處理器,可以一次性的改變像素的RGBA數(shù)據(jù)或者頂點(diǎn)的XYZW數(shù)據(jù)。而G80的流處理器則是1D標(biāo)量處理器,它一次只能計(jì)算像素和頂點(diǎn)4個(gè)數(shù)據(jù)中的1個(gè),如此說來效率豈不是很低?
當(dāng)然不是,因?yàn)殡S著游戲的發(fā)展,GPU所要處理的指令已經(jīng)不是4D這種常規(guī)數(shù)據(jù)流了,進(jìn)入DX10時(shí)代后Z緩沖區(qū)(1D)或紋理存取(2D)等非4D指令所占比重越來越多,此時(shí)傳統(tǒng)的Shader單元在執(zhí)行此類指令時(shí)的效率會(huì)降至1/2甚至1/4,即便有Co-issue技術(shù)的支持效率改進(jìn)也十分有限。
G80的SP
而G80 1D標(biāo)量流處理器執(zhí)行各種類型指令時(shí)的效率都能達(dá)到100%,這也就是NVIDIA對(duì)于GPU架構(gòu)大換血的主要目的。G80的這種架構(gòu)被稱為MIMD(多指令多數(shù)據(jù)流),其特色就是執(zhí)行效率非常高,但也不是沒有缺點(diǎn),理論運(yùn)算能力偏低、晶體管消耗較大,當(dāng)然由于對(duì)手產(chǎn)品實(shí)力不行,這些缺點(diǎn)在很長一段時(shí)間內(nèi)都沒有被發(fā)現(xiàn)。
而且NVIDIA的1D標(biāo)量流處理器還可以異步工作在超高頻率之下,一般是GPU核心頻率的兩倍,由此大幅提升了渲染能力。這一技術(shù)ATI至今都未能實(shí)現(xiàn)。
★ ATI的DX10圖形架構(gòu)——R600
與革命性的G80架構(gòu)不同,R600身上有很多傳統(tǒng)GPU的影子,其Stream Processing Units很像上代的Shader Units,它依然是傳統(tǒng)的SIMD架構(gòu)。
R600擁有4個(gè)SIMD陣列,每個(gè)SIMD陣列包括了16個(gè)Stream Processing Units,這樣總共就是64個(gè),但不能簡單地認(rèn)為它擁有64個(gè)流處理器,因?yàn)镽600的每個(gè)Units內(nèi)部包含了5個(gè)ALU:
我們來仔細(xì)看看R600的流處理器架構(gòu):Branch Execution Unit(分歧執(zhí)行單元)就是指令發(fā)射和控制器,它獲得指令包后將會(huì)安排至它管轄下5個(gè)ALU,進(jìn)行流控制和條件運(yùn)算。General Purpose Registers(通用寄存器)存儲(chǔ)輸入數(shù)據(jù)、臨時(shí)數(shù)值和輸出數(shù)據(jù),并不存放指令。
由于內(nèi)部的5個(gè)1D ALU共享同一個(gè)指令發(fā)射端口,因此宏觀上R600應(yīng)該算是SIMD(單指令多數(shù)據(jù)流)的5D矢量架構(gòu)。但是R600內(nèi)部的這5個(gè)ALU與傳統(tǒng)GPU的ALU有所不同,它們是各自獨(dú)立能夠處理任意組合的1D/2D/3D/4D/5D指令,完美支持Co-issue(矢量指令和標(biāo)量指令并行執(zhí)行),因此微觀上可以將其稱為5D Superscalar超標(biāo)量架構(gòu)。
通過上圖就可以清楚的看到,單指令多數(shù)據(jù)流的超標(biāo)量架構(gòu)可以執(zhí)行任意組合形式的混合指令,在一個(gè)Stream Processing Units內(nèi)部的5個(gè)ALU可以在單時(shí)鐘周期內(nèi)進(jìn)行5次MAD(Multiply-Add,乘加)運(yùn)算,其中比較“胖”的ALU除了MAD之外還能執(zhí)行一些函數(shù)(SIN、COS、LOG、EXP等)運(yùn)算,在特殊條件下提高運(yùn)算效率!
現(xiàn)在我們就知道R600確實(shí)擁有64x5=320個(gè)流處理器。R600的流處理器之所以能比G80多好幾倍就是得益于SIMD架構(gòu),可以用較少的晶體管堆積出龐大規(guī)模的流處理器。但是在指令執(zhí)行效率方面,SIMD架構(gòu)非常依賴于將離散指令重新打包組合的算法和效率,正所謂有得必有失。
★ 總結(jié):DX10架構(gòu)G80笑到了最后
通過前面的分析我們可以初步得出這樣的結(jié)論:G80的MIMD標(biāo)量架構(gòu)需要占用額外的晶體管數(shù),在流處理器數(shù)量和理論運(yùn)算能力方面比較吃虧,但卻能保證超高的執(zhí)行效率;而R600的SIMD超標(biāo)量架構(gòu)可以用較少的晶體管數(shù)獲得很多的流處理器數(shù)量和理論運(yùn)算能力,但執(zhí)行效率方面卻不如人意。
G80的架構(gòu)顯然要比R600改進(jìn)更為徹底,所以打從一開始G80/G92就遙遙領(lǐng)先與R600/RV670,其后續(xù)產(chǎn)品GT200一如既往的保持領(lǐng)先優(yōu)勢,但幅度沒有G80那么大了,因?yàn)镽600的架構(gòu)的特性就是通過數(shù)量彌補(bǔ)效率的不足。
關(guān)注我們
