GPU架構「徵途之旅」即日起航
顯卡GPU架構之爭永遠是DIY玩家最津津樂道的話題之一,而對於眾多普通玩家來說經常也就看看熱鬧而已。大多數玩家在購買顯卡的時候其實想的是這款顯卡是否可以滿足我實際生活娛樂中的應用要求,而不大會很深入的關注GPU的架構設計。不過,如果你想成為一個資深DIY玩家,想與眾多DIY高手「高談闊論」GPU架構設計方面的話題的時候,那麼你首先且必須弄明白顯卡GPU架構設計的基本思想和基本原理,而讀懂GPU架構圖正是這萬裡長徵的第一步。
顯卡帝手把手教你讀懂GPU架構圖
通過本次GPU架構圖的「徵途之旅」,網友朋友將會和顯卡帝共同來探討和解密如下問題:
一、頂點、像素、著色器是什麼;
二、SIMD與MIMD的架構區別;
三、A/N在統一渲染架構革新中的三次交鋒情況如何;
四、為什麼提出並行架構設計;
五、A/N兩家在GPU架構設計的特點及其異同點是什麼。
以上目錄也正是本文的大致行文思路,顯卡帝希望能夠通過循序漸進的分析與解讀讓眾多玩家能夠對GPU架構設計有個初步的認識,並且能夠在讀完本文之後能對GPU架構圖進行獨立認知與分析的基本能力,這將是本人莫大的欣慰。
非統一架構時代的GPU架構組件解讀
上世紀的絕大多數顯示加速晶片都不能稱之為完整意義上的GPU,因為它們僅僅只有像素填充和紋理貼圖的基本功能。而NVIDIA公司在1999年所發布的GeForce 256圖形處理晶片則首次提出了GPU的概念。GPU所採用的核心技術有硬體T&L、立方環境材質貼圖和頂點混合、紋理壓縮和凹凸映射貼圖、雙重紋理四像素256位渲染引擎等,而硬體T&L(Transform and Lighting,多邊形轉換與光源處理)技術可以說是GPU問世的標誌。
演示硬體幾何和光影(T&L)轉換的Demo
● 傳統的固定渲染管線
渲染管線也稱為渲染流水線,是顯示晶片內部處理圖形信號相互獨立的的並行處理單元。在某種程度上可以把渲染管線比喻為工廠裡面常見的各種生產流水線,工廠裡的生產流水線是為了提高產品的生產能力和效率,而渲染管線則是提高顯卡的工作能力和效率。
什麼叫一條「像素渲染管線」?簡單的說,傳統的一條渲染管線是由包括Pixel Shader Unit(像素著色單元)+ TMU(紋理貼圖單元) + ROP(光柵化引擎)三部分組成的。用公式表達可以簡單寫作:PS=PSU+TMU+ROP 。從功能上看,PSU完成像素處理,TMU負責紋理渲染,而ROP則負責像素的最終輸出。所以,一條完整的像素管線意味著在一個時鐘周期完成至少進行1個PS運算,並輸出一次紋理。
● Shader(著色器)的引入
而GPU的下一次重大革新則是引入了Shader(著色器)。著色器替代了傳統的固定渲染管線,可以實現3D圖形學計算中的相關計算,由於其可編輯性,從而可以實現各種各樣的圖像效果而不用受顯卡的固定渲染管線限制。這極大的提高了圖像的畫質。而從GeForce 3到GeForce 9,GPU的發展都是一直基於這種用於顯卡硬體幾何架構/渲染過程的Shader來進行的。
傳統(像素)管線/Shader示意圖
● Shader(著色器)的分類
早期的Shader(著色器)有兩種, 一種是頂點著色器,稱為Vertex Shader(OpenGL稱為vertex program),取代固定渲染管線中的變換和光照部分,程式設計師可以自己控制頂點變換、光照等。另一種是像素著色器,稱為Pixel Shader(OpenGL稱為fragment program),取代固定渲染管線中的光柵化部分,程式設計師可以自己控制像素顏色和紋理採樣等。
3D場景的對象都是由頂點形成
關於頂點,我們需要小小說明一下:所有3D場景的對象都是由頂點形成。一個頂點是X、Y、Z坐標形成的3D空間中的一點,多個頂點聚在一起(至少四個)可形成一個多邊形,如三角形、立方體或更複雜的形狀,將材質貼在其上可使該組件(或幾個排好的組件)看起來更真實。上圖的3D立方體就是由八個頂點所形成,使用大量頂點,可形成弧線形對象等較複雜的圖像。
傳統shader指令結構
● GPU的像素著色單元和頂點著色單元
在圖形處理中,最常見的像素都是由RGB(紅綠藍)三種顏色構成的,加上它們共有的信息說明(Alpha),總共是4個通道。而頂點數據一般是由XYZW四個坐標構成,這樣也是4個通道。在3D圖形進行渲染時,其實就是改變RGBA四個通道或者XYZW四個坐標的數值。為了一次性處理1個完整的像素渲染或幾何轉換,GPU的像素著色單元和頂點著色單元從一開始就被設計成為同時具備4次運算能力的算數邏輯運算器(ALU)。
SIMD和MIMD兩種結構你知道嗎?
在我們繼續介紹GPU架構設計之前我們需要對SIMD和MIMD這兩種結構進行一個詳細的說明。1966年,MichealFlynn根據指令和數據流的概念對計算機的體系結構進行了分類,這就是所謂的Flynn分類法。Flynn將計算機劃分為四種基本類型,即SISD、MIMD、SIMD、MISD。
SIMD(Single Instruction Single Data Stream,單指令單數據流)結構
傳統的順序執行的計算機在同一時刻只能執行一條指令(即只有一個控制流)、處理一個數據(即只有一個數據流),因此被稱為單指令單數據流計算(Single Instruction Single Data Stream,SISD)。
MIMD(多指令流多數據流)結構
而對於大多數並行計算機而言,多個處理單元都是根據不同的控制流程執行不同的操作,處理不同的數據,因此,它們被稱作是多指令流多數據流計算機,即MIMD(Multiple Instruction Stream Multiple Data Stream,簡稱MIMD)計算機,它使用多個控制器來異步地控制多個處理器,從而實現空間上的並行性。
● 傳統SIMD架構在執行效率下降的原因分析
數據的基本單元是Scalar(標量),就是指一個單獨的值,GPU的ALU進行一次這種變量操作,被稱做1D標量。由於傳統GPU的像素著色單元和頂點著色單元從一開始就被設計成為同時具備4次運算能力的算數邏輯運算器(ALU),所以GPU的ALU在一個時鐘周期可以同時執行4次這樣的並行運算,所以ALU的操作被稱做4D Vector(矢量)操作。一個矢量就是N個標量,一般來說絕大多數圖形指令中N=4。
圖形指令中標量與矢量
由於頂點和像素的絕大部分運算都是4D Vector,它只需要一個指令埠就能在單周期內完成4倍運算量,顯然SIMD架構能夠有效提升GPU的矢量處理性能以使效率達到100%。但如果4D SIMD架構一旦遇上1D標量指令的時候,效率就會陡然降至原來的1/4,而其他的3/4模塊幾乎被閒置。為了解決這種資源被浪費的情況,ATI和NVIDIA在進入DX9時代後相繼採用混合型設計,比如R300就採用了3D+1D的架構,允許Co-issue操作(矢量指令和標量指令可以並行執行),NV40以後的GPU支持2D+2D和3D+1D兩種模式,雖然很大程度上緩解了標量指令執行效率低下的問題,但依然無法最大限度的發揮ALU運算能力,尤其是一旦遇上分支預測的情況,SIMD在矢量處理方面高效能的優勢將會大大降低。
分析一下其中的原因,我們可以得知:在早期,傳統的1條渲染管線包含了4個基本單元,而大多數程序指令都是4D的,所以執行效率會很高。然而隨著API的不斷革新以及遊戲設計中複雜的Shader指令的發展,4D指令的出現比例開始逐步下降,而1D/2D/3D等混合指令開始大幅出現,故而傳統的管線式架構效率開始越來越低下。
GPU架構大變革:統一渲染架構襲來
微軟DirectX 10對於統一渲染架構的提出,可謂是GPU架構設計的一場大變革。它的核心思想是:將Vertex Shader(頂點著色)和Pixel Shader(像素著色)單元合併成一個具備完整執行能力的US(Unified Shader,統一渲染)單元,指令可以直接面向底層的ALU而非過去的特定單元,所以在硬體層面US可以同時吞吐一切shader指令,同時並不會對指令進行任何的修改,也不會對shader program的編寫模式提出任何的強迫性的改變要求。
GS(幾何著色器)、PS(像素著色器)、VS(頂點著色器)首次三位一體:US
從DirectX 10開始,微軟真正將注意力開始轉向了Shader效率上來,藉助提升Shader效率來提升對應設計的運算單元的整體運行效率,而最終給玩家的體現就是帶來流暢度(幀數)的提升。當然也可以用來進行更複雜和靈活的其他操作。
●N卡第一代GPU統一架構核心之G80
2006年11月,NVIDIA發布了業界第一款DirectX 10構架的GPU——G80。G80由一套完整的包含仲裁資源的幾何處理單元,與之相連的8個SM陣列,6組TA(紋理尋址)和6組ROP(光柵化引擎)單元組成,整個構架以高速crossbar(交叉)總線直連。
G80的標量流處理器架構
NVIDIA在G80核心架構上把原來的4D著色單元完全打散,流處理器統統由矢量設計改為了標量運算單元。每一個ALU都有自己的專屬指令發射器,初代產品擁有128個這樣的1D運算器,稱之為流處理器(SP)。這些流處理器可以按照動態流控制智能的執行各種4D/3D/2D/1D指令,無論什麼類型的指令執行效率都能接近於100%。G80這種標量流處理器即MIMD(多指令流多數據流)架構。雖然說G80將GPU Shader執行效率提升到了一個新高度,但我們知道:4個1D標量ALU和1個4D矢量ALU的運算能力是相當的,前者需要4個指令發射端和4個控制單元,而後者只需要1個,如此一來MIMD架構所佔用的電晶體數就遠大於了SIMD架構,這正是採用MIMD架構的G80核心的軟肋。
●A卡第一代GPU統一架構核心之R600
2007年5月,AMD收購ATI之後推出的第一款DirectX 10 GPU——R600正式發布了。R600由一套幾何處理單元,獨立的線程仲裁器UTDP,與仲裁機構相連的SPU(流處理器)和TMU(紋理貼圖)單元,以及完整的後端所組成。整個構架以ringbus(環狀)總線進行連接。
R600的超標量流處理器架構
相比大膽革新的G80核心架構,從Stream Processing Units這一處可以觀察出:R600身上有些許傳統GPU的影子,因為SPU依然採用的是SIMD(單指令多數據流)架構。R600擁有4個SIMD陣列,每個SIMD陣列包括了16個Stream Processing Units,這樣總共就是64個,但不能簡單地認為它擁有64個流處理器,因為R600的每個Units內部包含了5個ALU,從微觀上來看即:5D Superscalar超標量架構。
5D Superscalar超標量架構
AMD歷代著色器演進
通過上圖就可以清楚的看到,SIMD(單指令多數據流)的超標量架構可以執行任意組合形式的混合指令,在一個Stream Processing Units內部的5個ALU可以在單個時鐘周期內進行5次MAD(Multiply-Add,乘加)運算,其中全功能的ALU除了MAD之外還能執行一些函數(SIN、COS、LOG、EXP等)運算,在特殊條件下提高了運算效率。
對比總結:英偉達的所採用的MIMD(多指令流多數據流)標量架構的G80核心需要佔用不少額外的電晶體,所以在流處理器數量和理論運算能力方面稍顯吃虧,但優點是GPU Shader執行效率很高;而AMD所採用的SIMD(單指令多數據流)超標量架構的R600核心則用較少的電晶體數實現了更多的流處理器數量和更高的理論運算能力,不過在執行效率方面則需要視情況而定了。
N卡第二、三次GPU統一架構設計革新
GPU架構的革新其實和CPU架構的革新很相似,比如說Tick-Tock(工藝年-構架年)模式。Tick-Tock(工藝年-構架年)是英特爾所提出的晶片技術發展戰略模式,Tick-Tock:奇數年更新製作工藝,偶數年更新微架構。其實在GPU的研發過程中也同樣是借鑑到了這種Tick-Tock模式。
Tick工藝年裡,G92和RV670在核心架構上並無太大改動,而主要體現在工藝製程的革新。
G92和RV670:核心架構沒有任何變化
●N卡第二次GPU統一架構設計革新
而真正的核心架構革新當屬GT200架構核心的推出,即NVIDIA第2代統一架構核心。
GT200構架圖
GT200在結構上與G80具有一定的傳承性。他們的前端構造是基本相同的,整體來講兩者之間大部分的區別來自於規模上的差異。GTX200核心微架構給我們主要帶來如下改進:
一、 每個SM可執行線程上限提升:G80/G92核心每個SM(即不可拆分的8核心流處理器)單元最多可執行768條線程,而GTX200核心的每個SM可執行高達1024條線程,同時GTX200還擁有更多的SM單元,故而晶片性能實力是之前的2.5倍。
二、 每個SM單元的指令寄存器翻倍:GTX200與G80核心在SM單元結構上基本相同的,但功能有所提升,在執行線程數增多的同時,NVIDIA還將每個SM單元中間的Local Memory容量翻倍(從16K到32K)。Local Memory用於存儲SM即將執行的上千條指令,容量增大意味著可以存儲更多的指令、超長的指令、或是各種複雜的混合式指令,這對於提高SM的執行效能大有好處。
三、增加了atomic單元以及SIMT特性:atomic單元的添加使得GT200具備了原子操作的能力,atomic單元和原子操作的引入也為未來NVIDIA構架最終實現並行化設計起到了關鍵的先導作用;SIMT特性的引入則可以使得程式設計師在進行指令搭建的過程中無需考慮GPU究竟是SIMD還是MIMD,從而將性能優化的方向專注於shader的拆分,合併,靈活搭配以及Thread管理方面。
GT200與G80的異同
●N卡第三次GPU統一架構設計革新
NVIDIA的GF100架構核心可謂是一款「千呼萬喚始出來」的GPU,可能是因為40nm製程良品率不足或者是NVIDIA希望力求打造一顆在DX11和GPU通用計算方面都相當完美的核心,所以這款GPU真的讓玩家等的太就了。
GF100架構設計
整體上看GF100核心架構,大致由四塊組成,而這四大塊就是GPC(Graphics Processing Cluster,圖形處理器簇),每個GPC單元都包含獨立的幾何引擎以及光柵化流水線,GPC模塊之間透過新加入的L2 cache進行通訊、kernel和Thread的協調以及數據共享。這無疑使得GF100的三角形吞吐量有了將近300%的提升,也實現了並行的分塊化的渲染動作,更使得DirectX 11所要求的TS單元直接融入到了整個光柵化流水線內部。
Polymorph Engines和Raster Engines在GF100中的設計
同時,我們在GF100核心架構圖和SM架構圖上可以看到,相比G80/92和GT200核心架構多了Polymorph Engines和Raster Engines功能模塊。那麼這兩個模塊有什麼作用了?
多形體引擎(PolyMorph Engine)
多形體引擎則要負責頂點拾取(Vertex Fetch)、細分曲面(Tessellation)、視口轉換(Viewport Transform)、屬性設定(Attribute Setup)、流輸出(Stream Output)等五個方面的處理工作,DX11中最大的變化之一細分曲面單元(Tessellator)就在這裡。Fermi GF100產品中有16個多形體引擎,每個SM一個,或者說每個GPC擁有四個。
光柵引擎(Raster Engine)
光柵引擎嚴格來說光柵引擎並非全新硬體,只是此前所有光柵化處理硬體單元的組合,以流水線的方式執行邊緣/三角形設定(Edge/Triangle Setup)、光柵化(Rasterization)、Z軸壓縮(Z-Culling)等操作,每個時鐘循環周期處理8個像素。GF100有四個光柵引擎,每組GPC分配一個,整個核心每周期可處理32個像素。
總而言之:GF100核心架構是自GPU進入DX10之後的最重大的一次架構革新,其在圖形架構和並行計算架構方面都有著革命性的突破。我們在GF100身上看得到了高效、高針對性、貼近需求的GPU架構設計理念。
A卡第二、三次GPU統一架構設計革新
進過了R600架構設計的陣痛期,AMD似乎要在第二次GPU架構革新戰爭中揚眉吐氣。而事實也證明了:這款相比於GT200更小巧的晶片,卻永遠著更大的魔力。
●A卡第三次GPU統一架構設計革新
AMD在RV770這款GPU核心架構上的革新可謂「大刀闊斧」,幾乎對所有的模塊都進行了改進,而從市場端所反應的銷量來看:這確實是一次很不錯的架構革新。
RV770 GPU系統架構圖
通過上面的架構圖我們首先來看看流處理器部分:RV670/R600是縱向4組SIMD陣列,每組16個Shader,每個Shader 5個流處理器;RV770是橫向10組SIMD陣列,每組16個Shader,每個Shader 5個流處理器,也就是說流處理器部分只是單純的規模擴充;其次、紋理單元和光柵單元部分數量翻了2.5倍,且抗鋸齒算法已經由R600/RV670的流處理器部分轉移至光柵單元部分,因此RV770的AA效率大幅提高;最後、RV770放棄了使用多年沿用的環形總線,回歸了交叉總線結構設計,有效提高了顯存利用率,並節約了顯存帶寬。總之:RV770的整體架構的全面革新使得其相比RV670有了前所未有的改變。
●A卡第三次GPU統一架構設計革新
雖然說AMD搶在競爭對手NVIDIA之前發布了DX11顯卡,但是相比較晚發布的GF100核心架構而言,RV870架構在改進方面顯得有些微不足道。
RV870(又稱Cypress)架構設計
對比RV870和RV770核心架構我們發現,RV870並非RV770一樣將1600個流處理器設計在同一區域,而是將1600個流處理器分為2組各800個流處理器。所以我們可以這樣認為:除了顯存位寬維持256bit不變之外,Cypress的其它所有規格都正好是RV770的兩倍,而且在流處理器部分可以看作是雙核心的設計,幾乎就是並排放置了兩顆RV770核心。
RV870的相關特性
在RV870核心架構設計中,AMD僅為其配備了合乎DirectX 11要求的寄存器資源,改進了UTDP對多線程的支持,在前端的幾何單元中插入了一組TS單元,同時將運算單元中的GDS提升到了64K。除此之外,我們僅能見到進一步放大的VLIW core規模和其他配套的紋理資源及後端資源。各資源的整體比例較之RV770並未發生本質性的改變,VLIW(Very Long Instruction Word,超長指令字) core的操作管理方式及周邊資源密度也未見任何實質性的變化,甚至其UTDP單元也依舊維持著搶佔式多線程的管理方式。
總之:除了增加了對DX11的支持,RV870(Cypress)相比RV770的改進而言可謂十分有限。也許AMD將HD5000系列顯卡的宣傳重心轉移到了40nm工藝製程、新一代GDDR5顯存和Eyefinity多屏顯示器技術上面去了。
回顧總結:GPU架構設計思想是關鍵
OK,進過了前面的詳細闡述,至少您已經對GPU架構已經有了一個相對全面的了解,最後我們就為大家總結下GPU架構革新的相關啟示:
DX9到DX10是一大轉折點:結束管線時代,開啟GPU統一渲染架構時代
在DX9時代,大家都是通過「(像素)管線」來衡量顯卡的性能等級,而到了DX10時代,統一渲染架構的引入使得顯卡不再區分「像素」和「頂點」,因此「管線」這種說法逐漸淡出了大家的視野,取而代之的是全新統一渲染架構的「流處理器」,「流處理器」的數量直接影響著顯卡的性能。
統一渲染架構
G80與R600的經典之戰:牢記歷史,我們會更深入的認識A/N之間的GPU大戰
從DX10到DX10.1再到DX11,轉眼間顯卡已經發展到了第四代,但實際上不管AMD還是NVIDIA,它們的新一代顯卡都是在最早的DX10顯卡架構基礎上不斷修改、優化、改進或擴充而來的。換句話說,即便是到了現如今的DX11時代,NVIDIA與ATI的性能大戰依然是G80與R600架構的延續罷了。
GPU統一渲染架構革新首次交鋒
看今朝GF100 PK RV970(Cayman):並行度是雙方架構決定性的差異
並行度是雙方架構決定性的差異
GF100採用了將幾何引擎完全融入到流水線中同時將流水線並行化的GPC結構設計,而RV970則採用了在RV870基礎上繼續維持幾何引擎的獨立,但幾何引擎內部拆分成對等的兩部分並實現並行化的結構設計。由此可見,AMD在GPU並行架構設計也開始在需求合理改進的途徑,但從幾何過程與流水線結合的緊密程度上去分析,NVIDIA的並行化結構設計似乎更加給力一些。
通過以上的基本了解和大致分析,希望玩家朋友對GPU架構圖有一個相對清晰的認識,能夠在對其他GPU架構圖的解析上起到觸類旁通的效用,並循序漸進的實現個人升級為GPU達人的最終夢想。