趙士彭 張立志 章隆兵
(*計(jì)算機(jī)體系結(jié)構(gòu)國(guó)家重點(diǎn)實(shí)驗(yàn)室(中國(guó)科學(xué)院計(jì)算技術(shù)研究所) 北京100190)
(**中國(guó)科學(xué)院計(jì)算技術(shù)研究所 北京100190)
(***中國(guó)科學(xué)院大學(xué) 北京100049)
圖形處理器(graphic processing unit,GPU)[1]是計(jì)算機(jī)系統(tǒng)[2]中處理3D 實(shí)時(shí)圖形程序的專用加速芯片,目前廣泛應(yīng)用于個(gè)人電腦、工作站、嵌入式設(shè)備與智能手機(jī)中。在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,GPU 已經(jīng)不僅僅作為圖形處理器存在,而是參與了更多的通用計(jì)算,其結(jié)構(gòu)及功能也變得越來越復(fù)雜[3-5]。中央處理器(central processing unit,CPU)與圖形處理器之間的協(xié)同工作,不僅減輕中央處理器的負(fù)擔(dān),而且使計(jì)算機(jī)系統(tǒng)的整體性能也有了大幅提高[6]。GPU 一般以插卡的方式,通過主板上的圖形加速接口(accelerated graphics port,AGP)或高速串行計(jì)算機(jī)擴(kuò)展標(biāo)準(zhǔn)(peripheral component interconnect express,PCIe)插槽與CPU 進(jìn)行通信。GPU 目前已經(jīng)逐漸面向通用,通用GPU 已經(jīng)在通用計(jì)算、機(jī)器學(xué)習(xí)、人工智能等相關(guān)領(lǐng)域發(fā)揮出不可替代的價(jià)值[7-9]。
隨著半導(dǎo)體工藝的發(fā)展進(jìn)步,圖形處理器的集成度進(jìn)一步提高,計(jì)算單元的數(shù)量以及運(yùn)算速度都已呈現(xiàn)大幅提高。隨著圖形處理器統(tǒng)一的可編程著色器(shader)的出現(xiàn),計(jì)算的性能及靈活性又出現(xiàn)很大程度的提高。但伴隨著計(jì)算性能的提高,訪存的瓶頸便愈加凸顯。計(jì)算數(shù)據(jù)量的不斷增大,訪存速度的提升遠(yuǎn)不及計(jì)算性能的提升。當(dāng)前,各大GPU 廠商以及研究人員都越來越重視GPU 訪存的瓶頸,紛紛開始了大量的研究、設(shè)計(jì)和生產(chǎn)。
綜上所述,鑒于訪存子系統(tǒng)對(duì)GPU 性能的嚴(yán)重制約,訪存性能也由于技術(shù)難度無法和計(jì)算速度匹配,圖形處理器應(yīng)當(dāng)利用有限的內(nèi)存帶寬,提高訪存性能。在內(nèi)存控制器的訪存帶寬有限的情況下,有效利用訪存空閑時(shí)間進(jìn)行預(yù)取也成為了提升訪存性能的關(guān)鍵。
圖形處理器的訪存幾乎貫穿整條流水線。從頂點(diǎn)著色器(vertex shader)讀取頂點(diǎn)信息需要訪存,到片段著色器(fragment shader)讀取紋理信息需要訪存,再到最后輸出混合單元(output merger unit,OMU)需要讀寫深度信息及幀緩沖區(qū)顏色信息需要訪存。由此可見,圖形處理器訪存的數(shù)據(jù)量大且密集,訪存空閑時(shí)間較少,這也使得許多傳統(tǒng)的預(yù)取機(jī)制對(duì)于圖形處理器這種訪存密集型的系統(tǒng)結(jié)構(gòu)很難起到明顯的作用,有時(shí)會(huì)導(dǎo)致白白浪費(fèi)功耗及面積,甚至?xí)绊懶阅堋?/p>
本文提出了一種基于圖形處理器壓縮結(jié)構(gòu)的預(yù)取結(jié)構(gòu)設(shè)計(jì)。通過利用圖形處理器無損壓縮結(jié)構(gòu),將部分?jǐn)?shù)據(jù)壓縮為標(biāo)記位并存儲(chǔ)在片上緩存的meta cache 中。這種無損壓縮的設(shè)計(jì),使數(shù)據(jù)的訪存被完全壓縮掉,無需再向總線發(fā)出訪存請(qǐng)求。這時(shí),即使訪存密集型程序的情況下,訪存總線會(huì)由無損壓縮結(jié)構(gòu)產(chǎn)生訪存的空拍,出現(xiàn)訪存空閑,預(yù)取機(jī)制便可利用這一空閑進(jìn)行預(yù)取。本設(shè)計(jì)基于圖形處理器無損壓縮結(jié)構(gòu)的特點(diǎn),解決了圖形處理器傳統(tǒng)預(yù)取機(jī)制由于訪存數(shù)量大、訪存密集導(dǎo)致傳統(tǒng)預(yù)取結(jié)構(gòu)對(duì)預(yù)取效果提升不明顯的問題。同時(shí),由于圖形流水線的特點(diǎn),基于圖形處理器無損壓縮結(jié)構(gòu)的預(yù)取機(jī)制,不會(huì)產(chǎn)生無效的預(yù)取,對(duì)整體的性能不會(huì)產(chǎn)生負(fù)面影響,不影響當(dāng)前圖形流水線的效率。
本文第1 節(jié)介紹了目前常見的圖形處理器流水線及圖形處理器訪存子系統(tǒng)結(jié)構(gòu)中傳統(tǒng)的預(yù)取機(jī)制。第2 節(jié)介紹了本文提出的基于圖形處理器壓縮結(jié)構(gòu)的預(yù)取機(jī)制設(shè)計(jì)。第3 節(jié)介紹了基于本預(yù)取機(jī)制的實(shí)驗(yàn)結(jié)果及分析。第4 節(jié)對(duì)全文進(jìn)行了總結(jié)。
圖1 是3D 流水線的操作流程及存儲(chǔ)結(jié)構(gòu),包含片上存儲(chǔ)和片外存儲(chǔ)兩部分。片上存儲(chǔ)主要包括用于存儲(chǔ)頂點(diǎn)位置和屬性數(shù)據(jù)的Vertex cache,用于存儲(chǔ)紋理數(shù)據(jù)的Texture cache,用于存儲(chǔ)深度數(shù)據(jù)的Depth cache 和用于存儲(chǔ)幀緩沖區(qū)顏色的Color cache。Video memory 是圖形處理器的片外存儲(chǔ),包含這些數(shù)據(jù)對(duì)應(yīng)的buffer[10]。
圖1 3D 圖形流水線操作流程及存儲(chǔ)結(jié)構(gòu)
圖形流水線首先通過片上緩存Vetex cache 將頂點(diǎn)的位置、顏色以及光照及視窗變換信息從片外緩存Video memory 讀出。經(jīng)過頂點(diǎn)著色器處理后,圖元處理引擎(primitive engine,PE) 將頂點(diǎn)信息進(jìn)行組裝及光柵化后,變?yōu)槠蜗袼財(cái)?shù)據(jù)送入片段著色器中。由于光柵化后,頂點(diǎn)信息會(huì)轉(zhuǎn)換為像素信息,訪存請(qǐng)求會(huì)出現(xiàn)增加,尤其針對(duì)較大圖元,圖元覆蓋像素點(diǎn)很多,片段著色器的訪存請(qǐng)求也會(huì)大幅增加。片段著色器通過片上緩存Texture cache 從片外緩存Video memory 讀出像素的紋理信息。之后,這些像素信息會(huì)送入輸出混合單元進(jìn)行處理。輸出混合單元在處理時(shí)需要通過片上緩存Depth cache從片外緩存Video memory 中讀出深度數(shù)據(jù),經(jīng)過處理后重新寫回。輸出混合單元還需要通過片上緩存Color cache 從片外緩存Video memory 讀出幀緩沖區(qū)數(shù)據(jù),經(jīng)過處理后重新寫回。
綜上所述,圖形處理器的訪存請(qǐng)求僅在頂點(diǎn)著色器階段是以頂點(diǎn)信息進(jìn)行訪存,但從光柵化后訪存均以像素點(diǎn)信息進(jìn)行訪存。而圖形處理器的訪存卻恰恰集中在光柵化之后,導(dǎo)致了圖形處理器的訪存數(shù)據(jù)量大且密集的特點(diǎn)。
在集成電路高速發(fā)展的幾十年過程中,集成電路的許多方面都經(jīng)歷了指數(shù)級(jí)的增長(zhǎng),但是這些增長(zhǎng)也并非是所有方面。內(nèi)存速度方面,由于增長(zhǎng)幅度遠(yuǎn)低于邏輯等方面,導(dǎo)致內(nèi)存瓶頸越來越突出,內(nèi)存延遲和內(nèi)存帶寬成為了限制性能的關(guān)鍵因素之一。
解決訪存瓶頸的一個(gè)最直接的方法就是增加cache 這一類的片上緩存[11]。雖然cache 可以緩解緩存的帶寬問題,但是不能解決訪存延遲的問題。在當(dāng)前的圖形流水線中,每一個(gè)訪存的地址都可以根據(jù)前級(jí)流水線提前得知,且通過保證順序彼此之間數(shù)據(jù)依賴度比較低,所以預(yù)取結(jié)構(gòu)可以有效緩解訪存延遲的問題。
傳統(tǒng)的預(yù)取結(jié)構(gòu)非常簡(jiǎn)單且容易實(shí)現(xiàn)[12]。當(dāng)處理像素塊時(shí),將訪存請(qǐng)求發(fā)送到訪存模塊,同時(shí)像素塊進(jìn)入先入先出隊(duì)列(first input first output,FIFO)中排隊(duì)。待數(shù)據(jù)從訪存總線返回時(shí),將像素塊從FIFO 中取出進(jìn)行處理。像素塊在FIFO 中的等待時(shí)間就是訪存系統(tǒng)的延遲時(shí)間,如果FIFO 大小合適,則不會(huì)堵塞流水線[13-14]。
圖2 是圖形處理器傳統(tǒng)預(yù)取的結(jié)構(gòu)圖。傳統(tǒng)預(yù)取當(dāng)獲得需要處理的像素塊地址后,會(huì)進(jìn)行cache中的標(biāo)簽查找。若cache 命中,則無需發(fā)出預(yù)取的訪存請(qǐng)求。若cache未命中,則需要將訪存請(qǐng)求發(fā)送
圖2 圖形處理器傳統(tǒng)預(yù)取結(jié)構(gòu)圖
到miss 隊(duì)列的FIFO 中。這里與正常訪存的cache miss 請(qǐng)求共用同一隊(duì)列。在miss 隊(duì)列發(fā)出預(yù)取的訪存請(qǐng)求后,等待訪存請(qǐng)求返回。內(nèi)存總線對(duì)于請(qǐng)求一般是按序返回,FIFO 可以有效代替重排序緩沖區(qū)。但如果訪存請(qǐng)求是亂序返回,則需要采用重排序隊(duì)列對(duì)返回請(qǐng)求進(jìn)行重排序。返回后的數(shù)據(jù)存入對(duì)應(yīng)的片上緩存cache 中。待流水級(jí)處理到該地址時(shí),便可在片上緩存的cache 命中,節(jié)省了訪存的時(shí)間,有效利用了內(nèi)存帶寬。但由于圖形處理器在處理像素?cái)?shù)據(jù)時(shí),訪存可能是密集的,訪存帶寬利用率高,訪存空閑時(shí)間少。在訪存密集的情況下,傳統(tǒng)的預(yù)取機(jī)制無法發(fā)揮出應(yīng)有的作用,這樣不僅無法有效利用帶寬,提高訪存性能,反而會(huì)給功耗面積等帶來更進(jìn)一步的開銷。
圖形處理器的訪存請(qǐng)求主要集中在流處理器與深度測(cè)試和顏色混合模塊。流處理器通常擁有兩級(jí)cache,L1 cache 中存放解壓后的數(shù)據(jù),L2 cache 存放壓縮數(shù)據(jù)。深度測(cè)試和顏混合模塊通常只有一級(jí)cache,存放解壓后的數(shù)據(jù)。
本文基于的圖形處理器壓縮結(jié)構(gòu)是用與深度和幀緩沖區(qū)的無損壓縮,對(duì)于紋理等有損壓縮數(shù)據(jù),本結(jié)構(gòu)可以提供旁路操作,在不占用資源的情況下將無需再次壓縮的紋理數(shù)據(jù)直接送至內(nèi)存控制器中。該壓縮結(jié)構(gòu)可直接放置于訪存總線上。
圖3 是本文采用的壓縮結(jié)構(gòu)的結(jié)構(gòu)圖,圖中采用了用于存儲(chǔ)壓縮后的數(shù)據(jù)格式和fast clear 壓縮標(biāo)記的meta cache,meta cache 是一個(gè)在顯存上擁有獨(dú)立存儲(chǔ)空間的通用cache。將一個(gè)4 ×4 或8 ×8 的tile 的格式標(biāo)記和fast clear 標(biāo)記存儲(chǔ)于一個(gè)offset 上。當(dāng)數(shù)據(jù)格式標(biāo)記顯示數(shù)據(jù)被完全壓縮成0 byte 時(shí),說明fast clear 標(biāo)記是有效的。這時(shí)無需從顯存對(duì)應(yīng)的顏色或深度緩沖區(qū)讀寫數(shù)據(jù),僅需要從讀取meta data 區(qū)域讀寫數(shù)據(jù)即可。由于meta cache 的標(biāo)記位很短,而且圖形應(yīng)用的讀寫具有很好的空間局部性,所以cache 的命中率很高,可以大量節(jié)省訪存的帶寬。
圖3 圖形處理器壓縮結(jié)構(gòu)圖
當(dāng)總線上發(fā)出寫請(qǐng)求時(shí),數(shù)據(jù)會(huì)進(jìn)入壓縮模塊進(jìn)行數(shù)據(jù)的壓縮,壓縮后將數(shù)據(jù)的格式寫入meta cache。如果壓縮時(shí)判定進(jìn)行fast clear 操作,則同時(shí)將fast clear 的標(biāo)志位更新至meta cache。如果出現(xiàn)meta cache 缺失的情況,則先存于隊(duì)列中,待meta cache 更新后寫入。
當(dāng)總線上發(fā)出讀請(qǐng)求時(shí),數(shù)據(jù)會(huì)先查詢meta cache。若缺失則進(jìn)入隊(duì)列等待meta cache 更新替換。若命中,則解析數(shù)據(jù)的格式信息。如果數(shù)據(jù)解析為0 byte,則數(shù)據(jù)為fast clear 數(shù)據(jù),無需再讀取顯存,直接根據(jù)meta cache 的標(biāo)記位進(jìn)行解析即可。否則,需向顯存讀取壓縮數(shù)據(jù)。讀回后,根據(jù)數(shù)據(jù)格式以及壓縮算法信息進(jìn)行對(duì)應(yīng)的解壓操作。
這一圖形處理器壓縮結(jié)構(gòu)可在數(shù)據(jù)能夠以fast clear 進(jìn)行壓縮時(shí)僅寫標(biāo)記存于meta cache,無需進(jìn)行總線請(qǐng)求。在這一操作時(shí),即使總線訪存密集,也會(huì)出現(xiàn)空拍的空閑,給予預(yù)取機(jī)制進(jìn)行預(yù)取的機(jī)會(huì)。同時(shí),本圖形處理器壓縮結(jié)構(gòu)可直接用于總線之上,可作為總線的仲裁,所有模塊的訪存請(qǐng)求都需通過該壓縮結(jié)構(gòu),也更適用于預(yù)取結(jié)構(gòu)。壓縮模塊的訪存隊(duì)列只需增加狀態(tài)機(jī)的優(yōu)先級(jí)控制即可直接應(yīng)用于預(yù)取結(jié)構(gòu)。
針對(duì)圖形處理器在處理像素塊訪存時(shí),由于訪存密集導(dǎo)致預(yù)取結(jié)構(gòu)的效果不理想的情況,提出了一種基于圖形處理器壓縮結(jié)構(gòu)的預(yù)取機(jī)制設(shè)計(jì)。
圖4 是本預(yù)取結(jié)構(gòu)的設(shè)計(jì)。先從圖形處理器的圖元處理引擎流水級(jí)(PE)或片段著色器流水級(jí)(SP)獲取預(yù)取數(shù)據(jù)的地址信息。由于在圖形流水線中,圖元處理模塊處于片段著色器之前,而片段著色器又處于輸出混合單元之前。圖元處理流水級(jí)將圖元進(jìn)行光柵化處理,處理后將像素塊的位置屬性等信息送給片段著色器。所以,光柵化時(shí)圖元處理流水級(jí)明確知道后續(xù)流水級(jí)需要處理的像素點(diǎn)位置信息,根據(jù)位置信息可以計(jì)算出后續(xù)流水級(jí)需要訪存的地址信息。
圖4 基于壓縮結(jié)構(gòu)的預(yù)取結(jié)構(gòu)圖
獲取到預(yù)取數(shù)據(jù)的地址信息后,將預(yù)取請(qǐng)求進(jìn)行片上緩存的cache 查找。如果片上緩存cache 中已經(jīng)存在該預(yù)取地址的數(shù)據(jù)信息,則無需再進(jìn)行預(yù)取操作,數(shù)據(jù)已經(jīng)存在于片上緩存的cache 中。如果片上緩存cache 缺失,則說明片上緩存cache 中沒有該預(yù)取地址的數(shù)據(jù),這時(shí)就需要對(duì)該地址進(jìn)行預(yù)取操作。
將片上緩存cache 缺失的預(yù)取請(qǐng)求送至位于總線的壓縮模塊訪存隊(duì)列中。壓縮模塊的訪存隊(duì)列是一個(gè)由狀態(tài)機(jī)控制的隊(duì)列。隊(duì)列會(huì)對(duì)訪存請(qǐng)求進(jìn)行合并,當(dāng)流水線訪存請(qǐng)求發(fā)送到隊(duì)列中時(shí),若隊(duì)列已經(jīng)存在預(yù)取信息,則進(jìn)行合并并優(yōu)先發(fā)送請(qǐng)求,以保證不堵塞流水線。若隊(duì)列中的預(yù)取信息已經(jīng)發(fā)出,則在隊(duì)列中等待預(yù)取請(qǐng)求返回即可。
由于圖形處理器在光柵化之后的訪存可能是密集型的,而預(yù)取機(jī)制則需要利用訪存空閑時(shí)間進(jìn)行訪存,不能影響正常的訪存請(qǐng)求。基于圖形處理器的壓縮結(jié)構(gòu),可將數(shù)據(jù)進(jìn)行壓縮得到訪存的空閑。壓縮結(jié)構(gòu)當(dāng)數(shù)據(jù)可以被壓縮進(jìn)meta cache 時(shí),在讀請(qǐng)求時(shí)是無需發(fā)出訪存請(qǐng)求的,只需直接從meta cache 中讀取出對(duì)應(yīng)的標(biāo)記位。這時(shí),訪存總線出現(xiàn)請(qǐng)求的空閑。預(yù)取機(jī)制可以利用這一壓縮結(jié)構(gòu)制造出的訪存空閑時(shí)間進(jìn)行預(yù)取。壓縮結(jié)構(gòu)即使在訪存密集型程序下,也有可能將數(shù)據(jù)壓縮進(jìn)meta cache中,所以預(yù)取機(jī)制依然會(huì)起到一定的作用。
基于圖形流水線的特點(diǎn),預(yù)取地址是明確且必定需要訪存的。所以在壓縮結(jié)構(gòu)的訪存隊(duì)列進(jìn)行合并可以有效提高訪存性能。在圖形流水線執(zhí)行至正式訪存時(shí),如果地址對(duì)應(yīng)的預(yù)取訪存已經(jīng)返回至片上cache 中,則在cache 中命中,并直接返回圖形處理流水線進(jìn)行數(shù)據(jù)處理。如果預(yù)取訪存還未返回至片上cache,則按照正常的訪存流水線進(jìn)入壓縮結(jié)構(gòu)的訪存隊(duì)列中。這時(shí),如果訪存隊(duì)列中地址對(duì)應(yīng)的預(yù)取信息已經(jīng)發(fā)出訪存請(qǐng)求,但數(shù)據(jù)還未返回,則進(jìn)行合并,等待訪存請(qǐng)求的返回。這樣,預(yù)取機(jī)制可有效減少訪存延遲。如果訪存隊(duì)列中對(duì)應(yīng)的預(yù)取信息還未發(fā)出訪存請(qǐng)求,則進(jìn)行合并后將隊(duì)列狀態(tài)機(jī)由原預(yù)取狀態(tài)更改為訪存狀態(tài),優(yōu)先級(jí)進(jìn)行了提升,立刻發(fā)出訪存請(qǐng)求。這樣的處理,也使得預(yù)取機(jī)制沒有起到作用時(shí)也并未浪費(fèi)性能。
為了評(píng)估本預(yù)取結(jié)構(gòu)的性能及效果,本文采用Godson GPU(GSGPU)高性能圖形處理器[15],GSGPU 圖形處理器實(shí)現(xiàn)了本設(shè)計(jì)提及的壓縮結(jié)構(gòu)。結(jié)合了GSGPU 高性能圖形處理器基于mesa 架構(gòu)的驅(qū)動(dòng)設(shè)計(jì)[16],采用了Linux 基準(zhǔn)圖形測(cè)試集GL_MARK[17]。對(duì)照組選擇了采用傳統(tǒng)預(yù)取機(jī)制的GSGPU 高性能圖形處理器,根據(jù)GSGPU 圖形處理器片上緩存cache 的命中率對(duì)預(yù)取結(jié)構(gòu)的效果進(jìn)行評(píng)估。
本文實(shí)驗(yàn)測(cè)試采用的基準(zhǔn)測(cè)試集是GL_MARK。GL_mark 是由Linaro 發(fā)行的一款圖形基準(zhǔn)測(cè)試集,使用Open GL-ES 進(jìn)行開發(fā),提供了一系列豐富的圖形測(cè)試。涉及圖形單元性能的各個(gè)方面,涵蓋光照、陰影、超多圖元、簡(jiǎn)單2D 等多種類型的測(cè)試,是目前Linux 操作系統(tǒng)上較為全面的測(cè)試集之一。
本文使用的GSGPU 高性能圖形處理器平臺(tái)主要由命令處理器(command processor,CP)、全局任務(wù)調(diào)度器(global task scheduler,GTS)、圖形處理集群(graphics processing cluster,GPC)、二級(jí)靜態(tài)緩存(L2 Scache)和內(nèi)存控制器(memory controller,MC)等5 部分組成。其中圖形處理集群又由計(jì)算處理引擎(compute engine,CE)、幾何處理引擎(geometry engine,GE)、圖元處理引擎(PE)、局部任務(wù)調(diào)度器(local task scheduler,LTS)、流處理器集群(stream processor cluster,SPC)和輸出合并單元(OMU)等6部分組成。整體結(jié)構(gòu)如圖5 所示。
圖5 GSGPU 圖形處理器頂層結(jié)構(gòu)
搭載本設(shè)計(jì)的GSGPU 高性能圖形處理器光柵化后的訪存基本單位是4 ×4 的像素塊,所以在設(shè)計(jì)cache 行時(shí)選擇了4 ×4 的像素塊作為cache 行寬度。經(jīng)過性能與面積功耗權(quán)衡后,選取四路組相連cache,容量大小選擇32 kB。
本設(shè)計(jì)跑通GL_MARK 中的所有基準(zhǔn)測(cè)試用例,測(cè)試用例中包含了陰影測(cè)試、折射測(cè)試、反射測(cè)試、2D 少圖元測(cè)試,超多圖元測(cè)試、復(fù)雜shader 測(cè)試等多種測(cè)試環(huán)境。測(cè)試結(jié)果如表1 所示。
傳統(tǒng)預(yù)取在訪存密集情況下,預(yù)取性能會(huì)出現(xiàn)急劇下降,預(yù)取效果不明顯。采用本設(shè)計(jì)的預(yù)取結(jié)構(gòu),結(jié)合壓縮結(jié)構(gòu)特性,即使在訪存密集的情況下,依然可以利用壓縮產(chǎn)生訪存空閑,使預(yù)取結(jié)構(gòu)產(chǎn)生良好的效果。表1 是本設(shè)計(jì)與傳統(tǒng)預(yù)取結(jié)構(gòu)的cache 命中率提升比較。從表1 中可以看出,在GL_MARK 基準(zhǔn)測(cè)試集的測(cè)試環(huán)境下,本設(shè)計(jì)的cache命中率對(duì)比傳統(tǒng)預(yù)取結(jié)構(gòu)均有所提升,說明本設(shè)計(jì)的預(yù)取結(jié)構(gòu)在GL_MARK 測(cè)試集下均有不錯(cuò)的表現(xiàn),可以起到預(yù)取的效果,且本設(shè)計(jì)的預(yù)取結(jié)構(gòu)不會(huì)對(duì)傳統(tǒng)預(yù)取結(jié)構(gòu)產(chǎn)生不利影響。
表1 GL_MARK 測(cè)試集下本設(shè)計(jì)與傳統(tǒng)預(yù)取結(jié)構(gòu)的cache 命中率提升
在訪存總線有空閑的情況下,傳統(tǒng)預(yù)取結(jié)構(gòu)也可以取得良好的性能提高,從而提高cache 的命中率,也具有良好的效果。但傳統(tǒng)預(yù)取結(jié)構(gòu)在訪存密集型程序下,訪存總線始終被占用,沒有訪存的空拍情況下,傳統(tǒng)預(yù)取結(jié)構(gòu)的效果明顯不足。這時(shí),本設(shè)計(jì)的基于壓縮結(jié)構(gòu)的預(yù)取機(jī)制可以利用壓縮結(jié)構(gòu)的特點(diǎn)制造出訪存的空拍,使預(yù)取結(jié)構(gòu)可以利用該空拍進(jìn)行預(yù)取,得到了cache 命中率的明顯提升,達(dá)到很好的預(yù)取效果。
但有些訪存密集型程序,例如Horse_shadow,由于壓縮結(jié)構(gòu)無法取得很好的無損壓縮效果,所以無法制造出更多訪存的空拍,產(chǎn)生更多的訪存空閑,所以導(dǎo)致本設(shè)計(jì)的預(yù)取效率的提升不明顯??舍槍?duì)特定的測(cè)試用例,增加無損壓縮結(jié)構(gòu)的壓縮標(biāo)記,提高壓縮概率,更進(jìn)一步增加訪存空拍,使本設(shè)計(jì)的預(yù)取結(jié)構(gòu)有所提高。
從表1 中可以看出,本設(shè)計(jì)在訪存密集型程序下,cache 命中率大部分均可提升達(dá)到15% 以上。個(gè)別測(cè)試用例在本設(shè)計(jì)中提升不高,是受限于顏色及深度的場(chǎng)景對(duì)于無損壓縮不敏感。由于圖形處理器的預(yù)取地址是明確的,后續(xù)流水線對(duì)于預(yù)取地址必然需要訪存操作,所以不存在預(yù)取無效數(shù)據(jù)浪費(fèi)訪存的性能及功耗的情況,不會(huì)對(duì)本身圖形流水線產(chǎn)生負(fù)面影響。本設(shè)計(jì)在壓縮結(jié)構(gòu)的訪存隊(duì)列中采用了合并操作,所以本設(shè)計(jì)即使在訪存沒有空閑無法預(yù)取的情況下,也不會(huì)多占用訪存總線的帶寬。
圖6 是在GL_MARK 測(cè)試集下訪存數(shù)量與cache 命中率的提升比較。從圖6 中可以看出,本設(shè)計(jì)隨著訪存數(shù)量的增加,對(duì)比傳統(tǒng)預(yù)取結(jié)構(gòu)的提升基本成正比。訪存數(shù)量越多,訪存越密集,本設(shè)計(jì)的預(yù)取結(jié)構(gòu)對(duì)比傳統(tǒng)預(yù)取結(jié)構(gòu)優(yōu)勢(shì)越明顯。
圖6 GL_MARK 測(cè)試集下訪存請(qǐng)求數(shù)量與cache 命中率提升比較
本文分析了圖形處理器傳統(tǒng)預(yù)取結(jié)構(gòu)在圖形流水線中的特性,結(jié)合圖形應(yīng)用程序的特性,提出了一種基于圖形處理器壓縮結(jié)構(gòu)的預(yù)取結(jié)構(gòu)設(shè)計(jì)。針對(duì)訪存密集型程序訪存空閑時(shí)間少、導(dǎo)致傳統(tǒng)預(yù)取結(jié)構(gòu)預(yù)取效果不明顯的情況,本設(shè)計(jì)利用圖形處理器壓縮結(jié)構(gòu)的特點(diǎn),重新設(shè)計(jì)了基于壓縮結(jié)構(gòu)的預(yù)取結(jié)構(gòu)。本設(shè)計(jì)與傳統(tǒng)的預(yù)取結(jié)構(gòu)相比,在訪存密集型程序下,不僅可以有效提高訪存的利用率,同時(shí)也使圖形流水線的處理時(shí)間得到有效的縮短。即使在預(yù)取失效的情況下,對(duì)圖形流水線也不會(huì)產(chǎn)生負(fù)面影響。圖形處理器先進(jìn)的關(guān)鍵技術(shù)長(zhǎng)期掌握在國(guó)外廠商手中,國(guó)產(chǎn)自主可控處理器的研發(fā)變得越來越重要,本設(shè)計(jì)不僅為設(shè)計(jì)先進(jìn)國(guó)產(chǎn)圖形處理器訪存子系統(tǒng)結(jié)構(gòu)提供了方向,同時(shí)也為提高圖形處理器訪存子系統(tǒng)性能提供了方法與借鑒。