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