文獻標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.182489
中文引用格式: 韓孟橋,蔣林,楊博文,等. 移動圖形處理器的紋理Cache設(shè)計[J].電子技術(shù)應(yīng)用,2019,45(5):17-22.
英文引用格式: Han Mengqiao,Jiang Lin,Yang Bowen,et al. Design of texture cache for embedded mobile graphics processing unit[J]. Application of Electronic Technique,2019,45(5):17-22.
0 引言
隨著手機、PAD等移動設(shè)備進一步普及,對3D圖形繪制的需求也越來越大。桌面GPU相較于移動GPU,其渲染流程簡單直接、數(shù)據(jù)吞吐率高,進而帶寬需求高,功耗大。文獻[1]指出相比于集成電路按照摩爾定律的發(fā)展速度,電池供電技術(shù)發(fā)展得緩慢得多,移動設(shè)備最基本的問題是電池供電。在移動設(shè)備中,由于圖形應(yīng)用于液晶顯示器上,因此圖形渲染時系統(tǒng)功耗大,軟件的優(yōu)化是有限的,所以對硬件的低功耗設(shè)計是研究的重點,進而達到移動設(shè)備在低帶寬功耗的條件下實現(xiàn)較高性能的渲染效果。
紋理映射是紋理空間與像素空間相互映射的過程,在對紋理圖形進行放大或縮小時,會出現(xiàn)單紋素對應(yīng)多像素或多紋素對應(yīng)單像素的情況,造成紋理走樣的現(xiàn)象。因此,行業(yè)內(nèi)權(quán)威共同制定了適用于嵌入式的3D圖形標(biāo)準OpenGL ES[2],其使用各向同性濾波方式。該方式中的最近鄰點采樣濾波因沒有考慮到紋理映射的范圍,容易產(chǎn)生鋸齒現(xiàn)象;該方式中的雙線性濾波雖然有效地減少了鋸齒問題,但容易造成模糊現(xiàn)象;該方式中的Mipmap濾波是經(jīng)典的映射方法;最后的三線性濾波是對Mipmap濾波的優(yōu)化,所以本文選擇了三線性濾波。因為雙線性濾波是對鄰近d的一層紋理圖像中相鄰的四個紋素位置進行采樣,三線性濾波是對鄰近d的兩層紋理圖像分別進行雙線性濾波,并將兩層的雙線性濾波加權(quán),進而雙線性濾波是三線性濾波的簡化,本文以下用雙線性進行說明。
紋理訪存是影響像素處理器速率的關(guān)鍵,同樣也是移動GPU整體性能的瓶頸。加上片上紋理高速緩沖存儲器,建立關(guān)于紋素的片上L1緩存,有效降低了移動GPU與外存間的數(shù)據(jù)帶寬。紋理Cache與普通Cache的不同:首先,紋理Cache為只讀,區(qū)別于普通Cache的寫數(shù)據(jù)和寫回功能;其次,紋理Cache的吞吐率同移動GPU整體性能結(jié)合緊密,本文結(jié)合雙線性濾波需要四紋素的特點,使用4端口Cache。紋理Cache是流水線形式,本文使用FIFO控制器控制FIFO緩沖區(qū)預(yù)存塊的讀寫,減少了移動GPU流水線的停頓。
1 基于Tile-based的移動圖形處理架構(gòu)
Imagnination公司PowerVR系列產(chǎn)品的移動GPU采用文獻[3]提出的TBR(Tile Based Rendering)渲染模式,在幾何運算后將屏幕像素點劃分為多個Tile,并在像素處理器中逐Tile進行渲染。相比于適用于桌面圖形處理器的立即渲染模式(Immediate Mode Rendering,IMR),TBR渲染模式在執(zhí)行光柵化和圖元操作時可以將每個Tile上所有的深度及顏色等信息都存在片上,顯著降低了存儲帶寬。文獻[4]指出移動GPU主要的功耗來源于訪問片外存儲,所以TBR模式適用于移動圖形處理器。圖1為本文移動圖形處理器的體系結(jié)構(gòu)。
整個移動GPU采用了統(tǒng)一架構(gòu),即幾何變換操作、頂點坐標(biāo)的光照計算和著色渲染都在統(tǒng)一渲染染色器(Unified Shading Processor,USP)中完成;屏幕坐標(biāo)產(chǎn)生單元(Screen-coordinate Generating Unit,SGU)完成幾何處理后頂點的圖元裝配、裁剪、背面剔除等操作,轉(zhuǎn)換到屏幕空間;后續(xù)模塊為覆蓋率計算、中間數(shù)據(jù)緩存建立等;最終通過深度測試輸出給幀緩存。TBR渲染模式中,Tile的大小有8×8、16×16、32×32等多種劃分方式,文獻[5]指出當(dāng)Tile大小為8×8時,紋理Cache的性能可以達到最優(yōu),但從移動GPU整體性能方面考慮,一般應(yīng)采用Antoeh[6]建議的32×32大小的Tile。
2 紋理濾波
紋理映射是將二維圖像投影到屏幕的三角形上,在移動GPU中,這一過程是逆向處理的,即對每個在屏幕上的像素點,計算其對應(yīng)于二維圖像中的紋理坐標(biāo)。但屏幕空間對應(yīng)到紋理空間時,不一定恰好對應(yīng)到一個紋素,而是對應(yīng)到紋理空間中某個區(qū)域,這時就需要對該區(qū)域中的紋素進行加權(quán)計算,這就是濾波。
Lance Willams提出了一種目前幾乎所有圖形硬件都會支持的濾波方法,即Mipmap濾波技術(shù)。圖2(a)所示為Miapmap金字塔,其核心內(nèi)容如圖2(b)所示,將不同分辨率的紋理存儲在外存中。在映射時,根據(jù)紋素與像素的縮放率d,選擇適合的層級,對于較小的多邊形映射,可以有效降低紋理走樣的出現(xiàn)。
在Mipmap濾波的基礎(chǔ)上,進一步提出了三線性濾波,顯著降低了走樣現(xiàn)象的產(chǎn)生。首先,計算縮放率d;其次,在d的上下兩個不同分辨率紋素層級中分別讀取4個紋理坐標(biāo)并進行雙線性濾波;最終,對兩個結(jié)果進行加權(quán)。
3 紋理Cache的設(shè)計
3.1 紋理Cache電路
紋理Cache的硬件電路結(jié)構(gòu)如圖3所示,主要包括:LUT查找電路、地址判斷電路、標(biāo)記位比較電路、LRU替換電路、FIFO控制電路和輸出電路。
3.2 查找電路
查找電路負責(zé)計算雙線性濾波所需要的四個紋素在外存中的地址。通過查找表(Look Up Table,LUT)給出紋理圖像所在Mipmap金字塔中的層級,將其輸出給地址判斷電路、標(biāo)記位比較電路、LRU替換電路和輸出電路。
在三線性濾波中,由紋素和像素的縮放率d可以得到兩個不同且相鄰Mipmap層的紋理圖像,即每個紋理圖像的基地址addr0是由紋理ID和Mipmap層共同決定的。本文中USP支持最大分辨率紋理圖像為1 024×1 024,對應(yīng)層級數(shù)為0,依據(jù)金字塔中每級的紋理圖像分辨率需要滿足2n×2n的大小,則層級數(shù)為1對應(yīng)的紋理圖像分辨率為512×512,以此類推。
3.3 地址判斷模塊
地址判斷模塊根據(jù)基地址信息,計算出雙線性濾波中另外三個紋素所在外存中基于基地址的偏移地址,并把整合后的四個紋素地址連續(xù)地輸出給標(biāo)記位比較電路和輸出電路。
本文最大支持1 024×1 024分辨率的紋理圖像,每個紋素按照RGBA8888格式存儲,即32 bit。在紋理圖像中的偏移地址按照oa形式產(chǎn)生:
圖4表示使用MATLAB將一幅紋理圖像恢復(fù)成RGBA格式并存儲在外存中,比如大小為64×64,方格代表紋素在紋理圖像中的位置,數(shù)字代表紋素在內(nèi)存中的位置,對該層級分辨率紋理圖像進行雙線性濾波時,需要讀取2×2個紋素,如圖4中圈所示。假設(shè)Address表示外存中的地址,則另外3個紋素在外存中的地址分別為:
根據(jù)紋素在紋理圖像中的映射方式,提前進行四紋素地址判斷有兩點優(yōu)勢:
(1)例如圖4中1、2、8、9四個紋素地址分別為Address(0~3),其中1號紋素地址為給定的基地址,8號紋素地址通過偏移量可直接計算,2號和9號紋素的地址只是前兩個紋素地址各自加“1”,進而在進行標(biāo)記位存儲時,只需存儲1號和8號的信息,減少了資源的浪費;
(2)根據(jù)標(biāo)記位比較電路的設(shè)計,減少了檢測時間的消耗。
3.4 標(biāo)記位比較電路和LRU替換電路
標(biāo)記位比較模塊負責(zé)判斷四個紋素在紋理Cache中是否命中。為了滿足提高數(shù)據(jù)吞吐率,使用4端口紋理Cache,把256行的紋理Cache分成4個64行的單端口Cache(0~3)。在紋理貼圖中,分辨率小于32×32的紋理圖像相對使用較少,為了提高常用紋理圖像中紋素的命中率,可以把分辨率較小的紋理圖像的紋素單獨存儲在Cache3中,把分辨率較大的紋理圖像的紋素通過Address中的7、8位對四個Cache進行選擇,從而在不命中的情況下,不會替換其余Cache中的塊。
文獻[7]指出紋理Cache大小為8 KB時,可以達到很高的命中率,因此采用8 KB的存儲容量。在地址映射關(guān)系中,直接映射速度快,但對存儲空間的利用率低;全相聯(lián)映射與直接映射相反,進而在地址映射上,選擇折中的組相聯(lián)映射方式。本文采用4路組相聯(lián),即將每個64行的Cache分為16組,其中每組分為4路,每行存儲8個紋素,大小為32 B。
如果對一個Cache某組中的4路進行tag位檢測,會花費1~4拍,影響吞吐率。將每組中的第一路組成tag_ram0,以此類推,第四路組成tag_ram3。如圖5所示,則:
(1)當(dāng)讀取分辨率較小的紋理圖像時,只在Cache3中進行tag位檢索,需要2拍完成;
(2)當(dāng)讀取分辨率較大的紋理圖像時,通過地址選擇Cache,在Address[7:8]都為0的情況下,tag檢測需2拍;
(3)在Address[7:8]不都為0的情況下,tag檢測只需1拍。
LRU替換電路主要負責(zé)在讀不命中情況下,判斷Cache組中需要被替換的路。采用最近最少使用算法(Least Recently Used,LRU)。
3.5 FIFO控制電路
為滿足USP高處理速度,紋理Cache的讀取速度不僅體現(xiàn)在命中率、多端口上,更多地時間消耗在與外存間的數(shù)據(jù)交互中。因此,如果能夠提前將未命中且待讀取的數(shù)據(jù)提前放在片內(nèi),將會顯著提高吞吐率。
紋理Cache中對標(biāo)記位檢索可以有較高的處理速度,因此如圖6所示,在紋理Cache上建立一個標(biāo)記位FIFO和一個數(shù)據(jù)buffer或FIFO,由于四紋素的地址已經(jīng)提前計算出,返回數(shù)據(jù)和請求數(shù)據(jù)發(fā)出的先后順序是一致的,所以本文可以使用Data_fifo來代替buffer,分別用于存儲未命中地址和待讀取數(shù)據(jù)的提前存儲。
在標(biāo)記位FIFO有未命中地址寫入時,F(xiàn)IFO控制器直接向外存發(fā)送讀請求地址,并寫入到Data_fifo中。因為命中率和Data_fifo深度為反相關(guān)關(guān)系,所以Data_fifo深度不大,當(dāng)其寫滿時,把到達FIFO頭部的數(shù)據(jù)開始寫入Cache_ram對應(yīng)行中,并讀出。
紋理Cache流水線暫停的條件是:tag_fifo被寫滿,發(fā)送stop信號給USP,在全部處理完后,再發(fā)送begin信號,啟動流水線。其中tag_fifo與Data_fifo深度一樣。
3.6 地址判斷電路
輸出電路負責(zé)與外存和USP間的數(shù)據(jù)交互及紋理Cache中RAM的更新。其存儲方式與3.4節(jié)中討論相同。
在讀全部命中時,直接讀取數(shù)據(jù)給USP;在有不命中時,即使有命中的紋素也暫停等待Data_fifo深度被寫滿,然后接收FIFO數(shù)據(jù)更新RAM,并讀出數(shù)據(jù)。
4 實驗結(jié)果
4.1 測試平臺的搭建
本文的測試平臺使用SV進行搭建,如圖7所示,該平臺主要包括:generator(激勵模塊)、driver(驅(qū)動模塊)、dut(RTL級代碼)、reference_model(參考模塊)、monitor(監(jiān)視模塊)、scoreboard(比較模板模塊)。
驗證平臺描述:激勵模塊主要用來模擬產(chǎn)生USP發(fā)送的讀請求地址,給出地址大小區(qū)間,并在該區(qū)間內(nèi)隨機循環(huán)產(chǎn)生地址輸出到驅(qū)動模塊;驅(qū)動模塊將輸入的地址分別輸出到dut和參考模塊,其中dut是紋理Cache的RTL級代碼部分,參考模塊通過平臺與C參考模型接口,把地址送入模型中計算,并通過接口輸出到平臺;監(jiān)視模塊監(jiān)視整個測試過程中的信號;比較模板模塊把從參考模塊輸入的數(shù)據(jù)和監(jiān)視模塊輸入的數(shù)據(jù)進行比較,相同則表示“success”,并把次數(shù)自增加“1”,不同則表示“fail”,并使次數(shù)不變。
4.2 性能分析
首先編寫幾種典型的測試機理,通過EDA工具對RTL級設(shè)計進行功能仿真,在測試激勵仿真正確后,將代碼加入測試平臺中,進行平臺測試。最終與USP IP及Xilinx定制存儲器IP互聯(lián),使用Xilinx的ZYNQ-7系列xz7z045ffg900開發(fā)板進行硬件測試。圖8所示為硬件平臺中USP IP與本文設(shè)計的紋理Cache IP的互聯(lián),并將恢復(fù)出的紋理圖像通過驅(qū)動HDMI顯示出來。圖9是測試場景渲染圖。
通過Xilinx的Vivado對設(shè)計進行綜合,綜合資源結(jié)果如表1所示。
本文從接收到讀地址到發(fā)送紋素給USP的拍數(shù)如表2所示。
在讀命中時,如果紋素存儲在同一單端口Cache中,需3拍讀出4個紋素;如果紋素兩兩存儲在不同Cache中,只需2拍讀出。在讀不命中時,當(dāng)緩沖區(qū)已經(jīng)寫入未命中數(shù)據(jù),則只需6或7拍即可,因為有Cache號的問題;當(dāng)緩沖區(qū)為空,則只能讀取外存紋素先寫滿FIFO,需35或36拍完成。
通過MATLAB將20幅紋理圖像恢復(fù)成RGBA格式存儲,用generator模塊產(chǎn)生地址測試,驗證結(jié)果為平均命中率可以達到92.5%左右。吞吐率相比單端口Cache提升了將近4倍,相比于文獻[8]中的平均像素生產(chǎn)率0.1 pixel/clock,提高了8倍左右。表3是實驗數(shù)據(jù),表4是命中率比較。
本文設(shè)計的紋理Cache應(yīng)用預(yù)存塊,減少了流水線停頓;使用4端口結(jié)構(gòu),消除了Cache同步問題,顯著提高吞吐率;結(jié)合Mipmap算法特點,提前計算出四紋素的外存地址,根據(jù)紋理圖像的層級大小,選擇Cache進行紋素的存放。本文相比于文獻[9]平均命中率有所提高;相比于文獻[10]對于最大分辨率1 024×1 024的紋理圖像命中率有所提升。
5 結(jié)論
為了滿足統(tǒng)一架構(gòu)染色器對吞吐率的要求,結(jié)合雙線性濾波算法的特點,本文設(shè)計實現(xiàn)了一種紋理Cache的電路結(jié)構(gòu),并通過測試平臺及Xilinx的FPGA開發(fā)板進行硬件測試。通過層級選擇紋素在Cache中的存儲方式,提高對相同紋理圖像不同分辨率讀取的命中率;FIFO緩沖區(qū)和4端口結(jié)構(gòu)的設(shè)計,提高了Cache的吞吐率及降低流水線停頓。根據(jù)測試結(jié)果表明,本文提出的紋理Cache性能良好。
參考文獻
[1] 焦繼業(yè),李濤,杜慧敏,等.移動圖形處理器的現(xiàn)狀、技術(shù)及其發(fā)展[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2015(6):1005-1016.
[2] CHOUDHARY V,KUMAR P,BHATTACHARYA T K,et al.Alternative geospatial data handling and augmented reality[C].IGN e.V. a BOW,2008.
[3] ANTOCHI I,JUURLINK B,VASSILIADIS S,et al.Memory bandwidth requirements of tile-based rendering[M].Computer Systems:Architectures,Modeling,and Simulation.Springer Berlin Heidelberg,2004:323-332.
[4] JAKO B.Hardware accelerated hybrid rendering on PowerVR GPUs[C].IEEE,Jubilee International Conference on Intelligent Engineering Systems.IEEE,2016:257-262.
[5] JUURLINK B,ANTOCHI I,DAN C,et al.GRAAL:a framework for low-power 3d graphics accelerators[J].IEEE Computer Graphics & Applications,2008,28(4):63-73.
[6] 許強,陳杰,劉建,等.一種適用于嵌入式圖形處理器的多端口紋理Cache的設(shè)計[J].微電子學(xué)與計算機,2013(11):27-30.
[7] LIOU J Y,CHEN C H.Re-visit blocking texture cache design for modern GPU[C].SoC Design Conference.IEEE,2015.
[8] 程龍,郭立,史鴻聲.一種紋理映射算法的FPGA實現(xiàn)[J].小型微型計算機系統(tǒng),2009,30(9):1855-1859.
[9] 許強,陳杰,劉建,等.一種適用于嵌入式圖形處理器的多端口紋理Cache的設(shè)計[J].微電子學(xué)與計算機,2013(11):27-30.
[10] MISAKI Y,INO F,HAGIHARA K.Cache-aware,in-place rotation method for texture-based volume rendering[J].IEICE Transactions on Information & Systems,2017,100(3):452-461.
作者信息:
韓孟橋1,蔣 林2,楊博文1,山 蕊1,耿玉榮3
(1.西安郵電大學(xué) 電子工程學(xué)院,陜西 西安710121;
2.西安科技大學(xué) 集成電路設(shè)計實驗室,陜西 西安710054;
3.西安郵電大學(xué) 計算機學(xué)院,陜西 西安710121)