<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

  TBDR是如何實(shí)現HSR的呢?

本文引用地址:http://dyxdggzs.com/article/201606/292810.htm

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


IMR與TBR/TBDR兩大GPU流派的愛(ài)恨情仇


  (Kristof Beets)

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

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

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

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

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

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

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

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


IMR與TBR/TBDR兩大GPU流派的愛(ài)恨情仇


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

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

  1、數據拾取可以采用流水線(xiàn)結構,因此不存在性能懲罰;

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

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

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

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

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

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

  PowerVR的渲染

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


IMR與TBR/TBDR兩大GPU流派的愛(ài)恨情仇


  在完成了一個(gè)塊元的渲染后,這個(gè)塊元的像素會(huì )被傳輸到顯存(對于采用一體內存架構的移動(dòng)設備來(lái)說(shuō),這塊顯存是從主內存中分配的)。

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

  相較于非TBDR的GPU微架構來(lái)說(shuō),PowerVR或者說(shuō)TBDR能對整個(gè)畫(huà)面(場(chǎng)景)進(jìn)行判別,確定哪些三角形覆蓋的片元需要渲染,而“傳統”的立即渲染架構無(wú)法實(shí)現這一點(diǎn)。

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

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


IMR與TBR/TBDR兩大GPU流派的愛(ài)恨情仇


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

  好好的三角形不用,為啥要折騰這個(gè)無(wú)限大平面呢?可能的原因是在當時(shí)看來(lái),這樣的技術(shù)可以節省在Scene Buffer里要存放的三角形數:

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

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

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

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

  ImgTec PowerVR Rogue

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


IMR與TBR/TBDR兩大GPU流派的愛(ài)恨情仇


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

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

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

  在型號的含義方面,G6050里有0.5個(gè)正常規格的USC(通用著(zhù)色器簇),61X0 里含有1個(gè)USC。USC 是PowerVR Series 6引入的統一著(zhù)色簇簡(jiǎn)稱(chēng),區別于以往的PowerVR Series 5時(shí)候的USSE。

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

  下圖是PowerVR最新的PowerVR Series 7XT的微架構圖:


IMR與TBR/TBDR兩大GPU流派的愛(ài)恨情仇


  GPU廠(chǎng)商在設計GPU的時(shí)候都會(huì )把延伸性作為重要的設計因素,因為這樣能確保軟件、硬件資源的最充分利用,上圖的USC規??梢砸罁唧w的應用情況作調整,例如iPhone 6s采用的GT7600就具備6個(gè)USC(或者說(shuō)6個(gè)CU)。

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


IMR與TBR/TBDR兩大GPU流派的愛(ài)恨情仇


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

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

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

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

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



關(guān)鍵詞: PowerVR Adreno

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>