在看完 Tesla 架構的一系列產品之後,接下來讓我們把目光移回 AMD 陣營吧,如同過去的歷史一般,在 NVIDIA 推出支援 DirectX 10.0 與基於統一渲染器架構的 Tesla 之後,AMD 理所當然也必須推出相應的產品做為抗衡,也就是本篇的主題-Terascale 架構。
Table of Contents
Terascale 架構
不同於 NVIDIA 從 Tesla 以降都是以 CUDA 架構為基礎下去改變配置與優化而來,從 DirectX 10 時代開始 AMD 陣營的 GPU 架構目前為止可分為兩次大幅改版,分別是本篇要介紹的 Terascale 與之後才會談到的 Graphics Core Next (GCN) 架構,前者先後有過三次改版,並主宰了 2006 ~ 2012 這六年中 AMD 絕大多數的圖形晶片產品,後者則是從 2012 年推出的 HD 7000 系列發展至今。
與介紹 Tesla 時相似,接下來我也同樣打算將 Terascale 分為三期介紹。
Terascale 1.0
- 推出日期:2007 年 05 月 (R600)
- 所屬系列編成:Radeon HD2000、HD3000 系列
- API 支援:DirectX 10.0、OpenGL 3.3
- Shader Model 支援:SM 4.0
R600 的前世今生
還記得在 5-16 當中我談到 Radeon R500 時曾經用不小的規模在談 Radeon R500 從宣布到上市這之間經歷過多少次延遲嗎?早在 2005 年初人們就得知了 R520 的存在並且被告知這款晶片將在兩個月後上市,但卻一路等了八個月才見到其真面目,而當時 ATI 實際上在 R400 系列的挫敗之後所剩的力氣已經無多,這某種程度上就是 AMD 得以在 2006 年將 ATI 收入麾下的主要因素之一。
不過實際上比起 R500 系列的代表 R520 來說,比較重要的其實是下面這顆代號 Xenos 的晶片 (由 ATI 設計,用於微軟的 XBOX 360 上),重要的程度甚至超過上一代的 R520,原因是我們現在要談的 R600 則實際上比起 R520 來說更接近 Xenos 一些 (Xenos 才是 ATI 的第一款統一渲染器架構 GPU,因此實際上 ATI 開始搞統一渲染架構的歷史是比 NVIDIA 要來得更早的),某種程度上可以視為 R520 + Xenos 合體之後的改良版本。
如同我們所知道的,AMD 在 R520 與 Xenos 這兩款產品上耗掉了太多時間造成了很嚴重的困境,先前過於漫長的延期實際上已經擠壓到 R600 的開發與上市時程並且形成了後來將持續造成許多影響的骨牌效應 (畢竟投產的成本很高,除了 Intel 曾經搞過很短命的 Broadwell 之外,大概很難看到有晶片廠商願意投產之後沒多久就讓產品下台,而且改善良率跟細部修正也很花時間),最終造成的結果就是 R600 推出的時候實際上 NVIDIA 已經作為市面上唯一的統一渲染架構 GPU 稱霸市場好幾個月了 (不過幸好當時 DirectX 10.0 的遊戲寥寥無幾而且 Windows Vista 的推動並不順利,所以 AMD 還能一直死守住高性價比的中低階與入門市場)。
在開始談 R600 之前我們先來看看其前身 Xenox 吧,這款晶片最特別的地方應該就是採雙晶片封裝吧?或許是出於製程的考慮,當時微軟與 ATI 決定將運算單元 (繪圖管線) 與記憶體控制器之外的部分獨立成一個子晶片 (主要是後期貼圖與輸出的部分與 10 MB 的 eDRAM,這 10 MB 的 eDRAM 主要負責反鋸齒方面的資料暫存,因此 XBOX 360 的反鋸齒能力很強),而子母晶片之間則使用 32 GB/s 的匯流排連接。
不過 eDRAM 並沒有被使用在電腦的 GPU 上,因此在後來的 R600 當中我們是看不到這樣的設計的 (其實目前為止比較為眾人所知的也只有 Intel 的 Broadwell 有在電腦上使用過 eDRAM),至於下面這張則是 Xenos 的架構圖,可以見到其實它的規格與架構都不高,大概僅有同期中低階 GPU 的水準 (完全不及 R400),而且因為新的架構設計還不成熟,因此在時脈方面的表現也不甚良好 (其實絕大多數家用遊戲機的圖形處理能力都不及個人電腦,只是由於遊戲機環境單純因此相對來說更容易大幅度優化而已)。
但要特別提到的是,Xenox 的架構並不完全符合 DirectX 10 規範,由於對原先頂點著色器功能的替代方案實作並不完整,因此並不能獨立運作而是需要 CPU 承擔較多的工序,並且三組由 16 個 5D 向量 SIMD 運算單元組成的渲染器管線並不能同時處理頂點與像素指令,一次只能處理其中一類。
一個統一渲染器架構,各自表述
由於關於 DirectX 10.0 引入的新特色在前三篇當中我們已經談過很多了,所以為了節省邊幅接下來我並不打算再重述那些東西,讓我們直接從 Radeon R600 的架構開始看起吧。
相較於 NVIDIA 把舊架構整個推掉重練變成全新的 CUDA 架構來說,Radeon R600 上則可以看到很多來自其前身 (R520 與 Xenos) 的影子 (下圖是 R520 的架構圖),畢竟在設計過程中這兩大廠商的思維就有很大的不同了,NVIDIA 著眼於通用運算與高性能運算 (HPC) 的龐大市場而逐步從原本追求的圖形性能轉向更加激進的追求提升平行運算效率,因此在架構上完全是以新的流處理器體系為核心下去堆疊而成。
至於 ATI 的思維則是比較接近傳統的 GPU 設計路線,想法上很簡單,將公司花費大量心力的 Xenos 所創造的技術與 Radeon R500 的框架與特質截長補短,最後再加上 DirectX 10.0 等新技術的支援就是次世代 GPU 所需要的要素了,整體來說的話其實我覺得當時 ATI 的想法比較聰明 (畢竟他們在設計 Xenos 的時候就可以提前接觸到下一代 DirectX 可能發展的一些方向與技術了,這是 ATI 當時相對於 NVIDIA 而言所具有的優勢,某種程度上也是因為 NVIDIA 與微軟之間曾經為了第一代 XBOX 的圖形晶片有過法律糾紛的原因才讓 ATI 得到了更多得以走近微軟的機會)。
先了解這樣的設計背景之後,對於 ATI 為什麼會這麼設計他們在被 AMD 併購前的最後一個產品也就不會感到太意外了,從前面提供的三張架構圖中其實不難發現,R600 的像素管線規劃跟 Xenos 很類似,但除了像素管線之外的部分規劃上則幾乎與 R520 一模一樣,特別是 R520 最重要的變革-Ultra-Threaded Dispatch Processor 與環狀記憶體通道也被保留下來了,不過這僅是在架構圖的層面,實際上新的 Ultra-Threaded Dispatch Processor 與前作內的在設計上其實大有不同,因為 Unified Shader Architecture 下它要處裡的資料與指令類型、複雜度都已不可同日而語。
前面提過 R600 是 ATI 的第一款統一著色器架構 GPU,理所當然 R600 相較於前作在架構上最大的不同會出現在中央繪圖單元的部分,不過值得注意的是 ATI 在這裡選擇了與 NVIDIA 截然不同的方式來實作統一著色器架構 (微軟在 DirectX 10 規範當中只有要求統一著色器,但沒有具體規範如何實作),還記得在上一篇當中我們曾經見過 NVIDIA 使用的架構是採用 TPC 架構,內部包了二到三組 SM,而每組 SM 當中又有八個「純量」流處理器,這也正是 NVIDIA 在進入統一著色器架構時代之後可以突然喊出有幾百個流處理器的原因 (下圖)。
但 ATI 選擇的設計方式則不是如此,在 ATI 的架構中運算管線 (稱之為 SIMD Array) 是由數組運算單元組成,但不同於 NVIDIA 選擇讓所有流處理器 (SP) 各自獨立為單一純量運算單元的作法,ATI 選擇將其「分組」配置,每組「SP」當中包含了五個純量運算單元 (Stream Processing Units, SPU) 與一組負責控制與分配工作的分支執行單元 (Branch Execution Unit, BEU)。