DirectX支配游戲!歷代GPU架構全解析
★ 首款DX10顯卡——GeForce 8800
無論從哪個方面來看,GeForce 8800與DX9時代的Radeon 9700都非常相似,微軟的新一代API尚未正式發布,而新顯卡居然開賣了大半年,雖然沒有新游戲的支持,但在老游戲下的性能依然非常完美。因此每一代成功的顯卡最關鍵的還不是API,還是核心架構。DX10是API的又一次革命,而G80則是GPU架構的一次偉大革命:
如果說R580像素與紋理3:1的比例讓人很費解的話,那么G80的流處理器設計則讓用戶們一頭霧水:從G71的24條像素管線一下變成了128個流處理器,哪來的這么多?

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


