155b26765315aa0150458b230f6dfa3e 非常可惜大家無緣見到Kepler中低階顯卡了,因為從GTX 750 Ti以下將會是新架構Maxwell的天下。Maxwell插隊的原因是什麼我們不知道,但這已經打破過去2代換架構的規律。至於說好的Unified Virtual Memory(統一虛擬記憶體,簡稱UVM)功能呢?或許在完整版Maxwwell架構的GTX 800系列才能看到。

新架構首重效率

效率應該是現在各家廠商著重的重點,而這次Maxwell架構也是頂著「效率」的光環而來。這效率不僅代表著效能的提升,更代表電力消耗的降低。根據Maxwell架構白皮書所提供的數據,GTX 750 Ti擁有接近數年前卡王GTX 480的效能表現,且電力消耗更低於採用40nm製程的GF 100核心。那如何提升運算效率?更換製程或許是個方式,但這次NVIDIA使用的方式為重新設計架構,或者說是重新排列讓管線最佳化。

關鍵字:James Clerk Maxwell

Maxwell是英國物理學家,主要貢獻於電磁學領域,建立了Maxwell's equations(馬克士威方程組)。NVIDIA自從GTX 400系列之後,歷代核心代號皆以科學家為主。GTX 400系列核心代號是Fermi(費米)、GTX 600則是Kepler(克卜勒),而在Maxwell之後的則是義大利物理學家Volta(伏打)。圖片來源:Wikipedia

從Fermi到Maxwell的架構轉變

歷經2代Fermi、2代Kepler,到現在的Maxwell架構,從GPU構成方面來說,其實並沒有太大的變動。差別在於製程與電路的精進,並且改善溫控效率,在核心當中塞入更多的核心也就是CUDA Core。而CUDA Core又是GPU構成的最基本運算單位,理論上CUDA Core的數量會與效能成正比。那CUDA Core前身又是什麼?讓我們稍微服務一下新讀者,回頭溫習一下近10年的Shader(著色引擎)演進,再來探討Maxwell架構的改變。

GPU提供T&L功能

我們不用回顧到太久之前,從現在還可見的DirectX 9時代前面一些說起。早期遊戲與顯示卡還沒這麼複雜,主要負責的工作就是處理幾何圖形的變換,還有光線的渲染。當時遊戲影像生成的4個步驟,相信老玩家應該都有印象,那就是Transform(座標轉換)、Lighting(光線投影)、Triangle Setup(三角形設定),以及最後的Rendering(渲染)。

這些步驟當中,Transform與Lighting是由CPU負責,經常會將兩者簡稱為T&L。後來NVIDIA先將T&L加入到GPU功能當中,此後CPU就不需要負責這工作,也減輕遊戲對於CPU效能的需求。也就是因為GPU取代了CPU的T&L功能,這也讓T&L成為當時顯卡的規格指標之一。看哪張卡的T&L管線較多,自然能有較佳的效能。此時NVIDIA代表的顯卡為GeForce 256與GeForce 2 MX,其中GeForce 256是前幾張導入T&L功能的顯卡,但這不是最成功的,最成功的是以低價打入市場的GeForce 2 MX。

DirectX 10大一統時代

說完T&L,再來說說3D模組。直到DirectX 9末期以前,顯示卡架構中最重要的2個基本單元就是Vertex Shader(頂點著色引擎,簡稱VS)與Pixel Shader (像素著色引擎,簡稱PS)。看名字大概也了解它們的作用是什麼,重點要知道的是,Vertex Shader與Pixel Shader只能負責GPU賦予它的作用,Vertex Shader不能處理Pixel Shader的工作,反之亦然。這樣不是很沒有效率嗎?如果能互相幫忙是不是更好?是的,微軟想到解決方案。

在DirectX 10中,微軟取消了Vertex Shader與Pixel Shader,取而代之的是效率更高的Unified Shader(統一著色引擎)。換個名字大家可能更清楚,那就是Stream Processor(串流處理器,簡稱SP)。AMD與NVIDIA對於Stream Processor的稱呼變來變去,AMD大多簡稱為SP,或者是ALU(Arithmetic Logic Unit,算數邏輯單元)。至於NVIDIA則在Fermi之後統一將SP稱為CUDA Core而沿用至今。 

關鍵字:CUDA

CUDA是Compute Unified Device Architecture的縮寫,中文為統一計算架構,是NVIDIA推行的GPGPU技術。可使用GeForce 8系列之後的顯卡進行運算,相容於OpenCL以及自家的C-編譯器。自從Fermi架構推出後,以往通稱的SP全都改為CUDA Core。

Fermi:DX 11、高速運算的起點

若要談這次的Maxwell架構,得先從首度支援DirectX 11的Fermi架構說起,會讓人更容易了解。核心代號中的GF、GK乃至於現在的GM,其中的F、K、M代表的即為Fermi、Kepler與Maxwell。三者的設計雖有差異,但大致上仍有相當大的共通性,因此我們先從最初的Fermi開始看起。

遊戲是運算的延伸

從G80時代開始,NVIDIA就開始GPGPU(General-purpose computing on graphics processing units,通用繪圖處理器)的大型計畫,試圖利用平行運算搶攻高速運算領域。到了Fermi架構,重視平行運算的特色就更加明顯,且結合GT200與G80等老前輩的特色,核心架構可支援運算與遊戲。當時Fermi首度支援ECC(Error Correction Code),對於雙精度、快取等方面都有相當的進步。這些功能在現在的GPU或許已經習以為常,但對於10~20年前的GPU可是發展初期而已,而Fermi算是NVIDIA可以拿出檯面且有實質運算效能的代表產品。

基本構成第三代SM

先前提過SP也就是NVIDIA所謂的CUDA Core,是架構當中最基本的運算單元。那麼由CUDA Core與眾多元件組成的SM(Streaming Multiprocessor),則是GPU的基本運算區塊,內含SFU(Special Function Unit,特殊運算單元)、Instruction Cache、Warp Scheduler等元件。從Fermi到Maxwell的GPU架構,大多也是在SM當中做結構調整,不外乎是堆疊CUDA Core等元件數量,藉此提升運算效能。

Fermi所採用的第三代SM,現在看起來結構非常陽春,GF 100核心使用的SM內含32個CUDA Core而已,Kepler則是192個,到了Maxwell則是調整為128個。看似Maxwell的SM內藏CUDA Core數量較少,但L2容量從256KB提升到2MB,加上一些架構上的最佳化,單位效能才得以提升。

第三代SM單元基本架構

▲Fermi時期稱為SM,Kepler稱為SMX,到了Maxwell改名成SMM,但都是相同的東西。LD/ST指的是存(Load)取(Store)單元,SM內含16組代表周期內可執行16個執行緒。此外CUDA Core內亦有更小的元件,像是FP Unit(浮點數單元)等。 

PolyMorph處理Tessellation

說到Fermi就不能不提到PolyMorph Engine(多形體引擎),它是Fermi新增的硬體元件,附屬於SM當中,是專為DirectX 11設計的硬體架構。架構圖中可看到它位於SM底端,內含Vertex Fetch(頂點預取)、Tessellator(Tessellation產生器)、Viewport Transform(視口轉換)、Attribute Setup(屬性建立)與Stream Output(數據流輸出)等功能。PolyMorph Engine從Fermi到Kepler沒有太大的改變,但名稱改為PolyMorph Engine 2.0,Maxwell架構並未對於PolyMorph Engine多做著墨,應該仍延續Kepler的設計。

PolyMorph Engine運作時會先從緩衝區預取頂點,在SM內進行頂點與像素的運算,並且同時計算Tessellation參數,接著則是輸出Tessellation的頂點。確認後將資料傳送給Domain Shader(區域著色引擎,簡稱DS)跟Geometry Shader(幾何著色引擎,簡稱GS)運算。DS根據Hull Shader(外殼著色引擎,簡稱HS)加上Tessellator給予的數據,生成最終的3D模組頂點。完成本階段後後,會透過Displacement Mapping(位移貼圖),讓Tessellation生成的圖形表面更加立體與細緻。

至於Viewport Transform的作用,則是那字面上的視口轉換以及視角校正,完成後則是Attribute Setup,會將這些頂點參數轉換為方程式。最後Stream Output則是將這些數據傳送到記憶體內,接著讓SM之外的另一個單元Raster Engine來處理。

PolyMorph Engine功能

▲PolyMorph Engine是針對DirectX 11推出的新硬體架構,包含Vertex Fetch(頂點預取)、Tessellator(Tessellation產生器)、Viewport Transform(視口轉換)、Attribute Setup(屬性建立)與Stream Output(數據流輸出)。

Raster Engine負責2D化

Raster Engine簡單說就是負責將3D模組變成2D化,因為你看到的影像,並非實際的3D模組,而只是這3D模組的其中的某個「面」。Raster Engine的3個運作階段分別是Edge Setup(邊緣建立)、Rasterizer(光柵器)和Z-Cull(Z座標剔除)。可想像成窗外有顆樹,樹後有條被遮住的狗,雖說3D模組中狗是存在的,但受到視角的限制,從窗戶(螢幕)這角度來看狗是不存在的。Raster Engine則會將影像中看不見的部分去除,或者說是接近「平面化」。

在Fermi架構的GF 100核心中,共計有4組Raster Engine,Kepler架構的GK 104則也是4組Raster Engine。但因為Kepler的CUDA Core數量遠高於Fermi,因每組Raster Engine的負擔其實是提升的。至於Maxewll則因為目前只有中階的GM 107,無法得知高階版本的Raster Engine總數會是多少。但從目前知道的規格來看,GF 100的Raster Engine負擔128個CUDA Core的運算量,GK 104則是負擔384個,到了GM 107更是大幅增加到640個CUDA Core。雖然架構、製程等諸多因素無法直接比較,但可看到Raster Engine的負擔其實是增加的。

Raster Engine運作流程

▲Raster Engine的功能簡單來說就是3D變成2D,讓GPU產生的3D模組變成你看到螢幕上的2D影像。

負責排程的Warp Scheduler

GPU內的元件非常多,再講下去就沒完沒了,我們最後再講個重要的元件,那就是Warp Scheduler。字面上來看不難看出它是負責排程的單元,但排什麼東西的排程呢?原來CUDA Core會接受來自Warp Scheduler的指令,以便執行某個執行緒(Thread)。在Fermi當中每個SM內有2組Warp Scheduler,負責該SM內32個CUDA Core要處理的執行緒,而這些執行緒就是所謂的Warp。Warp Scheduler關係到運算效率,畢竟排程排的好,能高度利用GPU的運算能力,排的不好那就讓指令遲遲等,那效率就是場悲劇。

關鍵字:Tessellation

Tessellation原意是鑲嵌,大多翻譯為細分曲面(subdivision surface)、平面填充或密鋪。在支援DirectX 11的顯卡上,因為Tessellator而具備「無中生有」的能力,可讓原本的3D模組產生更多三角形。用白話來說就是一種讓多邊形細分為碎片的方法,藉此獲得更細緻的物體表面。

Fermi核心架構圖

從Fermi到Maxwell架構,GPU中基本元件都沒大幅度的改變,每次更新才會添加少量的新功能。架構改變時,最大的變化還是各元件的數量與排列,前者直接影響效能,後者則是可能影響到效率。 

大量CUDA Core配合Giga Thread快速轉換執行緒,運算效率高於傳統多核心CPU。即使到了Kepler、Maxwell時期,這個方向與架構仍未有改變,透過搭載更多的核心,運算效率可望向上提升。

下一頁:Kepler架構簡史,Maxwell架構特色

使用 Facebook 留言

發表回應

謹慎發言,尊重彼此。按此展開留言規則