聊聊 iPhone 當年的 GPU:Imagination 的 Rogue 架構初探

寫在前面:

熱愛手機和移動行業的各位,應該知道 Imagination Technologies 這家公司吧。如果對 iPhone 的關注夠早,應該就知道蘋果早幾年的 A 系列 SoC 都採用 Imagination 的 GPU。其 PowerVR 系列處理器在 iPhone 3GS 時期就已經名聲大噪了,當時 3GS 採用 PowerVR SGX535 GPU 令這款手機的遊戲性能相當彪悍。

iPhone 由於每代產品在圖形性能方面相較同時代 ARM Mali 公版架構有優勢,也讓 Imagination 一時風光無二。實際上,Imagination 並不是只有蘋果這一家客戶,Intel、三星、聯發科、展訊曾經都是它的客戶,比如 Intel Atom Z2480 處理器就採用 Imagination 的 PowerVR SGX540 GPU。

先前有新聞報道說,蘋果在 Imagination 的股份曾一度逼近 10%。不過悲劇的事情是,Intel 早在 2015 年賣掉了 Imagination 的所有股票,看今年的 iPhone 8 也已經棄用 PowerVR GPU。去年年底有消息說,蘋果私下挖角了 Imagination 的不少員工,國外媒體 MacRumors 搜索曾在 Imagination 工作過的現任蘋果員工,結果搜出 25 人,連 Imagination 的 COO 去年 7 月也去了蘋果。

實際在蘋果宣布自主研發 GPU 之後,Imagination 的股票於今年 4 月出現斷崖式下跌,外媒認為這家公司瀕臨破產邊緣。彭博社今年 9 月報道稱,中國背景的私募基金 Canyon Bridge 將以 6.75 億美元的價格收購 Imagination(溢價 42%),公司旗下的嵌入式處理器分部 MIPS 出售給 Tallwood MIPS。可能這對 Imagination 而言也是件好事。

作為一個喜歡去挖舊文章的男子,前一陣找到一篇比較通俗易懂的文章。下面這篇譯文來自 AnandTech 發表於 2014 年 2 月 24 日的文章《Imaginations PowerVR Rogue Architecture Explored》,當時移動 GPU 能夠公布到媒體上的資料還很少,所以還是顯得比較珍貴的。我覺得在內容上,這篇文章相對淺顯,適合一般消費用戶閱讀,而且還進行了少量科普,就翻成中文供有興趣的各位閱覽。

本文定位入門級,不適合長期關注行業的老饕閱讀,但依然需要一定的晶元理論基礎。

不過這篇文章因為發布時間早,所以某些內容已經比較落伍,比如文中提到 TBDR 分塊延遲渲染技術尚無任何資料。實際上後期 Imagination 應該公布了一些資料,似乎也有業內人士專門寫成文章。此外,文中有部分內容可能值得商榷。

另外,這篇文章的乾貨其實是比較少的,且 AnandTech 的這位作者在行文方面比較啰嗦。另外,Imagination 當時給出的資料並沒有切中多少要害,一些關鍵技術部分都沒有細節內容,導致這篇文章討論的點其實略失偏頗。加上當時還沒有 SoC GPU 的可比較對象,這篇文章更多的價值是給各位普通愛好者一次增長見聞的機會。

由於文章較長,按照常規,這裡還是給出本文的一些有趣細節點,並且做一些補充:

  • 本文探討了 PowerVR GX6650,有媒體猜測 iPad Air 2 用的就是這顆 GPU,這一點應該是不對的。AnandTech 同年 11 月曾發表過一篇文章提到,iPad Air 2 的 A8X 所用的 GPU 應該是八核心的 GXA6850;詳情參見:Apple A8X』s GPU - GXA6850, Even Better Than I Thought;
  • iPhone 6 和 iPhone 6 Plus 的 A8 用的也不是 GX6650,而應該是四核心的 GX6450;
  • 本文探討的 PowerVR GX6650(Series 6XT) 為 6 核結構,另一顆 G6230(Series 6) 則是雙核結構;
  • 誒?六核,雙核?當年的 Tegra K1 不都 192 核了嗎?這篇文章其實花了比較長的篇幅來解釋不同廠商對於核心的定義;
  • 業內普遍比較認同 Imagination 將其 USC 模塊定義為核心的方式,GX6650 內部有 6 個 USC 模塊,所以就被大部分媒體稱為六核 GPU;
  • 實際上在 Imagination 的 Rogue 架構中,每個 USC 模塊又包含有 16 個 shader 核心(或者說 16 條管線),所以如果採用英偉達這類廠商定義的核心標準,GX6650 的核心數目應該是 16 x 6 = 96 個;
  • Rogue 架構中的每個 shader 核心其實包含了至多 7 個 ALU 邏輯運算單元,而其他廠商的不少架構每個 shader 核心實際就 1-2 個 ALU 單元;如果以其中的 FP32 運算單位數量來計算,那麼實際上 GX6650 的「核心數」也有 192 個;
  • Imagination 是移動 GPU 領域最早願意公開部分技術細節的廠商。AnandTech 認為他們之所以願意公開,其實是因為很多廠商宣稱自家 GPU 核心數有成百上千個,這對 Imagination 非常不利(CNM 我家才六核),所以公開一些架構信息,讓大家知道:那種算核心數的方法有多麼卑劣...
  • Rogue 架構的這種設計比較依賴於指令級並行,來真正發揮性能效率;
  • 這種架構設計也決定了,其 shader 核心不怎麼容易被餵飽或滿載,所以效率可能是個問題;
  • 一個冷知識:iPhone 6s 所用的 PowerVR GT7600 也是 6 個 USC 模塊,從紋理吞吐和像素吞吐數字來看,似乎和 GX6650 很靠近,主體架構也並沒有變;詳情見:The Apple iPhone 6s and iPhone 6s Plus Review;
  • PowerVR Series 6XT 相較 Series 6,改了其中的 FP16 ALU 單元,FP16 單元數量從 2 個增加到 4 個;新的 FP16 單元一個周期可執行 2 個操作;
  • Rogue 架構的 wavefront size 有可能是 32 個線程;
  • ALU 單元的頻率的確是跑在 Imagination 標定的數字上的,不過其前端,比如 decoder 之類就沒有達到這個頻率;
  • GX6650 用上了 12 個 ROP 光柵化處理單元,所以其像素吞吐的理論表現在 SoC GPU 中非常突出;
  • 本文主要探討的就是 Rogue 架構的 USC 部分,其他部分幾乎沒有談到,包括 TBDR 這類對移動 GPU 而言極具價值的部分;

我水平比較有限,在半導體領域的積累甚少,對圖形計算接觸得更少,所以如果文章出現翻譯錯誤,還請不吝指教。對移動 GPU 感興趣的同學,推薦各位兩篇愛活網的文章,在深度上會比本文更深一些,讀起來也需要更多的理解時間。而且這兩篇文章針對時下熱門移動 GPU 的介紹也更有代表性,畢竟這兩年廠商公布的資料也越來越多了,早就不似當年;下篇中就特別提到了 Imagination 的殺手鐧 TBDR 技術:

移動圖形晶元的故事(上)GPU是什麼鬼?_愛活網 Evolife.cn

移動圖形晶元的故事(下)IMR與TBR/TBDR兩大流派的愛恨情仇_愛活網 Evolife.cn

最後預告一下,其實 AnandTech 還寫過一篇有關 ARM Mali Midgard 架構的文章,雖然 Midgard 現在也已經不是 ARM 最新的 GPU 架構了(這一點在先前翻譯華為麒麟 960 的分析文章中就提到過),不過我覺得依舊有分享的價值,遲一點我也會翻譯給各位看看。

正文開始


我們先前的 SoC 文章,其實一直期望加強 GPU 部分的理解和研究。在 PC 領域,三大主要供應商——Intel、英偉達和 AMD,這些年在其 GPU 架構方面都非常開放。這樣一來,我們也就能夠更好地理解 PC GPU 產品,這在以前是完全不可能的。

不過 SoC 領域就沒這麼開放了,我們對於絕大部分 SoC GPU 架構的理解並不深入,因為 SoC GPU 廠商都不大願意公開架構細節,還有架構的進化方向。不過這也可以理解,畢竟 PC GPU 領域,iGPU 或 dGPU 市場的主要競爭者也就只有兩三家,而 SoC GPU 領域的玩家不少於 7 個,他們都以自己的方式在競爭,包括:英偉達、Imagination Technologies、Intel、ARM、高通、博通和 Vivante。(譯者註:風雲變幻啊,由於這篇文章發布時間已經是 3 年前,現如今移動 SoC 領域的格局已經大不相同,有的轉移陣地,有的被收購,有的破產保護...)

其中有部分廠商採用自家設計,還有一些則將設計作為 IP 授權給第三方 SoC,不過所有這些廠商如今都處在激烈競爭的市場環境中,而這一市場在其生命周期中還比較年輕。SoC GPU 開發仍以較快的步伐行進(以 GPU 的標準而言),GPU 迭代速度很快,GPU 複雜度尚未達到 3-4 年流程的開發周期。所以 SoC GPU 市場仍然很年輕,且競爭激烈,預計未來還會有個調整期。SoC GPU 的市場玩家們在公開架構細節方面,在未來一段時間內仍然會比較保守。

也就是說,這些年我們在技術細節方面理解的深入,主要仰仗英偉達、Intel 這些廠商相對開放的態度。而這兩家廠商在移動 GPU 領域不佔主導地位,我們在架構方面能夠了解到主流 SoC GPU 的信息也就非常少了。

不過 Imagination 的態度轉變,對於我們理解 SoC GPU 而言實在很有價值,我們很歡迎 Imagination Technologies 加入到「開放架構」大家庭中。Imagination 這次共享了有關 Rogue Series 6 和 Series 6XT 系列架構的一些細節信息,這也是我們第一次深入了解諸多高端移動設備所用的 GPU 架構(比如歷代蘋果產品),其架構源於長期以來某些應用廣泛的 SoC GPU 設計。

當然了 Imagination 仍然不會公開所有信息,這次公開的主要是相關 Unified Shading Cluster(USC)集群模塊,Series 6/6XT GPU 的核心部分。Imagination 並未探討諸如幾何 processors、緩存結構、Tile Based Deferred Rendering(TBDR,譯者註:分塊延遲渲染,這其實屬於移動 GPU 相對核心的技術)系統——這也是這家公司的秘密武器,是提升 SoC 效率最強有力的組成部分——不過未來我們應該會得到其中的細節。那麼我們就一起來看看 Series 6/6XT 系列 GPU 的 USC 吧。

在開始之前,還是要感謝 Imagination 給我們這樣的機會評估其架構。實際上我們先前就對推進此事做了不少努力,現在也終於實現了。

Imagination 也在其官網公布了一些博客文章和白皮書:《圖形核心:嘗試一對一比較》以及《PowerVR GX6650:重新定義移動領域 192 核的性能》(譯者註:感覺都是沖著英偉達去的...)。這些內容也有助於理解一些非常深入的技術問題,對於我們剖析 Rouge USC 也有幫助。

背景:GPU 是怎麼工作的

既然這是我們第一篇針對 SoC GPU 設計的深度架構分析文章(尤其與 Intel 和英偉達那樣衍生自 PC 的設計不同),我們還是從頭說起。對於我們的常規讀者而言,下面這部分可以略過,但如果你希望了解有關 GPU 如何工作的問題,這會是個不錯的開始。

GPU 和大部分複雜的處理器一樣,都是由大量不同的功能單元組成的,這些單元負責不同的運算和渲染工作。比如有處理幾何數據的功能單元,它會頻繁調用幾何引擎(geometry engine)、幾何 processors,或者 polymorph 引擎;比如有存儲子系統,提供緩存,訪問外部存儲;比如還有渲染後端(ROP 或 pixel co-processors),產生計算所得幾何圖形與像素,將其組合併最終 finalize;比如說 TMU(紋理貼圖單元,或者叫材質貼圖、紋理映射),讀取紋理和紋素(texel,譯者註:紋素就是紋理元素,是紋理圖片空間的基本單元),並將其放置到場景中;當然還有 shader,也就是我們常說的 GPU 運算核心,處理現如今遊戲中較為繁重的任務。

可能最基本的一個問題就是,為什麼 GPU 會有這麼多不同的功能單元。從理論上來說,所有步驟(除了存儲)都可以在軟體中完成——實際所有任務都可以在類似 shader 這樣的單元上完成——但 GPU 設計人員需要考慮性能和功耗,所以不會這麼做。固定功能硬體(如 ROP)的存在,是因為這些硬體在執行特定任務時效率高得多,畢竟這些硬體是專為某些工作優化過的,而不像類似 shader 這樣的彈性硬體單元。對於某個特定的任務而言,彈性硬體單元相比固定功能硬體,其面積顯然更大,功耗更多,所以儘可能在固定功能硬體上執行任務是很有必要的。也就是說,部分需要靈活性的渲染過程會在 shader 中進行,而還有一些工作是基本固定的,這些工作就會在固定功能單元中進行。

Imagination 給我們提供的信息,就是有關於 shader 的,這也將是本文的關注重點。就晶元面積和功耗而言,shader 模塊對於渲染的貢獻應該是最大的。雖說所有功能單元都很重要,但大量渲染工作都在這裡進行。而且因為越來越多較為複雜的 shader 項目出現,每年、每代產品需要 shader 去完成的工作也在持續增加。

那麼最基本的問題就是:究竟什麼是 shader?

就基本層面來談,每個 shader 核心,就是一條靈活的數學管線(譯者註:本文統一將 pipeline 譯作管線);或者說每個 shader 核心都是一部分計算資源,它會接受指令(shader 程序),執行命令,在某個場景中實現對像素和多邊形頂點的控制。shader 核心的名稱是由廠商自己定的,比如說 AMD 叫 Stream Processors,而 NVIDIA 就叫 CUDA 核心,Imagination 則稱其為 Pipelines(譯者註:多實誠的名字)。shader 核心的構成及配置,取決於架構及其設計目標,所以雖然不同的 shader 核心還是有相似之處,但很少有 shader 核心是一樣的。

從更低層級的技術層面來說,每個 shader 核心本身就包含了多個組成部分。它包含了 decoder(解碼器)、dispatcher(調度器)、operand collector(運算對象收集器)、result collector(結果收集器)等等。但最重要的組成部分,我們要重點講的,就是 ALU(算術邏輯單元)。ALU 是 GPU 中最基本的構成模塊,也是執行數學運算的基礎單元。

(譯者註:另外,這裡的 shader 核心數目很多時候還可以說成是 SIMD lane 數量,許多廠商在產品宣傳中就將此定義為核心數目的標準,這種定義核心的方式爭議比較大。)

NVIDIA 的 CUDA 核心

Rogue 架構中的一個 shader 核心,或者叫管線

每個 shader 核心中的 ALU 數量就取決於其設計。以 NVDIA 為例,其 shader 核心會有兩個 ALU:一個 FP32 浮點 ALU 和一個整數 ALU,都是 shader 程序運行會用到的。而 Imagination 的 Rogue Series 6XT 每個 shader 核心最多會有 7 個 ALU,多個 ALU 可以同時使用。一般來說,我們在討論架構的時候肯定會談到 shader 核心有多少個,但也需要了解不同 shader 核心的 ALU 數量是存在差異的。

如果只說 shader 核心的話,GPU 可能會包含成百上千的 shader 核心。圖形渲染本來就是個並行的過程,場景中可能存在數百萬像素,絕大部分的運算依賴性都不大,操作基本是半獨立或者完全獨立的。所以 GPU 會同時啟用大量 shader 核心,並行為多個像素進行工作。「wide」的設計,對於圖形渲染來說也是很適用的,這種設計能讓每個 shader 核心保持較低頻率,在獲得工作量的同時又能節約功耗。每個 shader 核心頻率可能只有幾百 MHz 的水平,但由於核心數量大,GPU 的總吞吐還是很可觀的——這原本也是圖形渲染需要的(以及某些種類的運算負載)。

Kepler 架構中扎堆的 CUDA 核心

還有個疑問就是,這些 shader 核心是如何組織到一起的。和所有的 processor 一樣,GPU 中的 shader 核心接一系列的指令(a "thread" of instructions),一個指令接著一個指令,直到程序所有操作完成。就 shader 構成而言,需要在 shader 核心的獨立性,及其佔用的面積/功耗之間做權衡。理想情況下,每個 shader 核心都應該完全獨立,計算的東西和其他核心應該是完全沒有關係的。但這其實不大現實,畢竟還是要考慮晶元面積和功耗問題,而且實際上也沒必要。

臨近像素是有可能相互獨立的,也就是其輸出沒有關係。但在渲染一個場景的時候,大部分情況下針對一大群像素,實際都是執行相同的操作。所以不應該讓所有 shader 核心都真正獨立,而是將它們進行組合,一起執行同組線程。這種方式在空間和功耗效率方面都更為出眾。

一組 wavefront/warp 中的線程流

和一個 shader 核心的構成方式一樣,shader 核心的分組方式也取決於設計。最常見的組合方法是 16 或 32 個 shader 核心。更小的組合方式對性能而言會更為高效(考慮相同線程塞不滿 shader 的情況下,處於空閑狀態的 shader 核心會更少),而更大的組合方式對於晶元面積和功耗而言,會帶來更高的收益,因為這樣一來就可以把更多的 shader 核心分一組,這些核心都處在一個指令 scheduler 控制之下。

這種線程分組,在不同的廠商那裡名字也不一樣。NVIDIA 稱其為 warp,AMD 則稱其為 wavefront,Open GL 的官方叫法則是 workgroup。其實 workgroup 是比較準確的叫法,但也比較容易引起混淆,畢竟很多東西都可以叫 workgroup(工作組)。Imagination 對此沒有官方叫法,我們這裡採用 wavefront 這個名字——因為這個詞的適用範圍更窄,所以表達起來也更清楚。

(譯者註:warp(或 wavefront)可以認為是 NVIDIA(或 AMD)GPU 的最基本可調度單元,亦有說法是「代碼的最小可執行單元」,「在所有線程中,同時執行同一指令」,「SIMD 過程中數據處理的最小單位」。NVDIA GPU 的一個 warp 包含 32 個線程;AMD 一個 wavefront 則包含 64 個線程。此外,據我所知,workgroup 這一詞單就 GPU 而言可能就存在不同的含義。)

總結一波,ALU 是 GPU shader 設計中的最基本構建模塊。ALU 構成了 shader 核心,而 16 或 32 個 shader 核心又會進行組合。此類分組去處理相同的指令(threads of instructions,意指相同指令的多個線程),每個 shader 核心執行一個線程,就好像 shader 核心分組了一樣。我們將這樣的線程分組稱為 wavefront。

有了這些基礎知識我們就開始開始談談 PowerVR Series 6/6XT 的 USC 了。

剖析 Imagination PowerVR Rogue Series 6/6XT USC

要剖析這部分內容,可能最好還是先談一談為什麼 Imagination 現在對待架構的態度會更為開放。

Imagination 的博文《Graphics cores: trying to compare apples to apples》談到了究竟什麼是「核心」,以及核心數量究竟應該怎麼算。雖然 Imagination 的這篇文章並沒有點名,但從文字來看,顯然 Imagination 對於所謂的核心大戰很擔憂,也擔心按照現在計算核心的方式,Imagination 在市場宣傳上可能討不了好。實際上這已經不新鮮了,晶元和設備製造商宣傳產品的時候,著重於飆主頻和核心數,也就是所謂的頻率和核心大戰。

對於一款產品而言,這兩個數據的確是比較重要的,但久而久之消費用戶就會看重這兩個數據——雖然他們可能也的確不需要從多專業的角度來理解一款產品。但這樣可能會形成一個惡性循環,廠商會推高產品的最高時鐘頻率或核心數目。然後就會出現一些比較新穎的宣傳方式,像早年的摩托羅拉 X8 移動計算系統,把各種組成部分都算到核心數目裡面。

幸好現如今的 SoC GPU 領域,這種事情還不算主流。不過 Imagination 早前計算核心數目的方式,讓 Imagination 在核心戰中非常不利。以前 Imagination 將一個 USC 當做一個「核心」,這也就意味著最終其 GPU 核心數目會看起來很少。

另外在一條管線或者一個 shader 核心中,Rogue 就有多個 FP32(或 FP16)ALU,而其它廠商的架構可能就只有一個。所以就算用管線多少條來算核心數,Imagination 每個 USC 也就 16 個核心。

雖然 Imagination 沒有指名道姓,不過其博文中提到的競爭對手應該就是 NVIDIA,後者近期剛剛發布了 Tegra K1 SoC。一顆 K1 就包含有 192 個 CUDA 核心,但實際上 K1 的每條管線比 Rogue 要窄很多。高端 Rogue 設計可能會有 6 個 USC 模塊,大概也就 96 條管線,這和 192 個 CUDA 核心,就數字來看還是不能比的。顯然 Imagination 對此是不能忍的,所以他們就需要去澄清到底什麼是核心,這可能也是 Imagination 想要公開討論其架構的一個重要原因,這樣我們才能了解其中的差異究竟在哪裡。也就是說,雖然只有 96 條管線,但是每條 管線都包含更多的 ALU。

接下來就該來看看 Rogue 架構了。針對今天的這篇文章,Imagination 提供有關 Rogue USC 的技術細節,給了我們不少驚喜,我們因此能夠畫出線程工作在 Rogue 中的示意圖,甚至總結有關 Rogue 的優勢和不足之處。

首先我們來談談 PowerVR Series 6 和 Series 6XT 的不同之處。Series 6XT 是最近才發布的,是 Series 6 家族的新成員(譯者註:發布時間是在 2014 年 1 月)。它針對設計進行了一些優化,以期進一步提升 PowerVR 的性能表現。當時發布的時候,我們其實還不知道 Series 6XT 究竟做了哪些優化,但這次我們得到了一些料。

雖然其 FP32 單元數量沒變,但 FP16 發生了變化。很慚愧,以前我們一直都沒有 SoC 架構如此低層級的細節信息。如果從 PC 的角度來看,Imagination 還有 FP16 單元是件挺有趣的事。PC 平台的 GPU 長期以來都只用 FP32 操作,ALU 常年是 FP32。當然了,移動平台在功能和 shader 複雜性上都比 PC 要弱,不過 FP16 在 PC 遊戲和應用中都用得更少,在移動領域則比較普遍。

(譯者註:就近代來看,相關 PC GPU 對 FP16 半精度的支持,這兩段話是有待商榷的,比如 AMD Vega。值得一提的是現如今很多 GPU 製造商傾向於把 FP16 應用於神經網路。)

其關鍵當然就在於精度表現。16bit 浮點數字沒那麼精確,16bit 值只能產生 65000 種組合——相比更為精確的 32bit 浮點數字,PC 領域用得相對更少,後者提供 40 萬種組合。不過 16bit 值比 32bit 值更小,存儲所需空間更小,移動帶寬更少,計算功耗更低,所需的晶體管數量也就更少。所以在移動領域,FP16 仍在使用,包括軟體和硬體領域,開發者需要仔細不讓更低的精度導致渲染錯誤。

從硬體層面來說,有專門的 FP16 單元,也可以在 FP32 單元之上運行 16bit 精度值。後者在 PC 領域相對常見,即便如此,FP16 操作仍然不是很多。執行 FP16 操作並非最為高效的方法,既然用上了這麼多晶體管,就應該把性能全部用上。不過移動領域的這一做法仍然是很好理解的。

所以 Rogue 有專門的 FP16 單元,就像 NVIDIA 在桌面架構中還有專用的 FP64 CUDA 核心一樣。FP16 單元當然需要佔用晶元空間,將其放在 FP32 單元旁邊——在需要執行 FP16 數字的時候,就沒有必要啟用開銷更大的 FP32 單元了。所以 FP16 單元實際上就是晶元面積(譯者註:本文會統一將 die size 譯作晶元面積,但 die size 本身表達的意思其實更有針對性)和性能兩者權衡的結果,運行 FP16 值的時候,減少功耗和發熱,獲取額外的性能表現。

還是回到有關 Series 6 和 Series 6XT 兩者差異的探討。在 Series 6 系列 GPU 中有個有趣的設定,其 FP16 ALU 可以在一個周期內執行至多 3 個操作。

我們說密集型操作 MAD(乘積累加,也有叫 MAC 或者 FMA 的):可以說,新增的那些 ALU 單元,每個 ALU 一個周期可以達到 2FLOPs(FLOP,Floating-point operation,也就是一個周期完成 2 個浮點操作)。MAD 是相對特殊的例子,一個 ALU 可以在一個周期內執行乘法和加法累積運算,這是多操作一次完成的某一種場景。MAD 及更多同類操作,在圖形工作中很常見,所以在 GPU 性能中,這個數字我們經常提到——因為在圖形計算中很有用,而且這個數字越好看,製造商也越高興。

那麼 Imagination FP16 ALU 相比 FP32 ALU 也就更為複雜了,尤其是 Series 6。不過 Imagination 沒有給我們提供完整的細節,但上面的圖很清楚,Series 6 FP16 ALU 針對某些 3 操作指令(譯者註:3 operator instruction,應該是指在一個時鐘周期內完成 3 個操作,見上圖 Series 6 那張,一個 FP16 ALU 核心之下示意三個 FLOP)做了優化。究竟是什麼樣的操作我們也不知道,但估計對 Imagination 而言很重要。

從單條管線的情況來看,Imagination 給 Series 6XT 「增加」了 2 個 FP16 ALU。注意,上面的圖只是邏輯示意圖,不表示物理層面——實際上這些 ALU 是以某種方式捆綁在一起的,而不是像圖中這樣單獨開來的。從圖中可見,Imagination 對這部分進行了調整,這樣一來 Series 6XT 就能執行更多 FP16 雙操作指令了,比如像 MAD 這樣的操作。由於沒有更多的細節公開,所以許多東西還很難說,但如果這些「新增」的 FP16 ALU 只是舊版 FP16 ALU 的小改款,那麼合理推測,理論上 2 個 ALU 仍然能夠執行 3 操作指令,這樣一來新的 FP16 ALU 實際上也就是先前 ALU 的加寬版了(譯者註:注意看 Series 6XT 這張圖,改版過的 FP16 ALU 核心下面示意兩個 FLOP,就表示單周期執行雙操作,而不再是以前的三操作)。

從這個角度來看,Series 6 和 Series 6XT 其實也沒差多少,都是 2 個 FP32 ALU,針對特定功能有專用單元在側。鑒於 Series 6XT 是更新的架構,所以下文主要把集中力放在 Series 6XT 身上,而且實際上除了 FP16 操作,其餘部分 Series 6 和 6XT 應該是差不多的。

Rogue 是怎麼工作的:wavefront 與超標量 ILP

我們基本上已經看到一條 Rogue 管線的大致組成,接下來我們繼續往 USC 擴展。

一個 Rogue USC 由 16 條管線構成,也就是 16-wide 陣列。這些再搭配一個紋理單元,就組成了一個多「集群」(譯者註:cluster,在某些文章中我將這個概念譯作「簇」),也就是我們談到的一個多集群 USC(multiple USC)。就這種結構來說,其中的紋理單元會和兩個 USC 共享。

紋理單元部分,我們也沒拿到多少資料,但據我們所知,一個 Rogue 紋理單元每個時鐘周期,可以讀取 4 個 32bit 雙線性紋素(bilinear texels)。那麼每 6 個 USC,其紋理填充率就是每個時鐘周期 12 個紋素(12 texels/clock)。

就 PC 標準來看,Rogue 的管線/USC 設定不大尋常(由於其寬度)。AMD 和 NVIDIA 的架構一般在這個位置都偏窄,每條管線每個 shader 核心都只有很少的 ALU 單元。而 Rogue 每條管線就有多個 ALU,其影響就在於有必要在線程中採用指令級並行(ILP),儘可能餵飽較多的 ALU。指令級並行要求一個線程有多指令,彼此間沒有依賴關係,可並行執行。指令數量可以很多,這樣一來 USC 的效率也就部分取決於線程中的指令。我們將其稱作超標量設計。

(譯者註:超標量的本質就是指令級並行,指令級並行就要求有多個相同的功能單元,這些相同的單元可以同時工作。一般來說超標量能夠實現任務的流水線化,不過超標量和流水線還是存在差別的,後者未必需要相同指令的並行。)

作為對比,AMD 的 Graphics Core Next 並非超標量設計,而 NVIDIA 的 Kepler 則也是設計是類似的超標量。實際上 NVIDIA 的每個 CUDA 核心就只有 1 個 FP32 ALU,不過在條件允許的情況下,也會有更多 CUDA 核心可以聯合發射更多的指令。所以 Rogue 依賴於指令級並行,這樣才能獲得最大效率。

Rogue 的有趣之處就在於其寬度。FP32 操作僅 2-wide,不過如果是 FP16 操作,我們看到的是 6-wide 設計。FP16 和 FP32 操作準備好同時發射的幾率,其實比兩個 FP32 指令同時發射的幾率小得多,所以理論上 Rogue 應該無法獲得一條管線 100% 的利用。

即便如此,FP16 和 FP32 單元是分開的,就表明 Imagination 期望大部分時間只使用其中一種,而不是兩者同時使用,這種設計也就不奇怪了。針對 FP32 指令是更簡單的 2-wide,不過 FP16 指令就略微棘手了,因為 FP16 的滿載要求一批完整的 4 指令結構(比如緊隨 4 個 MAD 操作;譯者註:原文是 require a full 4 instruction setup,這裡的 setup 似乎很難找到好的中文譯法,表達的意思應該是某個線程某一部分緊接 4 個雙操作 FP16 指令)。Series 6XT 有 4 個 FP16 單元,也就意味著相比 Series 6 需要更多的晶元空間。

接下來談一談任務如何調度到 USC 管線中的問題。每條管線一次執行一個線程,和當代 GPU 架構是一樣的。所以我們預計 wavefront size 是 16 個線程(譯者註:還記得前面提到的線程分組嗎?回頭看看)。

不過 Rogue USC 的實際情況卻比較有趣,即它們並不跑在相同的時鐘頻率上。ALU 的確是運行在 GPU 參數標定的頻率上的,不過其前端——decoder 和 oprand collector 卻並不是。Imagination 並沒有公開其運行頻率,比較合理的頻率應該是 ALU 的 1/2。所以 300MHz 的 USC,其 decoder 前端頻率可能是 150MHz。

wavefront 執行的一個例子

因此我們認為其 wavefront size 應該不是 16 個線程,而是 32 個線程,執行於 ALU 的 2 個周期之上。這不是我們首次看到這種設計,NVIDIA 先前已經退役的 Fermi 架構也是如此,雖然我們並不期望現在還能再看到這樣的設計。不過可能鑒於 SoC 領域的特性,這顯然是合理的。Imagination 告訴我們,這麼做能夠真正有效地降低功耗。考慮到 SoC GPU 在大部分場景下存在功耗限制,這應該是實現更高性能的一種選擇。

最後就要談到 USC 陣列了。陣列中的每個 USC 都會接受自己的線程,所以活躍執行的線程數,與 USC 的數目相同。也就是說高端的 6 模塊設計,就能看到 6 個線程;2 個模塊設計就只會有 2 個線程。

技術比較

在本文結束之前,我們期望花點時間將 Rogue 與其他架構做個比較。悲劇的是,其他 SoC GPU 架構我們這裡也沒什麼細節信息,所以除了 GFLOP 的對比之外,其餘的對比方式可能意義都不大。但我們可以對比基於桌面 GPU 的移動部分,包括 AMD 和 NVIDIA——這也會很有趣,比如 Kepler 很快就會應用到 K1 之上。

這裡還是要重申,對比只是理論性能。不大可能考慮到方方面面的效率,比如存儲帶寬、ROP,或者 TBDR。TBDR 其實是 Imagination 的殺手鐧,當然其實其他 GPU 公司也有他們自己的 early rejection 技術(譯者註:沒找到這個 early rejection 技術的解釋,我覺得可以翻譯成前期拋棄技術,應該是指 HSR 隱面消除,就是拋棄那些被遮住的多邊形,讓效率更高),據我們所知競爭對手這方面的技術和 TBDR 就很不一樣。拋開 Rogue 的理論性能不談,如果 Imagination 能夠在某個無效任務抵達 shader 之前就將其拋棄,那麼性能表現也會更好。比較這些架構真實性能的唯一方式,應該就是進行基準測試,所以下面的性能數據也只能做個參考。

為此,我們對比了基於 Kepler 架構的 NVIDIA K1,基於 AMD GCN 的 A4-1350,以及基於 Rogue 的 Imagination GX6650 和 G6230。由於 Rogue 配置多樣,很難從性能和尺寸來判斷何種配置與 K1 或 A4-1350 相當,從 Series 6XT 出現的時間來看,Series 6 的配置可能更靠近一些。

GX6650 和 K1 在頻率差不多的情況下,理論 shading 性能也是基本相當的。兩者都依賴於指令級並行,所以如果要達到 384 FLOP/cycle 的吞吐水平,就需要採用 FP32 聯合發射指令。A4-1350 則不存在這方面的限制,要達到 256 FLOP/cycle 的吞吐也更容易,但極限也僅限於此了。

不過看到 GX6650 的理論像素吞吐如此之高,還是頗為意外的。12 pixels/clock(12 ROPs) 相比 K1 和 A4-1350 都高很多,對於整個 SoC 陣營而言都是相當高的。其他很多設計考慮到功耗和面積,採用相對較少的 ROPs(光柵化處理單元),並非所有設計都會將 ROP 與 shader 模塊做數量上的配套。所以 GX6650 有 12 個 ROP 單元還是讓人頗感意外的。另外,還需要考慮到真實的效率情況,因為 ROP 一般受限於存儲帶寬,用這麼多 ROP 也比較難餵飽。

隨後再來看看紋理輸出,就 GX6650 能夠推動的紋素數字來看同樣比較驚人。TMU 通常與 shader 核心數配套,一個 TMU 設計帶來三倍提升也就不意外了,但目前我們仍然不清楚這對整體的紋理輸出而言意味著什麼(譯者註:這句話我沒明白原文表達的是什麼意思,原文說 TMUs regularly scale with shader core counts, so the fact that it』s three-fold what a single TMU design can do is not unexpected, but until now we had never realized just what that meant for overall texture throughput.)。12 texels/clock 的水平對於 SoC GPU 而言是比較多的數字了。不過其表現仍然對存儲帶寬有要求,所以很難說其真實性能究竟怎樣。

上面這張表其實還對比了桌面級基於 NVIDIA Kepler 架構的 GTX650。不說時鐘頻率,GX6650 的 shading 吞吐量達到了 GTX650 的一半。ROP 輸出的距離也在拉進(不過 GTX650 很容易達到兩倍的存儲帶寬),紋理吞吐差距大約將近 3 倍。實際上,GX6650 要達到 GTX650 性能的 40% 恐怕也很難,畢竟還是要考慮到 SoC 與桌面 GPU 之間存儲帶寬的巨大差異。

終話

總結一下 Imagination Rogue 架構,能夠了解這麼多有關 SoC GPU 的設計還是很高興的。雖然我們沒能看到 Rogue 架構的方方面面,估計可能未來也不大可能知曉其中的所有細節,不過我們這次拿到的信息至少讓我們對 Imagination 最新的圖形架構有了更好的認識,也知道了 Series 6 和 Series 6XT 之間的差別。

現在我們還沒法對這些 GPU 進行一對一的比較(而且還需要考慮 CPU 和內存控制器的問題),不過能夠更深入地理解為何某些產品會做相應的設計,以及能夠明確未來產品的發展仍然是很有幫助的一件事。其他 SoC GPU 供應商也有望敞開大門,這樣我們就能更清楚地理解 SoC GPU 的設計了。

最後談一談為何 Imagination 會這麼開誠布公,根本原因應該就是核心大戰,Imagination 不希望在核心數量大戰中失利。通過這些公開的信息,我們能夠從更低層級來探究 Rouge 架構細節,而且我們也同意 Imagination 在核心數量和 ALU 方面的理解。

按照很多 GPU 廠商的「核心」定義,那麼其實每個 Rouge USC 的 FP32 操作,也就相當於 32 核設計了,而且還有類似於 NVIDIA 的線程級並行。Imagination 期望對比的是,6 個 USC 的設計也就等同於所謂的 192 核。不過這些對於現實性能表現沒有太大價值,畢竟有太多的外部變數。但這些對於用戶理解 Imagination 的 USC 集群設計,理論性能表現,以及 Imagination 應對競爭對手的方案仍然有價值。

* 本文來源:Imaginations PowerVR Rogue Architecture Explored ,轉載請註明來自 AnandTech,及譯者歐陽洋蔥(周三科技)


推薦閱讀:

喬布斯最早從什麼時候開始想到要做智能手機?
蘋果公司選擇新 iPhone 發布時間的策略是什麼,有哪些考慮?
iphone丟失?
如何看待「iPhone 7 無線耳機被指存輻射問題,破壞大腦血管屏障」的新聞?
朋友老說 iPhone 非常難用,觸摸屏沒有實體鍵盤那樣的手感,說 iPad 就是 iPod touch 的放大版。請問我該如何應對他?

TAG:iPhone | 手机 | 图形处理器GPU |