<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 業(yè)界動態(tài) > GPU如何工作:PowerVR/高通Adreno/ARM Mali的渲染模式分析

          GPU如何工作:PowerVR/高通Adreno/ARM Mali的渲染模式分析

          作者: 時間:2016-06-20 來源:愛活網(wǎng) 收藏
          編者按:對大多數(shù)讀者來說,GPU架構(gòu)甚至GPU是啥,的確完全可以不需要了解,只要看上去外觀比較合眼緣就可以讓他們毫不猶豫地掏腰包購買。

            TBDR是如何實現(xiàn)HSR的呢?

          本文引用地址:http://www.ex-cimer.com/article/201606/292810.htm

            不過幾何體壓縮并非TBDR的賣點,TBDR的真正賣點是可以實現(xiàn)完全消除不可見三角形的片元渲染,那么它是如何做到這一點的呢?


          IMR與TBR/TBDR兩大GPU流派的愛恨情仇


            (Kristof Beets)

            根據(jù)現(xiàn)在供職于ImgTec擔(dān)任商業(yè)開發(fā)總監(jiān)的Kristof Beets在 2001年(就在這一年他加盟,任職開發(fā)者關(guān)系協(xié)調(diào)工程師,該文似乎是他在實習(xí)期間撰寫的)的一篇文章,的HSR實現(xiàn)方式應(yīng)該是這樣的:

            1、從Tile Buffer中獲得第一個指針,基于這個指針就能拾取到Scene Buffer中所有三角形的數(shù)據(jù)。

            這一步可以實現(xiàn)預(yù)拾取并將數(shù)據(jù)存放在一個GPU的片上緩存里,這個高速緩存可以稱作為On-Chip Tile buffer(片上塊元緩存),用作區(qū)別于片外的圖元列表Tile Buffer,雖然都是塊元緩存,都是對應(yīng)16*16個像素,但是存放的東西完全不一樣(一個是從指針解引用后獲得的三角形數(shù)據(jù)和計算好的深度值,另一個則是圖元列表)。

            2、使用這個三角形的數(shù)據(jù)計算出被該三角形覆蓋的Tile中每個像素的Z值(深度值)。

            3、這些深度值數(shù)據(jù)以及對應(yīng)于第一個三角形的指針被一起存放在GPU內(nèi)的高速緩存里。

            4、重復(fù)上面的步驟,獲得第二個三角形的數(shù)據(jù)以及該Tile中被其覆蓋的像素的深度值,對第二個三角形覆所蓋像素的深度值和第一個三角形所覆蓋像素的深度值進行比較,如果新的深度值更接近于視口(表明是可看見的),就更新深度值以及三角形(指向新的三角形)。

            5、重復(fù)上述的步驟,直到覆蓋該Tile的所有三角形數(shù)據(jù)以及深度信息更新完畢。

            6、此時,GPU的片上高速緩存存放的就是用于確定像素色彩的三角形。


          IMR與TBR/TBDR兩大GPU流派的愛恨情仇


            前面的Scene Buffer以及Tile Buffers都是存放在GPU外的,而上面步驟中絕大部分操作都是GPU內(nèi)部的高速緩存上進行的(除了從Scene Buffer中載入該塊元的三角形數(shù)據(jù)外),速度會非常快。

            渲染一個塊元需時256個周期(根據(jù)Kristof Beets文章提到16x32的塊元需時512個周期推算):

            1、數(shù)據(jù)拾取可以采用流水線結(jié)構(gòu),因此不存在性能懲罰;

            2、篩選(計算Z值)需時一個周期,這個步驟也可以采用流水線結(jié)構(gòu),每個三角形的檢查和塊元更新可以在一個周期內(nèi)完成。

            因此除非時出現(xiàn)極端狀況,256個周期的渲染時間是可以掩蓋掉塊元中含有256個三角形執(zhí)行篩選動作的耗時,在一個16x16的塊元內(nèi)出現(xiàn)256個三角形的情況目前來說應(yīng)該還是很少見。

            按照這樣的思路可以推算出 1920x1080 60FPS下能實現(xiàn)的每秒三角形篩選能力是:

            1920x1080 * 60FPS = 124,416,000 Mtriangles/s

            根據(jù)上面的算式可以得出在像PowerVR SGX 5上每個塊元含有高達256個三角形的情況下,要滿足60FPS速率時的三角形篩選個數(shù)為124百萬三角形,現(xiàn)實的游戲中幾乎沒有這樣的情況會出現(xiàn),因為目前的制程無法做到一個全程勝任這個三角形規(guī)模真實游戲的移動GPU。

            在知名的三維性能測試軟件3DMark里有一個支持在手機上進行測試的icestorm場景,其三角形規(guī)模在Extreme模式時候的為每幀28,000個,達到60FPS時就是每秒1.68百萬三角形/秒,對于手機來說這個測試已經(jīng)算是比較嚴(yán)苛了,但是此時三角形規(guī)模也就是每個塊元大約3.5個三角形,遠遠低于每周期256個三角形的處理能力。

            PowerVR的渲染

            完成塊元渲染后,在塊元幀緩存中的數(shù)據(jù)會被寫入到顯存(在手機中通常顯存和系統(tǒng)內(nèi)存共享)中。在這個寫入動作執(zhí)行的時候,會一并執(zhí)行抖動操作(只執(zhí)行一次而非多次)。如果在臺PC上,如果指定了超取樣抗鋸齒,在這一步還會執(zhí)行一個向下取樣的操作,將畫面縮小到指定的屏幕分辨率。


          IMR與TBR/TBDR兩大GPU流派的愛恨情仇


            在完成了一個塊元的渲染后,這個塊元的像素會被傳輸?shù)斤@存(對于采用一體內(nèi)存架構(gòu)的移動設(shè)備來說,這塊顯存是從主內(nèi)存中分配的)。

            然后,GPU繼續(xù)下一個塊元的渲染,直到整幀畫面渲染完畢后,以雙緩存方式運作的Scene Buffer開始把下一幀的塊元遞交給渲染單元執(zhí)行后續(xù)工位處理,周而復(fù)始。

            相較于非TBDR的GPU微架構(gòu)來說,PowerVR或者說TBDR能對整個畫面(場景)進行判別,確定哪些三角形覆蓋的片元需要渲染,而“傳統(tǒng)”的立即渲染架構(gòu)無法實現(xiàn)這一點。

            Kristof Beets的原文還介紹了infinite plane(無限大平面)和HSR的關(guān)系,所謂的infinite plane并不難理解,你可以想象一下:在一個三維空間里存在著一塊無限大的平面,這塊平面顯然會把這個三維空間一分為二。

            如果我們在這個三維空間多弄幾個這樣的平面并使其相交,也就可以構(gòu)建出一個幾何體模型出來了(例如只要六個相交的無限大平面就能構(gòu)造出一個多邊形數(shù)很少的立方體)。


          IMR與TBR/TBDR兩大GPU流派的愛恨情仇


            這樣的建模技術(shù)和常見的三角形建模是有很大區(qū)別的,所以很難找到合適的建模工具,其應(yīng)用非常受限,而且隨著模型越來越復(fù)雜,無限大平面的優(yōu)勢也就沒啥感覺了(在Youtube上有一段采用PowerVR PCX2渲染一個由35個無限大平面構(gòu)建的甜甜圈的視頻,幀率只有47 fps),三角形此時是更合理的選擇。

            好好的三角形不用,為啥要折騰這個無限大平面呢?可能的原因是在當(dāng)時看來,這樣的技術(shù)可以節(jié)省在Scene Buffer里要存放的三角形數(shù):

            在幾何階段,PowerVR會根據(jù)從視點發(fā)出的一條“測量光”確定最前和最后的平面相交點,藉此得出一個渲染計算約束椎體(effect volume),使得這些無限大平面變成有限的平面,加上隱面消除技術(shù),幾何體外突出的平面也被消隱掉。

            較少的多邊形、可以和TBDR的隱面消除技術(shù)完美配合,于是無限大平面建模的合理性也就因此存在了。

            據(jù)說在PowerVR Series 2以后就不在支持無限大平面,目前為止只有世嘉 DreamCast中的那枚PowerVR芯片是具備無限大平面建模能力的圖形芯片,所以無限大平面這個部分我們完全不需要考慮,這里介紹主要是為了強調(diào)一下 PowerVR的特點——近乎完美的隱面消除能力(如果不涉及阿爾法混合、阿爾法測試的話,因為這兩項操作會導(dǎo)致HSR失效)。

            我們上面費了很多口舌來闡述PowerVR的最主要特色TBDR,接下來就讓我們說說當(dāng)前以及即將推出的PowerVR GPU到底會長成什么樣子。

            ImgTec PowerVR Rogue

            ImgTec在2012年發(fā)布了名為PowerVR Rogue的第六代PowerVR微架構(gòu),現(xiàn)在市場上許多手機里的GPU都是基于該微架構(gòu)的變種,例如紅米Note 3/Note2、魅藍 Metal、魅族 MX5里的PowerVR G6200。蘋果iPhone 6s Plus的GPU經(jīng)過各種驗尸手段查證后確認為PowerVR GT7600,這個GT7600被PowerVR定義為第七代PowerVR(PowerVR Series 7 或者 Rogue 7)微架構(gòu)。毫無疑問,不論檔次高低,現(xiàn)在許多手機、平板電腦中都有基于PowerVR的GPU。


          IMR與TBR/TBDR兩大GPU流派的愛恨情仇


            ImgTec屬于經(jīng)營、開發(fā)知識產(chǎn)權(quán)的芯片公司,本身并不直接售賣芯片,透過研發(fā)大量芯片內(nèi)核,然后將其授權(quán)給需要的第三方公司,收取授權(quán)金來維持公司的運營,因此他們會弄一大堆內(nèi)核,以滿足不同廠商、市場的需求。

            理論上這樣的運管方式只牽涉到研發(fā)費用和市場拓展費用,弄一大堆內(nèi)核IP的并不會造成實體產(chǎn)品那樣的庫存壓力。

            ImgTec在2012年發(fā)布了代號Rogue的PowerVR Series6微架構(gòu),最低端的是G60X0和G61X0(x為其中一個數(shù)字編號,不同編號型號配置均不一樣),對應(yīng)的D3D規(guī)格只能夠支持DX9特性級別。

            在型號的含義方面,G6050里有0.5個正常規(guī)格的USC(通用著色器簇),61X0 里含有1個USC。USC 是PowerVR Series 6引入的統(tǒng)一著色簇簡稱,區(qū)別于以往的PowerVR Series 5時候的USSE。

            前面我們所說的TBDR是指渲染流程的方式,而通用著色器簇則是指具體微架構(gòu)里將若干個計算、貼圖部件綁定在一起的單元,一個USC 就類似于CPU中傳統(tǒng)概念上的一個內(nèi)核,正如我們前面所說的,它對應(yīng)的就是通用計算標(biāo)準(zhǔn)OpenCL中的術(shù)語就是Compute Unit。

            下圖是PowerVR最新的PowerVR Series 7XT的微架構(gòu)圖:


          IMR與TBR/TBDR兩大GPU流派的愛恨情仇


            GPU廠商在設(shè)計GPU的時候都會把延伸性作為重要的設(shè)計因素,因為這樣能確保軟件、硬件資源的最充分利用,上圖的USC規(guī)??梢砸罁?jù)具體的應(yīng)用情況作調(diào)整,例如iPhone 6s采用的GT7600就具備6個USC(或者說6個CU)。

            上圖的PowerVR Series 7XT屬于目前ImgTec最強大的GPU微架構(gòu),蘋果公司的iPhone 6s列就是采用基于該GPU微架構(gòu)的GT7600。


          IMR與TBR/TBDR兩大GPU流派的愛恨情仇


            作為PowerV RSeries 7的GT7600,提供了FP16(半精度)的原生支持,所以如果程序采用了FP16的話,性能會較FP32快一倍,對于手機應(yīng)用來說,F(xiàn)P16 提供了10位的有效值和5位的指數(shù),是可以滿足許多情況下的圖形渲染計算的需求。

            要正確使用這類FP16需要比FP32更多的技巧,像當(dāng)年NVIDIA的NV3X就提供了FP32 + FP16設(shè)計,但是在和AMD R300的性能競爭中一直處于下風(fēng),維持NV3X拉力的主要靠NVIDIA和各個游戲開發(fā)商緊密的合作關(guān)系。

            上表中的GFLOPS指標(biāo)是指GPU計算單元運行于1GHz時候的情況,不過我們目前尚未有可靠的iPhone 6s系列GPU運行頻率規(guī)格,wiki百科上寫的蘋果A9 GPU為450MHz(此時的單精度浮點性能是172 GFLOPS)或者533MHz也只能是參考。

            根據(jù)GFXBench的ALU測試結(jié)果,iPhone6s Plus(GT7600,6 USC)是 12781fps,iPhone6 Plus(GX6450,4 USC)是5847 fps,這意味著前者的計算性能是后者的兩倍左右,考慮到ImgTec曾經(jīng)表示PowerVR Series 7XT浮點性能在同頻、同規(guī)模下的性能是PowerVRSeries 6XT 1.6 倍,這個測試結(jié)果表明iPhone 6s Plus的GT7600頻率很可能和iPhone 6 Plus的GX6450相當(dāng)。

            業(yè)界也有人認為iPhone 6s系A(chǔ)9采用的并非GT7600,原因是開發(fā)文檔缺乏一些PowerVR Series 7XT存在的Tessellation等特性以及采用Metal作為API,這其實因為PowerVR的授權(quán)本來就允許廠商自行定制驅(qū)動,像 Intel的GMA系列GPU就沒有開放TBDR這樣的PowerVR最核心技術(shù),而且Tessellation對于這個級別的GPU而言意義也不是很大(有多少人用過iPhone 6 GX6450里的那個Tessellation?),所以不必太為此糾結(jié)。



          關(guān)鍵詞: PowerVR Adreno

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();