睽違1年,AMD 的新顯卡終於來了。這次代號為 Tahiti XT 的 HD 7970 維持 AMD 以往「規格搶先」的傳統,使用 28nm 核心製程、PCI-E 3.0 傳輸介面,還支援 DirectX 11.1,而使用 GCN 架構則是最大的亮點。
其中最令人期待的還是新的GCN(Graphic Core Next)架構,一改過去SIMD(Single Instruction Multiple Data,單指令流多數據流)設計,成為「基於SIMD基礎的MIMD架構」,試圖在繪圖與GPGPU(General-Purpose Computing on Graphics Processing Units,通用繪圖處理器)運算取得平衡點,有什麼特色?接著看下去就知道。
在討論GCN架構之前,得從頭開始考古,才會比較容易了解。早在10年多前那個DirectX 9年代,顯示卡還沒現在這麼複雜,主要就是處理幾何圖形變換以及光線渲染。當時遊戲的靜態圖像生成有4個關鍵步驟,分別是Transform(座標轉換)、Lighting(光線投影)、Triangle Setup(三角形設定)與Rendering(成像)。
最初T&L(Transform & Lighting)是由處理器負責,直到NVIDIA將其導入GPU,人們才開始了解硬體T&L價值。受到遊戲的影響,顯卡效能指標自然就是Transform與Lighting管線的多寡。這個時期代表的顯卡是GeForce 256與GeForce 2 MX,前者是前幾款導入T&L硬體架構的顯卡,後者則透過低價大幅攻佔市場。至於此時期知名的遊戲則是Soldier of Fortune(傭兵戰場),相信不少老玩家都知道。
往後開始大量使用三角形產生3D模組,顯卡架構也越來越複雜。此時核心最重要的規格就是VS(Vertex Shader,頂點著色引擎)與PS(Pixel Shader,像素著色引擎),這樣的核心架構持續到DirectX 9末期,微軟推出了DirectX 10才打破這個規矩。
微軟在DirectX 10當中,取消了VS與PS,取而代之的是Unified Shader(統一著色引擎),也就是大家熟知的Stream Processor(串流處理器,簡稱SP)。現在我們所看到的顯卡,都是基於這種模式設計,但是AMD與NVIDIA設計方式略有不同,名稱也不太一樣。AMD稱之為SP或ALU(Arithmetic Logic Unit,算數邏輯單元),NVIDIA則先稱之為SP後來改命名為CUDA Core。
▲第一代核心是以T&L硬體架構為主,接著到了VS與PS的時代,這時買顯卡還是看管線的多寡。直到DirectX 10時代,第三代核心將VS與PS統一為SP,讓效能指標變成了SP。不過在第三代架構中,AMD與NVIDIA的作法略有不同,前者採用SIMD架構,後者則是MIMD架構,直到今天AMD才從SIMD轉向MIMD架構靠攏。
開啟DirectX 10時代後,NVIDIA以G80打頭陣,使用的是MIMD(Multiple Instruction Multiple Data,多指令流多數據流)的1D純量(Scalar)架構;AMD則以R600為主,使用的是SIMD(Single Instruction Multiple Data,單指令流多數據流)的4D+1D向量(Vector)架構,也就是VLIW(Very Long Instruction Word,超長指令集)體系。直到HD 7970推出後,才轉換為SIMD與MIMD兼具的GCN架構。
Keyword:費林分類法
單指令流 多指令流 單指令流 單指令流單資料流(SISD) 多指令流單資料流(MISD) 多指令流 單指令流多資料流(SIMD) 多指令流多資料流(MIMD) ▲費林分類法(Flynn's Taxonomy)是電腦運算分類方式,1972年費林(Michael J. Flynn)將資訊流(Information Stream)根據指令(Instruction)與資料(Data)進行分配,歸類出4種運算模式。(資料來源:Wikipedia)
(後面還有運算架構詳解)
那為什麼要分SIMD與MIMD呢?這應該要先從3D影像的特性說起。對於影像而言,最重要的就是顏色及位置,1個像素顏色可由RGB三原色配上半透明通道Alpha構成,可利用RGBA來描述像素顏色。像素的座標則可透過XYZ三維座標,加上遠近參數W,形成齊次座標XYZW來描述。
顏色跟座標都是使用4個數據進行標定,因此1個像素進行位置或顏色的變換,需要透過4次運算,這也是為什麼AMD的向量架構用的是4D+1D或4D架構,而不是6D或7D之類。
AMD的ALU可在1個週期內執行4次平行運算,則稱之為4D向量運算。跟向量運算對應的是純量,恰巧NVIDIA用的就是純量架構。純量是單一數值,多個純量平行串在一起也能組成向量。
AMD所用的SIMD就是由1個發射端,配上4或5個ALU而成。其中Radeon HD 6970用的就是修改過的VLIW 4,即為4D向量架構,而之前採用VLIW 5的則是4D+1D或稱為5D向量架構。
AMD的VLIW 5也就是4D+1D架構,內有5個1D的ALU,還有1個Branch Unit。運算時,1個發射口會對上5個ALU,這5個ALU會以1+1+1+1+1或2+3等不同方式分配運算。收到指令時,會透過驅動程式編譯並最佳化分配,再轉給ALU去執行。
Cayman核心使用的4D架構,則是少了VLIW 5用於運算Sin、Cos、Log等特殊運算的ALU(T Unit),但是剩下的4個ALU與原先的4個ALU又略有不同,反而像是被去掉運算能力比較強的那個T Unit。因此雖然看起來架構精簡,但實際上效能不減反增,不過也造成一些隱憂。
▲前後代差異在用於特殊運算的T Unit,VLIW 4雖然看似架構精簡,但是每個ALU都堪比這個特殊運算的T Unit,因此整體效能會比較好。此外,架構上ALU總數減少,但是以核心架構來看,反而增加80個發射端、Branch Unit與General Purpose Registers,讓電晶體總數來說反而增加,也連帶讓功耗明顯提升。
要比較VLIW 4與5,可從HD 5870與HD 6970來看。前者ALU數量是1600個後者則是1536個,數量相當相近因此可以稍做比較。從核心面積、電晶體數量與TDP等規格來看,HD 6970都比較高,代表不計效能的前提下,光成本與功耗VLIW 4都比VLIW 5還高。
HD 5870核心面積、電晶體數量與TDP分別為334平方公厘、21.5億個與188W,HD 6970則是389平方公厘、26.4億個與250W。雖然兩者架構不甚相同,但是從ALU數量、核心面積等參數來看,也不難想像4D架構的缺點就是要耗費更多的電晶體,而且TDP也比較大。
NVIDIA打從G80以來,使用的MIMD架構,是把所有單元打散成最基本的1D純量,特點是比4D或5D架構靈活。以往4D向量運算,透過1D純量運算,可變成1個週期內,4個ALU各自運算;或是4個週期內,1個ALU獨自完成,不論1D、2D、3D或4D都得拆成1D指令。
雖然MIMD架構看起來很好,但是最大缺點就是每個SP都要有獨立的發射口,電晶體數量與功耗都會增加,自然成本會更高。簡單來說,AMD以前的SIMD架構,特點是1個發射口對上4~5個ALU,成本比較低。而且若能讓驅動程式最佳化,理論上的效能會比MIMD更高。而NVIDIA的MIMD架構,優勢是運算靈活,實際效能會比SIMD更高,但是電晶體使用量跟功耗會比SIMD架構更多。
有位網友jk21234對於雙方架構的比喻雖粗俗但不失中肯,他說:「剛踏入Unified Shader的時代一家想要又粗又長,一家想要抽插速度很快」,其中那個想要又粗又長的是AMD,而想要速度很快的則是NVIDIA。對照一下上面的原理,再看看這比喻會比較容易了解吧!
▲Cayman使用的VLIW 4架構核心就是24組SIMD陣列,而GF 110使用的MIMD架構,則是16組SM(Streaming Multiprocessors)為主。
▲AMD會想將VLIW 4架構修正,其中一個原因是MIMD架構有利於GPGPU運算,而大動快取設計,也是為了強化處理器與顯示核心間的聯繫。
VLIW架構設計能夠提升4D向量運算能力,但是若碰到1D純量運算時,使用率就會只剩四分之一,容易出現效能不彰的問題。必須依靠強而有力的驅動程式進行最佳化與資源調度,才能發揮最大效益。
從DirectX 9之後,雙方相繼投入Co-issue運算模式,可執行向量與純量運算。某些方面而言可緩解效能不彰的問題,但是隨API複雜化,4D向量指令比重隨之降低,這也是為什麼後來4D+1D架構改為4D架構,後來又將4D改為GCN架構的原因之一。
另一個原因則是現今3D影像品質難以向上提升,除非Ray Tracing(光線追蹤)技術能成熟,否則對高階卡而言,流暢度已經相當足夠,不停堆疊ALU沒有太大的意義。
反觀GPGPU應用一直是AMD的罩門,而NVIDIA的CUDA又有相當的斬獲,AMD對此難免會緊張。雖然VLIW的理論效能比對手還好,但是實際效能卻不是這麼回事,這也加速AMD更改架構的決心。
Keyword:Ray Tracing(光線追蹤)
▲Ray Tracing稱為光線追蹤,是幾何光學的一項技術。它會計算光線經過物體時的折射與反射,讓物體的光線質感更逼真。目前3D模組也有應用光線追蹤技術讓影像更逼真,然而此技術需要大量的運算效能,即便用高階顯卡在轉換時仍稱不上流暢,但勢必會成為未來遊戲的發展方向之一。圖中的車輛就是透過光線追蹤技術而來,車輛板金上的光影十分逼真。
(後面還有MIMD運算架構)
說了那麼多,那GCN究竟是SIMD還是MIMD架構?答案是MIMD架構但是仍有SIMD的影子。為什麼會這麼說呢?先從常理來判斷,HD 7970的規格是28nm製程、電晶體數量為45億個、ALU是2048個、核心面積大概是380平方公厘。稍微推算一下,假設前代HD 6970的4D架構換算成NVIDIA的1D架構,那ALU數量應該是1536除以4,等於384個1D運算單元。
若HD 7970用的是SIMD的1D架構,不太可能在核心面積相等的情況下,將ALU數量從384個提升到2048個,整整變成5.3倍。即便核心製程精進,這還是不可能的數字。
AMD曾說過「Southern Islands is a MIMD architecture with a SIMD array.」,意思是GCN的確是MIMD架構,不過是基於SIMD陣列而生。簡單來說GCN與之前VLIW體系相比,並非使用SIMD陣列,取而代之的是所謂Compute Unit(簡稱CU)的運算單元。
▲Tahiti是第一款28nm顯卡,同時也是AMD首度踏入MIMD架構的核心。不過雖然具備MIMD特性,但是在核心內仍有SIMD的影子。
HD 7970內有32個CU,而CU內有Instruction Fetch Arbitration、Control and Decode、對應的快取記憶體,以及最重要的純量運算單元(Scalar Unit)、向量運算單元(Vector Unit)。此外,每個CU包含64個ALU。
先前說到GCN是基於SIMD架構的原因,就在向量運算單元內有4組SIMD陣列,每個陣列由16個ALU所構成。每個CU的SIMD每周期能執行64個FMAD(乘加指令)向量運算,不過CU的4組SIMD在每周期內可執行4個執行緒,因此具備MIMD的特性。
不過GCN的SIMD陣列,存在向量運算單元內,不是整個CU都是SIMD架構。HD 6970的SIMD則是相對於HD 7970的CU,兩者層級應該先搞清楚,後面才不會混淆。
另外,CU內還有1個純量運算單元,不過ALU只支援整數(Integer)運算,且暫存器(Scalar Registers)只有4KB(早期的AMD資料是寫8KB),看起來GCN的改革並不徹底。
▲CU內的核心就是Vector Unit也就是向量運算單元,此單元採用SIMD架構,這也是為什麼GCN被稱為還有SIMD影子的原因。
▲不過GCN的CU每周期可執行4個執行緒,因此被稱為具備MIMD特性。
(後面還有執行方式大改革)
從VLIW 4到Non-VLIW架構,差異點在於執行方式。前者雖然每周期可執行4次操作(Operations),但說穿了還是1條指令。而且先前也說過,這種架構非常依賴指令最佳化,才能發揮最高效益。
而Non-VLIW架構也就是GCN,雖然每次只能執行1個ALU操作,但是4組SIMD可同時執行4條執行緒。且每項操作都是Occupancy Limitation,可讓使用率接近100%。理論上GCN架構在指令層面以及使用率層面,都會比以往更有效率。
▲VLIW 4與Non-VLIW架構差異最大處在於執行方式,前者只能接受1條指令,後者可執行指令增加,且核心使用率更高,效能自然會表現比較好。
說到GCN就不得不講它的記憶體架構,由於CU內有向量運算單元又有純量運算單元,讓架構變得很複雜。每個CU有獨立的16KB L1快取,CU內每個向量運算單元又有64KB的暫存器,每4個CU再共用16KB Instruction Cache(指令快取)以及32KB Scalar Data Cache(純量資料快取)。而且所有L1快取都是可讀寫操作,並非上代只能讀取。至於L2快取則透過64bit介面與L1連接,且所有L2都是同步且可供任何CU存取。
AMD將此L1共享命名為GDS(Global Data Share,全局資料共享),認為此設計有益於CU之間的同步,原文為「Global Data Share facilitates synchronization between CUs」。
GCN的設計不難看出AMD相當重視資料同步,CU內LDS本地快取都能直接與L2連接,所有資料都是CU共享。更強的是還能跟系統記憶體同步,提高了處理器與顯示核心的交換能力,對於AMD這種有CPU又有GPU的廠商特別有利。
▲GCN的快取共享機制十分複雜,CU間可共享L1、L2快取,每個CU也有獨立的快取,有意於CU間的資料同步。
不能不提的是,這次GCN支援X86 Virtual Memory(X86虛擬記憶體)功能。簡單來說就是將顯卡上GDDR5記憶體,虛擬為處理器可識別的系統記憶體。HD 7970使用的GDDR5記憶體頻寬(Memery Bandwidth)高達264GB/s,一般四通道DDR3頻寬則只有30~50GB/s不等,遠超過現在X79四通道DDR3所提供的頻寬數倍。透過虛擬記憶體,有助於GPGPU運算以及部分3D遊戲。
▲GDDR5記憶體頻寬高達264GB/s,而四通道的X79也不過30~50GB/s,透過虛擬記憶體技術,可讓顯卡記憶體被識別為系統記憶體。
雖然HD 7970是第一張支援DirectX 11.1的顯卡,但硬體走在軟體前面有時是種不幸。由於API實在太新,導致沒有遊戲以及作業系統可支援。至少得等到Windows 8推出之後才有可能支援新API,當下支援DirectX 11.1宣示意義大於實質意義。
DirectX 11.1與以往DirectX 9.0c、DirectX 10.1一樣是個更新的小版本,並非導入新功能,而是改進自身技術。但是DirectX 11.1有個新功能只有支援DirectX 11.1的顯卡才能開啟,那就是TIR(Target Independent Rasterization)姑且直譯為目標獨立光柵。
此功能必須硬體配合才能開啟,因此過去的DirectX 11顯卡不可能透過驅動更新等方式取得。不過DirectX 11.1得等到Windows 8上市,上市之後還要等遊戲支援,看樣子DirectX 11.1還有段很長的路要走。
這次HD 7970測試受到AMD不對等的媒體政策箝制,歐美媒體早在12月底就能測試並報導,而其餘地區只能在1月9日正式解禁後拿到顯卡。HD 7970的新技術不只上述這些,另外還有記憶體除錯機制、通用運算機制、Eyefinity 2.0、ZeroCore、VCE編碼引擎、PCI-E 3.0介面、GPU解壓縮應用等等,當然還有最重要的效能測試,小編已經完成HD 7970的實測,會儘快用另一篇文章做說明。
整體來看,GCN架構是包著MIMD皮的SIMD架構,某些方面跳脫以往效率不彰的問題,但是新架構勢必需要時間最佳化,或許下個世代會看到更完整的設計。但是不論如何,目前的設計看來,GCN改進之處非常多,有令人期待之處,但也令人擔心的是,這段路NVIDIA早在2年前就開始走了,是否能一舉超過對手,還得等時間證明。