流處理器緣何差6倍!A/N GPU架構(gòu)解析
● “管線”的由來(lái)——1個(gè)時(shí)鐘周期4次運(yùn)算
在圖形處理中,最常見的像素都是由RGB(紅綠藍(lán))三種顏色構(gòu)成的,加上它們共有的信息說(shuō)明(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)算能力的算數(shù)邏輯運(yùn)算器(ALU)。

傳統(tǒng)像素管線/Shader示意圖
數(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(矢量)操作。

SIMD架構(gòu)示意圖
一個(gè)矢量就是N個(gè)標(biāo)量,一般來(lái)說(shuō)絕大多數(shù)圖形指令中N=4。所以,GPU的ALU指令發(fā)射端只有一個(gè),但卻可以同時(shí)運(yùn)算4個(gè)通道的數(shù)據(jù),這就是SIMD(Single Instruction Multiple Data,單指令多數(shù)據(jù)流)架構(gòu)。
● “管線”弊端越發(fā)明顯,引入混合型設(shè)計(jì)
顯然,SIMD架構(gòu)能夠有效提升GPU的矢量處理性能,由于頂點(diǎn)和像素的絕大部分運(yùn)算都是4D Vector,它只需要一個(gè)指令端口就能在單周期內(nèi)完成4倍運(yùn)算量,效率達(dá)到100%。但是4D SIMD架構(gòu)一旦遇到1D標(biāo)量指令時(shí),效率就會(huì)下降到原來(lái)的1/4,3/4的模塊被完全浪費(fèi)。為了緩解這個(gè)問(wèn)題,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í)行效率低下的問(wèn)題,但依然無(wú)法最大限度的發(fā)揮ALU運(yùn)算能力,尤其是一旦遇上分支預(yù)測(cè)的情況,SIMD在矢量處理方面高效能的優(yōu)勢(shì)將會(huì)被損失殆盡。
改進(jìn)的管線/Shader結(jié)構(gòu)
可以這么理解,傳統(tǒng)的1條管線里面包含了4個(gè)基本運(yùn)算單元,在早期這種架構(gòu)的執(zhí)行效率還是很高的,因?yàn)榇蠖鄶?shù)程序指令都是4D的。但由于API和游戲復(fù)雜Shader指令的發(fā)展,4D指令所占比重開始下降,3D/2D/1D等混合指令頻繁出現(xiàn),所以傳統(tǒng)的管線式架構(gòu)效率越來(lái)越低!
關(guān)注我們


