何青松,鄧超,邱志
(中國(guó)船舶重工集團(tuán)公司 第七二二研究所,武漢 430205)
一種嵌入式系統(tǒng)的滑動(dòng)Cache機(jī)制設(shè)計(jì)
何青松,鄧超,邱志
(中國(guó)船舶重工集團(tuán)公司 第七二二研究所,武漢 430205)
為了提高嵌入式系統(tǒng)中Cache的使用效率,針對(duì)不同類型的應(yīng)用程序?qū)χ噶詈蛿?shù)據(jù)Cache的容量實(shí)時(shí)需求不同,提出一種滑動(dòng)Cache組織方案。均衡考慮指令和數(shù)據(jù)Cache需求,動(dòng)態(tài)地調(diào)整一級(jí)Cache的容量和配置。采用滑動(dòng)Cache結(jié)構(gòu),不但降低了一級(jí)Cache的動(dòng)態(tài)和靜態(tài)泄漏功耗,而且還降低了整個(gè)處理器的動(dòng)態(tài)功耗。模擬仿真結(jié)果表明,該方案在有效降低Cache功耗的同時(shí)能夠提高Cache的綜合性能。
滑動(dòng)Cache;可重構(gòu);低功耗
對(duì)于便攜式嵌入式設(shè)備,降低其整體功耗具有越來(lái)越重要的實(shí)際意義。而在設(shè)計(jì)的嵌入式設(shè)備中,Cache的功耗占整體功耗的40%左右[1-2],因此,研究如何降低Cache功耗的各種技術(shù)成為嵌入式設(shè)備設(shè)計(jì)者關(guān)注的重點(diǎn)。針對(duì)嵌入式系統(tǒng)運(yùn)行的特征,很多應(yīng)用系統(tǒng)都曾經(jīng)提出過(guò)多種可重構(gòu)Cache結(jié)構(gòu)[2-5],例如通過(guò)調(diào)節(jié)Cache的容量[3]、相聯(lián)度[2]、塊大小[4]、替換策略、緩存塊數(shù)[5]等技術(shù)方式,適應(yīng)不同的嵌入式程序?qū)ache資源的需求,達(dá)到提高性能和降低功耗的目的。
由于不同嵌入式程序?qū)χ噶頒ache和數(shù)據(jù)Cache的需求是不平衡的,從而導(dǎo)致某種Cache的容量不足而另一種Cache卻空閑。嵌入式系統(tǒng)通常采用制定容量的指令Cache和數(shù)據(jù)Cache,本文引入動(dòng)態(tài)重構(gòu)的概念,實(shí)現(xiàn)了一種可重新劃分指令Cache和數(shù)據(jù)Cache大小的高速緩存模塊,可動(dòng)態(tài)配置指令Cache和數(shù)據(jù)Cache的大小。對(duì)于較小的應(yīng)用程序,如果指令Cache和數(shù)據(jù)Cache過(guò)大,雖然命中率很高,但是也造成了功耗的增加;而對(duì)于較大的應(yīng)用程序,如果指令Cache和數(shù)據(jù)Cache過(guò)小,則會(huì)造成命中率的明顯降低,在很大程度上影響處理器的性能。動(dòng)態(tài)可重構(gòu)Cache可以在程序運(yùn)行的過(guò)程中隨著Cache命中率的變化隨時(shí)重構(gòu),既保證較高的命中率,又保證較低的功耗。
本文引入了一種新的Cache組織結(jié)構(gòu)(稱做滑動(dòng)Cache),是對(duì)動(dòng)態(tài)可重構(gòu)Cache的一種擴(kuò)展方式,應(yīng)用于嵌入式處理器中Icache和Dcache分離的片上一級(jí)Cache,主要包含指令Cache塊(Icache)、數(shù)據(jù)Cache塊(Dcache)和滑動(dòng)Cache塊(Scache)3個(gè)部分,使Scache能夠在Icache和Dcache之間滑動(dòng)?;瑒?dòng)Cache結(jié)構(gòu)的特別之處在于它可以綜合考慮程序?qū)cache和Dcache的實(shí)時(shí)需要,進(jìn)而通過(guò)仲裁機(jī)制動(dòng)態(tài)決定Scache是用來(lái)擴(kuò)充Icache的容量,還是用來(lái)擴(kuò)充Dcache的容量,或者是休眠。這種方法不但降低了Cache的動(dòng)態(tài)功耗和靜態(tài)泄漏功耗,而且處理器的性能也有所提高,它不需要任何軟件編譯的支持,也不需要改動(dòng)除Cache之外的其他硬件。
1.1 滑動(dòng)Cache基本思想
處理器及其Cache系統(tǒng)的設(shè)計(jì)在運(yùn)行各種不同的應(yīng)用程序時(shí),其性能表現(xiàn)還是有很大差異的,某些程序需要的指令比較少但是卻要處理大量的數(shù)據(jù),比如壓縮解壓縮算法。相反,還有一些程序需要執(zhí)行的指令非常多,但數(shù)據(jù)量較少,例如一些編譯程序。因此在運(yùn)行各種程序時(shí)都使用同一容量和結(jié)構(gòu)的Cache,會(huì)造成某種Cache缺失率非常高,但同時(shí)另外一種Cache卻有部分閑置。如果設(shè)計(jì)一種Cache結(jié)構(gòu)能隨著不同程序的需求,將一種Cache的閑置部分提供給另外一個(gè)需要增大容量的Cache使用,而不是簡(jiǎn)單地關(guān)閉這些部分,那么處理器性能將會(huì)大大提高。滑動(dòng)Cache組織結(jié)構(gòu)圖如圖1 所示。
圖1 滑動(dòng)Cache組織結(jié)構(gòu)圖
Scache有3種狀態(tài):當(dāng)Icache缺失率較高時(shí)Scache作為Icache使用;當(dāng)Dcache缺失率較高時(shí)Scache作為Dcache使用;如果Icache和Dcache缺失率都不高,Scache就休眠。當(dāng)Scache與原有的Icache和Dcache結(jié)合使用時(shí),只擴(kuò)大組數(shù),不改變相聯(lián)度。Scache的容量要小于等于Icache和Dcache中容量較大的一個(gè),即Cslide≤max(Cinst,Cdata)。例如Icache容量為32 KB,Dcache容量為64 KB,則Scache容量可選范圍小于等于64 KB。假設(shè)Scache選定為64 KB,當(dāng)Scache被指定用做Icache時(shí), Scache中只有32 KB與原Icache結(jié)合使用,其余超出原Icache容量的32 KB處于休眠狀態(tài)。由于不同容量的Cache需要的Tag長(zhǎng)度不同,Scache的容量可能會(huì)在Icache和Dcache兩個(gè)不同容量之間變動(dòng),導(dǎo)致滑動(dòng)Cache的Tag長(zhǎng)度也不固定。為了保證Scache既可充當(dāng)Icache使用,又可充當(dāng)Dcache使用,Scache的Tag長(zhǎng)度應(yīng)該等于指令和數(shù)據(jù)Tag中較長(zhǎng)的,即Lslide tag=max(Linst tag,Ldata tag)。
1.2 滑動(dòng)Cache仲裁機(jī)制
滑動(dòng)Cache仲裁機(jī)制是核心部分,通過(guò)它來(lái)判斷Cache容量何時(shí)需要滑動(dòng)、何時(shí)休眠,以及按照什么原則進(jìn)行滑動(dòng)。利用缺失率作為監(jiān)視Cache性能的基本尺度,通過(guò)設(shè)計(jì)和使用一套參數(shù)來(lái)監(jiān)視、反映和調(diào)整系統(tǒng)的動(dòng)態(tài)行為和需求。這套參數(shù)如下所示:
① 敏感間隔計(jì)數(shù)器(Sense Intervals Num,SIN):為了監(jiān)視Cache性能,就必須把一個(gè)應(yīng)用程序的整個(gè)運(yùn)行周期分成一些固定的長(zhǎng)度,稱為敏感間隔(例如100萬(wàn)條指令為一個(gè)間隔[6])。運(yùn)算邏輯單元每執(zhí)行一條指令,敏感間隔計(jì)數(shù)器就會(huì)自動(dòng)加1。并且強(qiáng)制規(guī)定,只有一個(gè)敏感間隔結(jié)束以后,才可以啟動(dòng)仲裁機(jī)制調(diào)整一級(jí)Cache的容量。
② Icache缺失計(jì)數(shù)器(Icache Miss Num,IMN):用來(lái)統(tǒng)計(jì)一個(gè)敏感間隔內(nèi)Icache的缺失次數(shù),每當(dāng)Icache發(fā)生缺失時(shí)計(jì)數(shù)器自動(dòng)加1,并且在每個(gè)敏感間隔開(kāi)始時(shí)仲裁機(jī)制將其清0。
③ Dcache缺失計(jì)數(shù)器(Dcache Miss Num,DMN):用來(lái)統(tǒng)計(jì)一個(gè)敏感間隔內(nèi)Dcache的缺失次數(shù),每當(dāng)Dcache發(fā)生缺失時(shí)計(jì)數(shù)器自動(dòng)加1,并且每個(gè)敏感間隔開(kāi)始時(shí)仲裁機(jī)制將其清0。
④ Icache缺失邊界寄存器(Icache Miss Bound,IMB):用來(lái)存儲(chǔ)預(yù)先設(shè)定的Icache缺失邊界。
⑤ Dcache缺失邊界寄存器(Dcache Miss Bound,DMB):用來(lái)存儲(chǔ)預(yù)先設(shè)定的Dcache缺失邊界。
⑥ Scache狀態(tài)標(biāo)志寄存器(Slide State,SS):用來(lái)存儲(chǔ)當(dāng)前Scache的狀態(tài),當(dāng)敏感間隔結(jié)束時(shí),仲裁機(jī)制會(huì)根據(jù)IMB、DMB、IMN和DMN的值判斷發(fā)生哪種情況,進(jìn)而將Scache設(shè)置成相應(yīng)的狀態(tài)。Scache的狀態(tài)有以下5種:
狀態(tài)1:如果IMN>IMB且DMN 狀態(tài)2:如果IMN 狀態(tài)3:如果IMN>IMB且DMN>DMB,并且Icache超過(guò)邊界的比例大于Dcache,則SS被標(biāo)志成1,下一個(gè)敏感間隔把Scache作為Icache使用。 狀態(tài)4:如果IMN>IMB且DMN>DMB,并且Dcache超過(guò)邊界的比例大于Icache,則SS被標(biāo)志成2,下一個(gè)敏感間隔把Scache作為Dcache使用。 狀態(tài)5:如果IMN 1.3 滑動(dòng)Cache工作過(guò)程 滑動(dòng)Cache的工作流程如圖2所示。 圖2 滑動(dòng)Cache的工作流程圖 (1) 設(shè)置各個(gè)狀態(tài)寄存器(SS,IMB,DMB) 首先,清空各個(gè)計(jì)數(shù)器(SIN,IMN,DMN),在程序運(yùn)行初期將SS置為0(即休眠狀態(tài)),因?yàn)樵诔绦騽傞_(kāi)始時(shí)初始化Cache會(huì)導(dǎo)致缺失率非常大,這期間根據(jù)缺失率來(lái)設(shè)置SS是不正確的。通過(guò)實(shí)驗(yàn)發(fā)現(xiàn)大部分程序運(yùn)行幾個(gè)敏感間隔后,缺失率趨近于穩(wěn)定。本文在過(guò)了第3個(gè)敏感間隔后,每個(gè)敏感間隔結(jié)束時(shí)都啟用仲裁機(jī)制。 (2) 設(shè)置仲裁策略 啟動(dòng)仲裁機(jī)制,如圖1所示,如果IMB、DMB、IMN和DMN的值滿足狀態(tài)1或狀態(tài)3,仲裁機(jī)制將SS設(shè)置為1,Scache作為Icache使用。由于Scache比原Icache容量要大,因此只需要截取與原Icache容量相同的部分作為Icache使用,其余部分休眠。為了正確讀取Icache和Scache,就要保證能夠正確尋址,因此增加一位地址位用來(lái)尋址。本方案將來(lái)自CPU地址中的Tag字段的最低位作為增加的地址位尋址,用來(lái)判斷是對(duì)原Icache讀取,還是對(duì)Scache讀取。如果地址中Tag字段的最低位是1,表明來(lái)自CPU的地址是對(duì)Scache的操作,Scache片選信號(hào)選中,Icache片選信號(hào)關(guān)閉。與之相應(yīng),送到總線上的輸出數(shù)據(jù)也應(yīng)該是從Scache讀出的數(shù)據(jù)。這時(shí)IMN統(tǒng)計(jì)的數(shù)據(jù)應(yīng)該是Icache和Scache的缺失數(shù)目之和。 敏感間隔結(jié)束后,如果IMB、DMB、IMN和DMN的值滿足狀態(tài)2或狀態(tài)4,仲裁機(jī)制將SS設(shè)置為2,Scache作為Dcache使用。如果這時(shí)增加的地址位是0,則表明來(lái)自CPU的地址是對(duì)Dcache的操作,Dcache與總線交互數(shù)據(jù),Scache片選信號(hào)關(guān)閉。當(dāng)狀態(tài)5發(fā)生時(shí)SS被設(shè)置為0,整個(gè)Scache休眠,Icache和Dcache正常工作。 為了對(duì)上述設(shè)計(jì)進(jìn)行性能評(píng)測(cè),在兼容MIPS指令集的嵌入式CPU模擬器上進(jìn)行測(cè)試和數(shù)據(jù)采集。該模擬器精確到了周期,為提取Cache模型的詳細(xì)運(yùn)行數(shù)據(jù)提供了極大的方便。模擬測(cè)試分別實(shí)現(xiàn)了3種傳統(tǒng)Cache結(jié)構(gòu)模型和可配置Cache結(jié)構(gòu)模型在模擬器上運(yùn)行兩個(gè)測(cè)試應(yīng)用程序的性能比較,為了簡(jiǎn)單起見(jiàn),主要是對(duì)CPI進(jìn)行比較[7]。 測(cè)試過(guò)程如下:A、B、C均為傳統(tǒng)結(jié)構(gòu)的Cache模型,模型A的Cache大小是4 KB,采用直接映象的組織方式,二級(jí)Cache大小為28 KB;模型B的一級(jí)Cache大小為8 KB,采用直接映象的組織方式,二級(jí)Cache大小為24 KB;模型C的一級(jí)Cache大小為8 KB,采用兩路組相聯(lián)映象的組織方式,二級(jí)Cache為24 KB;模型D為滑動(dòng)Cache配置結(jié)構(gòu)的Cache模型,測(cè)試數(shù)據(jù)比較見(jiàn)圖3。 圖3 測(cè)試數(shù)據(jù)比較圖 從模擬器測(cè)試的結(jié)果看,在采用滑動(dòng)Cache配置結(jié)構(gòu)的Cache模型上運(yùn)行的兩個(gè)應(yīng)用程序的CPI值為最小,相較典型的A、B 和C三個(gè)傳統(tǒng)Cache模型,其性能改進(jìn)是明顯的。 Design of Sliding Cache Mechanism in Embedded System He Qingsong,Deng Chao,Qiu Zhi (No.722 Research Institute of CSIC,Wuhan 430205,China) In order to improve the using efficiency of Cache in the embedded system,a novel sliding Cache structure is proposed,which is based on the fact that different programs need different sizes of instruction and data Cache.This scheme can dynamically adjust the capacity and structure of Cache by balancing the instruction and data Cache requirement.The results indicate that the dynamic power and static leakage power of Level 1 Cache can be reduced using sliding Cache structure.Simulation results show that it decreases the average energy consumption and improves the comprehensive performance of the Cache. sliding Cache;reconfigurable;low power consumption TP302 A2 模擬測(cè)試及結(jié)果
結(jié) 語(yǔ)