1. 程式人生 > 其它 >GPU顯示卡架構

GPU顯示卡架構

GPU顯示卡架構

GPU架構“征途之旅”即日起航

如果成為一個資深DIY玩家,想與眾多DIY高手“高談闊論”GPU架構設計,先必須弄明白顯示卡GPU架構設計的基本思想和基本原理,讀懂GPU架構圖正是這萬里長征的第一步。

GPU顯示卡架構圖

分析如下問題

一、頂點、畫素、著色器是什麼;

二、SIMD與MIMD的架構區別;

三、A/N在統一渲染架構革新中的三次交鋒情況如何;

四、為什麼提出並行架構設計;

五、A/N兩家在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模組幾乎閒置。為了解決這種資源被浪費的情況,ATINVIDIA在進入DX9時代後,相繼採用混合型設計,比如,R300就採用了3D+1D的架構,允許Co-issue操作(向量指令和標量指令可以並行執行),NV40以後的GPU支援2D+2D和3D+1D兩種模式,雖然很大程度上緩解了標量指令執行效率低下的問題,但依然無法最大限度的發揮ALU運算能力,一旦遇上分支預測的情況,SIMD在向量處理方面高效能的優勢將會大大降低。

分析原因:在早期,傳統的1條渲染管線包含了4個基本單元,大多數程式指令都是4D的,所以執行效率會很高。隨著API的不斷革新,以及遊戲設計中複雜的Shader指令的發展,4D指令的出現比例開始逐步下降,1D/2D/3D等混合指令開始大幅出現,傳統的管線式架構效率開始越來越低下。

GPU架構大變革:統一渲染架構襲來

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統一架構設計革新

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管理方面。

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統一架構設計革新

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架構設計思想是關鍵

回顧總結: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達人的最終夢想。

參考連結:

https://vga.zol.com.cn/238/2386200_all.html

人工智慧晶片與自動駕駛