流處理器緣何差6倍!A/N GPU架構解析
● “管線”的由來——1個時鐘周期4次運算
在圖形處理中,最常見的像素都是由RGB(紅綠藍)三種顏色構成的,加上它們共有的信息說明(Alpha),總共是4個通道。而頂點數據一般是由XYZW四個坐標構成,這樣也是4個通道。在3D圖形進行渲染時,其實就是改變RGBA四個通道或者XYZW四個坐標的數值。為了一次性處理1個完整的像素渲染或幾何轉換,GPU的像素著色單元和頂點著色單元從一開始就被設計成為同時具備4次運算能力的算數邏輯運算器(ALU)。

傳統像素管線/Shader示意圖
數據的基本單元是Scalar(標量),就是指一個單獨的值,GPU的ALU進行一次這種變量操作,被稱做1D標量。由于傳統GPU的ALU在一個時鐘周期可以同時執行4次這樣的并行運算,所以ALU的操作被稱做4D Vector(矢量)操作。

SIMD架構示意圖
一個矢量就是N個標量,一般來說絕大多數圖形指令中N=4。所以,GPU的ALU指令發射端只有一個,但卻可以同時運算4個通道的數據,這就是SIMD(Single Instruction Multiple Data,單指令多數據流)架構。
● “管線”弊端越發明顯,引入混合型設計
顯然,SIMD架構能夠有效提升GPU的矢量處理性能,由于頂點和像素的絕大部分運算都是4D Vector,它只需要一個指令端口就能在單周期內完成4倍運算量,效率達到100%。但是4D SIMD架構一旦遇到1D標量指令時,效率就會下降到原來的1/4,3/4的模塊被完全浪費。為了緩解這個問題,ATI和NVIDIA在進入DX9時代后相繼采用混合型設計,比如R300就采用了3D+1D的架構,允許Co-issue操作(矢量指令和標量指令可以并行執行),NV40以后的GPU支持2D+2D和3D+1D兩種模式,雖然很大程度上緩解了標量指令執行效率低下的問題,但依然無法最大限度的發揮ALU運算能力,尤其是一旦遇上分支預測的情況,SIMD在矢量處理方面高效能的優勢將會被損失殆盡。
改進的管線/Shader結構
可以這么理解,傳統的1條管線里面包含了4個基本運算單元,在早期這種架構的執行效率還是很高的,因為大多數程序指令都是4D的。但由于API和游戲復雜Shader指令的發展,4D指令所占比重開始下降,3D/2D/1D等混合指令頻繁出現,所以傳統的管線式架構效率越來越低!
關注我們


