GPU如何工作:PowerVR/高通Adreno/ARM Mali的渲染模式分析
在渲染片元的時候,GPU先比較最粗糙版本的Z-buffer。如果要畫的片元Z值還比較遠,那這個片元就一定不用畫出來了。如果它比較近,就再拿比較細的Z-buffer來比較,一直比較到最細的版本。在理想的情形下,通常大部分的片元都不需要比較到最細的版本,所以可以節(jié)省不少時間(要記得,一個“粗糙”版的Z值比較,其實就等于和四個“精細”版的 Z 值比較)。
本文引用地址:http://www.ex-cimer.com/article/201606/292810.htm相較之下,PowerVR的TBDR會在幾何階段的三角形裁剪后將當前 scene(場景或者說畫面)的三角形經(jīng)過篩選排序存放在scene buffer 內(nèi),然后由 HSR(隱面消除)算法將攝像機視點不可見的片元剔去掉,這部分實現(xiàn)細節(jié)已經(jīng)在PowerVR一節(jié)中有闡述,這里就不再復(fù)述了。
按照高通的說法,Adreno從3xx系列采用了名為FlexRender的渲染架構(gòu),可以自動在立即渲染和TBDR之間切換,而且這個TBDR的執(zhí)行過程和PowerVR TBDR是基本一樣的(同樣有對三角形進行binning和剔除無效片元的處理):
所以從微架構(gòu)方面而言,高通透露的信息并不多,只能看到個大概,以驍龍820搭配的Adreno 530為例,采用了統(tǒng)一著色架構(gòu)和FlexRender,配有256個ALU,支持DirectX 12.1、Vulkan、OpenCL 2.0。
采用驍龍820(搭載 Adreno 530)的小米 5(價格1999元版本))在運行OpenCL-Z的FP32 性能測試結(jié)果是287 GFLOPS,相較之下,價格799元的紅米Note 2(Power VR 6200)只有44 GFLOPS,前者是后者性能的6.52倍,當然,這個測試只是屬于底層測試,實際的游戲體驗因人、因應(yīng)用而異。
安謀Mali——弱核化設(shè)計
安謀(ARM)最為人熟知的是旗下的各款 ARM CPU內(nèi)核,目前的主要手機幾乎都是采用ARM 陣營的CPU。
ARM的GPU Mali是ARM在2006年收購的挪威公司Falanx獲得的,源起于是90年代由ARM在挪威科技大學(xué)支持的的項目,到了2001年由Borgar Ljosland與四位在該項目中的GPU團隊學(xué)生于2001年創(chuàng)辦了這家Falanx Microsystems。
Falanx最初是希望打進臺式機市場,不過隨著3dfx、Matrox等公司的萎靡、敗退,臺式機GPU市場的格局發(fā)生了很大的變化,不再有空間給新丁了,F(xiàn)alanx轉(zhuǎn)向了從事手機、PDA、機頂盒、游戲掌機、信息機等領(lǐng)域,不過他們當時在這個領(lǐng)域其實做得并不算很出色,ARM的收購對他們來說是一個重要的轉(zhuǎn)折點。
ARM收購Falanx推出的第一款GPU就是2007年的Mali-200,是Mali第一款OpenGL ES 2.0 GPU,它和它的換代型號Mali-300、Mali-400、Mali-450都是基于名為Utgard(北歐神話中Utgard-Loki統(tǒng)治下約頓巨人位于仙宮與塵世之外的宮殿)的微架構(gòu)。Utgar采用的是非統(tǒng)一架構(gòu),頂點指令和像素指令有各自專門的單元來執(zhí)行,到了Mali-400時候?qū)崿F(xiàn)了多核能力。
Mali最新的微架構(gòu)代號是Midgard,和Utgard不同的是,Midgard開始采用統(tǒng)一著色架構(gòu),幾何和片元操作指令都在同一個著色器單元上執(zhí)行。
Mali同樣采用了分塊式渲染(塊元大小是16x16),但是根據(jù)下面這個幻燈片,可以看到其scene buffer或者說primitive buffer保存的圖元順序必須和程序遞交的順序保持一致(畫紅線部分),不存在PowerVR那樣的篩選(sorting)動作。
因此如果按照ImgTec的說法 Mali并不能算是真正的TBDR,當然,它還是具備 Early-Z這樣的隱面消除能力,只是粒度上肯定不如PowerVR那么細(PowerVR自稱其HSR能力為pixel perfect)。
在渲染流程方面,Mali或者說Midgard和目前你看到的大多數(shù)GPU做法有些不一樣,那就是作為統(tǒng)一渲染架構(gòu),它可以在同一時間里同時對幾何和片元進行渲染操作,而其他的GPU在同一時間里要嘛就是幾何計算要嘛就是片元計算:
如上圖所示,你可以看到Mali可以在同一時間片上同時進行幾何和片元操作,這表明Mali內(nèi)部的任務(wù)調(diào)度設(shè)計非常靈活,原因請看下面的介紹。
上圖是Mali的著色器內(nèi)核(Shader Core)功能模塊圖,可以看到,如果圖示的確是正確的話,那么這個著色器內(nèi)核里面可謂是五臟俱全,本質(zhì)上就是一個小 GPU,圖形渲染所涉及到的操作都能在一個 Shader Core 上完成,因此配有多個Shader Core的Mali可以做到在同一時間內(nèi)跑幾何和片元處理,多個Shader Core的Mali GPU其實就是一個片上多GPU并行渲染系統(tǒng)。
其實其他廠商尤其是采用TBR的GPU可以像Mali這樣片上多核運行多個Tile,但是Mali GPU的特別之處是它的內(nèi)核內(nèi)部是沒考慮擴展的,至少目前是這樣。像ImgTecPower VR XT7等其他廠牌的GPU內(nèi)部的CU數(shù)都是具備延伸能力的,而Mali GPU則對不起,不管什么型號的Mali GPU,上面的Tri-Pipe 都是固定的一個,這就是所謂的“完整的弱內(nèi)核”設(shè)計。
從OpenCL的角度而言,每個Mali內(nèi)核都是一個CU,只能以多個Partition(分區(qū))的方式實現(xiàn)規(guī)模擴張。而像PowerVR則是既可以多個CU 也可以多個Partition的方式實現(xiàn)規(guī)模上的性能延伸。
值得一提的是,Mali-T880的Tri-Pipe,這其實就是Mali的可編程渲染/計算單元,其中包含了紋理(T-Pipe)、內(nèi)存指令(LS-Pipe)和算術(shù)邏輯(A-Pipe)單元三部分,在Mali-T880之前,Tri-Pipe的算術(shù)邏輯單元大都只有兩個,而在Mali-T880上,Tri-Pipe 的算術(shù)邏輯單元增加到了3個,使其計算能力提升了50%。
Mali相對于目前大多數(shù)其他廠商GPU的另一個區(qū)別要點是它的A-Pipe采用了SIMD向量處理設(shè)計,寄存器能夠像目前CPU的SIMD單元那樣靈活地拆分成2xFP64、4xFP32、8xFP16、2xInt64、4xInt32、8xInt16、16xInt8等數(shù)據(jù)類型訪問。
按照ARM的說法,Mali的算術(shù)ISA 用了SIMD + VLIW的設(shè)計:
三個向量單元(128-bit數(shù)據(jù)路徑)
4路FP32或者8路FP16
16路Int8
兩個標量單元(32-bit數(shù)據(jù)路徑)
按照ARM官方博客的一篇文章,Mali-T760的每條A-Pipe單周期單精度計算性能是17FLOP,從上圖來看,VMUL和VADD以及SADD、SMUL的FLOPS是應(yīng)該是10個,余下的7個就是那個VLUT。
LUT的含義并不是很清楚,也許是查表(Look-up Table)的含義,不過這樣的話,我覺得似乎不太適合將其歸入到人們常說的通用計算性能指標里,即使其使用的是VLIW指令集。
所以我覺得每條A-Pipe的單精度性能應(yīng)該視作每周期10個比較合適。對于Mali-T880MP16來說,在 650MHz 時候的單精度性能應(yīng)該是312 GFLOPS,同理,Mali-T760MP8的單精度浮點性能應(yīng)該是104 GFLOPS,當然這只是我的個人意見。
LS-Pipe執(zhí)行的是和紋理無關(guān)的內(nèi)存存取動作,例如幾何/片元處理時候的屬性讀取和變量寫入操作。通常而言每條指令就是一次內(nèi)存訪問操作,如果是 A-pipe的向量操作就是單指令Vec4操作。
雖然ARM Mali并非TBDR,不具備在進入塊元渲染之前透過篩選將無效的片元剔除掉,但是它的某些型號具備名為Forward Pixel Kill(正向像素剔除,簡稱FPK,見上面Mali-T880 Shader Core架構(gòu)圖中Early-Z后接的就是FPK單元)技術(shù)。
具備這個技術(shù)的GPU所跑的線程不再是不可撤銷的,如果發(fā)現(xiàn)稍后的線程要向相同像素位置寫入不透明數(shù)據(jù),就會將已經(jīng)在進行的計算終止掉。由于每個像素需要花費一段時間才能完成,因此 FPK可以有一個時間窗口來排空流水線中已有的無效渲染片元。
按照ARM的說法,這個FPK技術(shù)在最適中的流水時間窗口下所能達到的消除無效渲染效果可以和PowerVRTBDR w/HSR媲美,而且無需對整個畫面的三角形進行篩選、無需在程序里添加篩選代碼、能夠?qū)Π胪该鲗ο髮嵭姓_處理、不會對幀率產(chǎn)生突變影響。
上面這個表格是維基百科上的Mali各型號規(guī)格表,其中的單精度指標是包括了那個VLUT的。
目前市場上大多數(shù)采用Mali的中端SoC都還是基于Mali-4XX系列,按照 ARM的說法,目前有75%的數(shù)字電視、超過50%的Android平板電腦、大于35% 的智能手機采用了Mali GPU。
例如小米電視3就采用了Mali-T760MP4這個GPU,三星去年的旗艦產(chǎn)品Galaxy S6、Galaxy S6 Edge都有采用Mali-T760,我手頭有一臺支持智能卡的電信T6有線電視機頂盒,搭配的是全志的SoC,其中的GPU也是ARM Mali-400MP,所以這個看上去有點古怪(完整的弱內(nèi)核設(shè)計)的GPU在市占率方面Mali已經(jīng)取得了相當不錯的成績。
三星Galaxy S6采用的Mali-T760MP8名義頻率是772MHz,理論單精度性能是123.5 GFLOPS(按照每個算術(shù)流水線里包含兩個4 路FP32 SIMD和兩個 FP32標量來統(tǒng)計,未將那個相當于7個FLOPS 的VLUT或者說 SFU 單元計算在內(nèi)),3DMark Ice Storm Unlimited 得分是 20988 ,而采用PowerVRGT7600的iPhone 6s Plus 3Dmark Ice Storm Unlimited 結(jié)果是27811,基本上符合123.5 GFLOPS vs 172.8GFLOPS (按照iPhone 6s Plus的GT7600頻率為450MHz時計算出的單精度性能為172.8 GFLOPS)的差距。
我們相信,在新的一年里將有機會看到Mali-T8xx系列初露崢嶸,原因是Mali的完整弱內(nèi)核比較便于隨意搭配,新內(nèi)核帶來的規(guī)格、性能提升也可以為新應(yīng)用帶來更好的用戶體驗。
結(jié)語
在這篇文章里,我們介紹了三個常見的智能設(shè)備或者說手機/平板電腦的GPU,涉及到的知識面相對坊間的大多數(shù)文章而言要更深入一些,例如ImgTec的PowerVR、高通的Adreno、ARM的Mali雖然都屬于TBR,但是具體的實現(xiàn)卻有著各自的特色。
ImgTec的PowerVR是三個TBR架構(gòu)中歷史最長的,也是10年GPU大戰(zhàn)中少數(shù)幸存下來并且活的還比較滋潤的廠商之一,PowerVR在TBDR方面擁有非常豐富的實作經(jīng)驗,憑借 TBDR 的高能效比特點,在移動設(shè)備中站穩(wěn)了腳跟,成為包括蘋果在內(nèi)眾多手機廠商選擇的GPU方案。
高通的 Adreno 從3xx系列開始引入了名為FlexRender的渲染技術(shù),能動態(tài)在IMR和TBDR渲染模式之間切換,前者可以在兼容性、響應(yīng)時延方面提供最佳的保證,而后者可以在性能耗電比方面達到更佳的體驗效果。
Mali的渲染架構(gòu)相對簡單,屬于TBIMR,也就是分塊式立即渲染,對遞交的三角形順序不作篩選處理,分塊的主要目的是節(jié)省帶寬,不過它的某些型號具備名為 Forward Pixel Kill的技術(shù),能夠隨時停掉“預(yù)見”到的無效像素(線程)的渲染,號稱可以達到媲美PowerVR TBDR 的效果。同時,Mali采用了“完整弱GPU內(nèi)核”(相對于其他廠商的“完整可延伸GPU內(nèi)核”而言)設(shè)計,內(nèi)核中的渲染單元不能擴展,性能的規(guī)模延伸是透過增加內(nèi)核數(shù)來達到。
我們在本文中沒有對NVIDIA的GeForce ULP和Intel的GenX進行介紹,不過它們其實基本上就是同架構(gòu)的臺式機版本的規(guī)模縮減版,當然,由于針對的移動設(shè)備,其中還有一些省電措施,遺憾的是,這兩家廠商的GPU雖然性能不錯,但是在手機市場上由于各自自身的因素而缺乏整機廠商的支持。
所以,本文從一開始就不打算透過這篇文章來影響讀者的購買意向,這只是一篇有科普性質(zhì)的文章,盡可能地較少功利的因素,但求看起來資料盡可能詳細有趣同時又能增加一些見識就行。
評論