Cache結(jié)構(gòu)的低功耗可重構(gòu)技術(shù)分析
在分析Cache性能的基礎(chǔ)上介紹了當(dāng)前低功耗Cache的設(shè)計(jì)方法,提出了一種可重構(gòu)Cache模型和動(dòng)態(tài)可重構(gòu)算法。Cache模型能夠在程序運(yùn)行過程中改變相聯(lián)度和大小,動(dòng)態(tài)可重構(gòu)算法能夠在運(yùn)行時(shí)針對不同的應(yīng)用程序?qū)芍貥?gòu)Cache進(jìn)行配置。通過對Cache的動(dòng)態(tài)配置,不僅可以提高Cache命中率,還能夠有效降低處理器的功耗。
關(guān)鍵詞 Cache 低功耗 可重 構(gòu)體系結(jié)構(gòu)
引言
隨著集成電路的工作速度和芯片集成度不斷提高,芯片的功耗問題變得越來越突出,高性能低功耗設(shè)計(jì)已經(jīng)成為當(dāng)前集成電路領(lǐng)域的一個(gè)重要課題。在以微處理器為核心部件的VLSI系統(tǒng)中,Cache是系統(tǒng)取得高數(shù)據(jù)傳輸率的關(guān)鍵部件。在現(xiàn)代CPU中,Cache的功耗約占處理器總功耗的30%~60%[1],有效降低這部分的功耗,對芯片的低功耗設(shè)計(jì)有著重大的意義。
1 Cache低功耗相關(guān)研究
Cache平均訪問功耗是Cache性能表現(xiàn)的一個(gè)重要因素。Cache平均訪問功耗由Cache命中時(shí)的訪問功耗、失效時(shí)的訪問功耗和失效率三者決定。失效時(shí)的訪問功耗又包括兩部分:一部分是Cache失效時(shí)Cache電路的功耗,另一部分則是下一級(jí)存儲(chǔ)系統(tǒng)的訪問功耗。因此降低Cache功耗可以從三個(gè)方面考慮:一是降低Cache的失效率,二是降低Cache訪問能量,三是降低主存訪問能量。
為了達(dá)到低功耗的目的,對Cache結(jié)構(gòu)做了一些改進(jìn):Phaselookup Cache[2]結(jié)構(gòu),應(yīng)用兩級(jí)查詢的機(jī)制,即先訪問tag array,只有命中的那一路data 才會(huì)在第二相去訪問,這樣就降低了組相聯(lián)Cache 中數(shù)據(jù)array 部分的功耗,但增加了Cache 訪問的時(shí)間;Way predictive 組相聯(lián)Cache結(jié)構(gòu),在默認(rèn)情況下只訪問一個(gè)tag array 和一個(gè)data array,只有在默認(rèn)訪問失效時(shí)才會(huì)去訪問其他的tag 和data array,這種方法也以增加Cache 訪問時(shí)間的代價(jià)來換取低功耗;偽組相聯(lián)Cache 結(jié)構(gòu),是具有多個(gè)命中時(shí)間的Cache結(jié)構(gòu),Cache 中的每一路可以被順序讀取,從而可以比傳統(tǒng)的同時(shí)讀取結(jié)構(gòu)節(jié)省一部分功耗;另外還有基于壓縮方法方面的研究[3],針對高頻值的局部性,在讀寫Cache的過程中,對高頻出現(xiàn)的數(shù)據(jù)值進(jìn)行壓縮存儲(chǔ),用較少存儲(chǔ)空間保存編碼后的數(shù)據(jù),在一定程度上減少了Cache的訪問功耗。
低功耗可重構(gòu)的Cache研究在最近幾年得到關(guān)注,通過改變Cache的結(jié)構(gòu)參數(shù),不管是用硬件實(shí)現(xiàn)還是用軟件實(shí)現(xiàn),針對不同的程序來配置優(yōu)化的Cache結(jié)構(gòu),盡可能地關(guān)閉不使用的Cache,兼顧了系統(tǒng)的性能和功耗。Cache的結(jié)構(gòu)參數(shù)很多,主要的參數(shù)有容量大小、相聯(lián)度、塊大小、替換算法、寫回策略等。一般而言,系統(tǒng)中的Cache替換算法和寫策略是固定的,如果改變也可以在軟件層面上實(shí)現(xiàn)。所以主要關(guān)注Cache的硬件結(jié)構(gòu)是否可重構(gòu),僅研究其中幾個(gè)參數(shù)(如Cache容量、塊大小和相聯(lián)度)對訪問功耗的影響。在設(shè)計(jì)芯片之前可以使用CAD工具來確定對命中時(shí)間和功耗的影響。CACTI程序是一個(gè)可以評估CMOS微處理器各種Cache結(jié)構(gòu)訪問時(shí)間和功耗的CAD工具。對于一個(gè)給定的最小特征值,可以改變Cache容量、相聯(lián)度和讀/寫端口的數(shù)目,以估計(jì)各種情況的Cache命中時(shí)間和功耗[3]??芍貥?gòu)Cache結(jié)構(gòu)需要綜合考慮Cache的命中率、平均訪問時(shí)間和訪問能量等性能,合理選擇Cache的配置參數(shù)。
2 可重構(gòu)Cache的體系結(jié)構(gòu)
要實(shí)現(xiàn)可重構(gòu)Cache,首先 Cache的結(jié)構(gòu)要支持運(yùn)行過程中的動(dòng)態(tài)劃分,其次要有檢測Cache命中率的硬件或者軟件機(jī)制,并且有相應(yīng)的動(dòng)態(tài)配置算法。
2.1 可重構(gòu)Cache系統(tǒng)設(shè)計(jì)
文獻(xiàn)[4]提出了一種可重構(gòu)的數(shù)據(jù)Cache結(jié)構(gòu)。該Cache的數(shù)據(jù)區(qū)被平均分為4個(gè)子分區(qū)(subarray),每個(gè)子分區(qū)又分為4組。在Cache訪問時(shí),只有一個(gè)子分區(qū)打開,其他子分區(qū)的線路不被激活,從而節(jié)省了功耗。圖1給出了整個(gè)Cache體系結(jié)構(gòu)及功能模塊。
圖1 可重構(gòu)Cache體系結(jié)構(gòu)模型
與傳統(tǒng)Cache結(jié)構(gòu)相比,圖1中增加了Cache配置動(dòng)態(tài)選擇器(Cache Configuration Dynamic Selector, CCDS),CCDS用來更新內(nèi)部狀態(tài)機(jī),并決定合適的Cache配置。通過配置CCDS,可以使整個(gè)子陣列無效,或者使有效子陣列中的某些路無效。對于無效的子陣列或者路,局部自選線(Local Word Line)、預(yù)充電(Precharge)和讀出放大器(Sense Amplifier)都無激勵(lì)。通過這些改進(jìn)使得傳統(tǒng)的固定劃分的Cache具備了動(dòng)態(tài)配置能力。
改進(jìn)后的Cache外在表現(xiàn)為一個(gè)虛擬的兩級(jí)Cache:L1/L2。這種分級(jí)方式同傳統(tǒng)的L1/L2兩級(jí)Cache結(jié)構(gòu)不同,L1 Cache由激活的不同子分區(qū)以及子分區(qū)內(nèi)不同的路數(shù)構(gòu)成,未激活的部分為L2,在L1未命中時(shí)激活以進(jìn)行訪問,L1和L2在物理實(shí)現(xiàn)上表現(xiàn)為同一級(jí)。Cache的地址劃分仍為三部分:標(biāo)志位、索引位和塊內(nèi)地址。
圖2 Cache地址劃分
圖2給出了Cache的地址劃分情況,可分為塊地址(Block Address)和塊內(nèi)偏移(Block offset)。塊地址可以進(jìn)一步分為標(biāo)志字段(Tag)和索引字段(Index)。其中Tag的后兩位SS用來做子分區(qū)的選擇位。訪問Cache時(shí),首先訪問L1,當(dāng)L1命中時(shí)就直接返回,只有在L1訪問失效時(shí)才會(huì)將所有數(shù)據(jù)區(qū)打開。對不同的應(yīng)用程序,L1和L2大小的劃分不同,其訪問時(shí)間和運(yùn)行功耗也會(huì)有較大差異。
2.2 動(dòng)態(tài)重構(gòu)算法
在程序運(yùn)行過程中,通過軟件監(jiān)測自動(dòng)選擇優(yōu)化的Cache結(jié)構(gòu)。一般采用啟發(fā)式算法,即根據(jù)程序過去執(zhí)行的狀況預(yù)測未來的運(yùn)行情況,并為其配置相應(yīng)的優(yōu)化結(jié)構(gòu)。重構(gòu)流程是:在程序運(yùn)行的時(shí)候,CPU按固定的時(shí)間間隔檢查一系列的硬件計(jì)數(shù)器;這些計(jì)數(shù)器記錄上一時(shí)間段內(nèi)的Cache缺失率和分支跳轉(zhuǎn)的發(fā)生頻率,如果改變的程度超過設(shè)定閾值則進(jìn)入重構(gòu)過程,否則程序繼續(xù)運(yùn)行。
圖3是可重構(gòu)算法的狀態(tài)圖。RESET為程序開始運(yùn)行時(shí)的初始狀態(tài);UNSTABLE為非穩(wěn)定狀態(tài),該狀態(tài)下進(jìn)行結(jié)構(gòu)的搜索與重構(gòu);STABLE為選擇好優(yōu)化的Cache結(jié)構(gòu)進(jìn)入穩(wěn)定運(yùn)行的狀態(tài);TRANS1,TRANS2為狀態(tài)相互切換時(shí)的中間狀態(tài)。圖4是在UNSTABLE狀態(tài)下的搜索流程。首先根據(jù)統(tǒng)計(jì)將各種配置的Cache結(jié)構(gòu)按照失效率進(jìn)行排序。進(jìn)入重構(gòu)搜索狀態(tài)后,如果引起重構(gòu)的原因是失效率的上升,則沿著排序表開始,朝失效率降低的方向依次搜索新的Cache結(jié)構(gòu)。如果引起重構(gòu)的原因是程序分支頻率的改變,則需要搜索所有的Cache結(jié)構(gòu)。
圖3 可重構(gòu)算法的狀態(tài)轉(zhuǎn)換圖
圖4 搜索算法
2.3 可重構(gòu)Cache中問題
(1) 數(shù)據(jù)重名問題
Cache中的數(shù)據(jù)重名問題是指主存中同一地址的數(shù)據(jù)同時(shí)出現(xiàn)在Cache中兩個(gè)不同的位置。實(shí)地址Cache中本來不存在數(shù)字重名問題,但引入可重構(gòu)概念的同時(shí),也帶來了數(shù)據(jù)重名問題。解決這一問題的簡單辦法是在Cache重構(gòu)的時(shí)候讓Cache中的內(nèi)容全部無效,需要寫回的內(nèi)容都進(jìn)行寫回。但這樣會(huì)導(dǎo)致Cache性能下降,特別是在Cache重構(gòu)比較頻繁的時(shí)候。但是如果動(dòng)態(tài)重構(gòu)的指令片段較大,則影響比較小。
(2) 映射錯(cuò)誤問題
Cache在重構(gòu)時(shí),其組數(shù)量會(huì)變化,從而導(dǎo)致需要比較的Tag位的數(shù)量也發(fā)生變化,這會(huì)導(dǎo)致映射錯(cuò)誤的出現(xiàn)。為了保證處于任何一種狀態(tài)的時(shí)候都有足夠的Tag來做比較,按照Tag位最長的一種配置來保存Cache地址結(jié)構(gòu),也就是組數(shù)量最少的情況。這樣做雖然會(huì)增加一些無用的比較,但卻能避免刷新Cache帶來的性能損失。
結(jié)論
本文在傳統(tǒng)Cache結(jié)構(gòu)的基礎(chǔ)上分析了一種可重構(gòu)Cache的體系結(jié)構(gòu)及其動(dòng)態(tài)重構(gòu)的配置算法,指出了可重構(gòu)Cache可能會(huì)遇到的問題。通過對傳統(tǒng)Cache結(jié)構(gòu)的改進(jìn),在嵌入式處理器上實(shí)現(xiàn)Cache可重構(gòu)技術(shù),這對嵌入式處理器的存儲(chǔ)器體系結(jié)構(gòu)功耗優(yōu)化有著重要意義。可重構(gòu)Cache的設(shè)計(jì)方法具有非常好的低功耗潛力,也是目前計(jì)算機(jī)體系結(jié)構(gòu)方面的研究熱點(diǎn)之一。
評論