HD7970脫胎換骨全測試!5年架構(gòu)大革命
第二章/第四節(jié) HD2900XT走向不歸路:超長指令集的弊端
R520->R580的成功,多達(dá)48個(gè)著色單元功不可沒,這讓ATI對龐大的ALU運(yùn)算單元深信不疑。ATI認(rèn)為只要繼續(xù)擴(kuò)充著色單元,就能滿足新一代DX10及Shader Model 3.0的要求。
著色單元的結(jié)構(gòu):
在圖形處理中,最常見的像素都是由RGB(紅黃藍(lán))三種顏色構(gòu)成的,加上它們共有的信息說明(Alpha),總共是4個(gè)通道。而頂點(diǎn)數(shù)據(jù)一般是由XYZW四個(gè)坐標(biāo)構(gòu)成,這樣也是4個(gè)通道。在3D圖形進(jìn)行渲染時(shí),其實(shí)就是改變RGBA四個(gè)通道或者XYZW四個(gè)坐標(biāo)的數(shù)值。為了一次性處理1個(gè)完整的像素渲染或幾何轉(zhuǎn)換,GPU的像素著色單元和頂點(diǎn)著色單元從一開始就被設(shè)計(jì)成為同時(shí)具備4次運(yùn)算能力的運(yùn)算器(ALU)。

數(shù)據(jù)的基本單元是Scalar(標(biāo)量),就是指一個(gè)單獨(dú)的值,GPU的ALU進(jìn)行一次這種變量操作,被稱做1D標(biāo)量。由于傳統(tǒng)GPU的ALU在一個(gè)時(shí)鐘周期可以同時(shí)執(zhí)行4次這樣的并行運(yùn)算,所以ALU的操作被稱做4D Vector(矢量)操作。一個(gè)矢量就是N個(gè)標(biāo)量,一般來說絕大多數(shù)圖形指令中N=4。所以,GPU的ALU指令發(fā)射端只有一個(gè),但卻可以同時(shí)運(yùn)算4個(gè)通道的數(shù)據(jù),這就是SIMD(Single Instruction Multiple Data,單指令多數(shù)據(jù)流)架構(gòu)。
R580的Shader單元結(jié)構(gòu)
顯然,SIMD架構(gòu)能夠有效提升GPU的矢量處理性能,由于VS和PS的絕大部分運(yùn)算都是4D Vector,它只需要一個(gè)指令端口就能在單周期內(nèi)完成4倍運(yùn)算量,效率達(dá)到100%。但是4D SIMD架構(gòu)一旦遇到1D標(biāo)量指令時(shí),效率就會(huì)下降到原來的1/4,3/4的模塊被完全浪費(fèi)。為了緩解這個(gè)問題,ATI和NVIDIA在進(jìn)入DX9時(shí)代后相繼采用混合型設(shè)計(jì),比如R300就采用了3D+1D的架構(gòu),允許Co-issue操作(矢量指令和標(biāo)量指令可以并行執(zhí)行),NV40以后的GPU支持2D+2D和3D+1D兩種模式,雖然很大程度上緩解了標(biāo)量指令執(zhí)行效率低下的問題,但依然無法最大限度的發(fā)揮ALU運(yùn)算能力,尤其是一旦遇上分支預(yù)測的情況,SIMD在矢量處理方面高效能的優(yōu)勢將會(huì)被損失殆盡。
DX10時(shí)代,混合型指令以及分支預(yù)測的情況更加頻繁,傳統(tǒng)的Shader結(jié)構(gòu)必須做相應(yīng)的改進(jìn)以適應(yīng)需求。NVIDIA的做法是將4D ALU全部打散,使用了MIMD(Multi Instruction Multiple Data,多指令多數(shù)據(jù)流),而AMD則繼續(xù)沿用SIMD架構(gòu),但對Shader微架構(gòu)進(jìn)行了調(diào)整,稱為超標(biāo)量架構(gòu)。
R600的5D超標(biāo)量流處理器架構(gòu):
作為ATI的首款DX10 GPU,架構(gòu)上還是有不少改進(jìn)的,DX10統(tǒng)一渲染架構(gòu)的引入,讓傳統(tǒng)的像素渲染單元和頂點(diǎn)渲染單元合二為一,統(tǒng)稱為流處理器。R600總共擁有64個(gè)Shader單元,每個(gè)Shader內(nèi)部有5個(gè)ALU,這樣總計(jì)就是320個(gè)流處理器。
R600的Shader單元結(jié)構(gòu)
R600的Shader有了很大幅度的改進(jìn),總共擁有5個(gè)ALU和1個(gè)分支執(zhí)行單元,這個(gè)5個(gè)ALU都可以執(zhí)行加法和乘加指令,其中1個(gè)"胖"的ALU除了乘加外之外還能夠進(jìn)行一些函數(shù)(SIN、COS、LOG、EXP等)運(yùn)算,在特殊條件下提高運(yùn)算效率!
與R580不同的是,R600的ALU可以在動(dòng)態(tài)流控制的支配下自由的處理任何組合形式的指令,諸如1+1+1+1+1、2+2+1、2+3、4+1等組合形式。所以AMD將R600的Shader架構(gòu)稱作Superscalar(超標(biāo)量),完美支持Co-issue(矢量指令和標(biāo)量指令并行執(zhí)行)。
R600超長指令集的弊端:
從Shader內(nèi)部結(jié)構(gòu)來看,R600的確是超標(biāo)量體系,但如果從整個(gè)GPU宏觀角度來看,R600依然是SIMD(單指令多數(shù)據(jù)流)的VLIW(超長指令集)體系:5個(gè)ALU被捆綁在一個(gè)SIMD Shader單元內(nèi)部,所有的ALU共用一個(gè)指令發(fā)射端口,這就意味著Shader必須獲得完整的5D指令包,才能讓內(nèi)部5個(gè)ALU同時(shí)運(yùn)行,一旦獲得的數(shù)據(jù)包少于5條指令,或者存在條件指令,那么R600的執(zhí)行效率就會(huì)大打折扣。
例如:指令一:a=b+c;指令二:d=a*e。這兩條指令中,第二條指令中的a必須等待第一條指令的運(yùn)算結(jié)果,出現(xiàn)這樣的情況時(shí)候,兩條指令大多數(shù)情況下就不能實(shí)現(xiàn)超標(biāo)量執(zhí)行了。
顯然,想要完整發(fā)揮R600的性能必須滿足苛刻的條件,這個(gè)條件不僅對驅(qū)動(dòng)和編譯器提出了額外的要求,而且要求程序必須讓條件指令不存在任何關(guān)聯(lián)性,難度可想而知。最終結(jié)果就是絕大多數(shù)情況下R600都無法發(fā)揮出的理論性能,而且其執(zhí)行效率會(huì)因?yàn)閺?fù)雜指令的增多而不斷下降。
關(guān)注我們


