何青松,鄧超,邱志
(中國船舶重工集團公司 第七二二研究所,武漢 430205)
一種嵌入式系統的滑動Cache機制設計
何青松,鄧超,邱志
(中國船舶重工集團公司 第七二二研究所,武漢 430205)
為了提高嵌入式系統中Cache的使用效率,針對不同類型的應用程序對指令和數據Cache的容量實時需求不同,提出一種滑動Cache組織方案。均衡考慮指令和數據Cache需求,動態地調整一級Cache的容量和配置。采用滑動Cache結構,不但降低了一級Cache的動態和靜態泄漏功耗,而且還降低了整個處理器的動態功耗。模擬仿真結果表明,該方案在有效降低Cache功耗的同時能夠提高Cache的綜合性能。
滑動Cache;可重構;低功耗
對于便攜式嵌入式設備,降低其整體功耗具有越來越重要的實際意義。而在設計的嵌入式設備中,Cache的功耗占整體功耗的40%左右[1-2],因此,研究如何降低Cache功耗的各種技術成為嵌入式設備設計者關注的重點。針對嵌入式系統運行的特征,很多應用系統都曾經提出過多種可重構Cache結構[2-5],例如通過調節Cache的容量[3]、相聯度[2]、塊大小[4]、替換策略、緩存塊數[5]等技術方式,適應不同的嵌入式程序對Cache資源的需求,達到提高性能和降低功耗的目的。
由于不同嵌入式程序對指令Cache和數據Cache的需求是不平衡的,從而導致某種Cache的容量不足而另一種Cache卻空閑。嵌入式系統通常采用制定容量的指令Cache和數據Cache,本文引入動態重構的概念,實現了一種可重新劃分指令Cache和數據Cache大小的高速緩存模塊,可動態配置指令Cache和數據Cache的大小。對于較小的應用程序,如果指令Cache和數據Cache過大,雖然命中率很高,但是也造成了功耗的增加;而對于較大的應用程序,如果指令Cache和數據Cache過小,則會造成命中率的明顯降低,在很大程度上影響處理器的性能。動態可重構Cache可以在程序運行的過程中隨著Cache命中率的變化隨時重構,既保證較高的命中率,又保證較低的功耗。
本文引入了一種新的Cache組織結構(稱做滑動Cache),是對動態可重構Cache的一種擴展方式,應用于嵌入式處理器中Icache和Dcache分離的片上一級Cache,主要包含指令Cache塊(Icache)、數據Cache塊(Dcache)和滑動Cache塊(Scache)3個部分,使Scache能夠在Icache和Dcache之間滑動。滑動Cache結構的特別之處在于它可以綜合考慮程序對Icache和Dcache的實時需要,進而通過仲裁機制動態決定Scache是用來擴充Icache的容量,還是用來擴充Dcache的容量,或者是休眠。這種方法不但降低了Cache的動態功耗和靜態泄漏功耗,而且處理器的性能也有所提高,它不需要任何軟件編譯的支持,也不需要改動除Cache之外的其他硬件。
1.1 滑動Cache基本思想
處理器及其Cache系統的設計在運行各種不同的應用程序時,其性能表現還是有很大差異的,某些程序需要的指令比較少但是卻要處理大量的數據,比如壓縮解壓縮算法。相反,還有一些程序需要執行的指令非常多,但數據量較少,例如一些編譯程序。因此在運行各種程序時都使用同一容量和結構的Cache,會造成某種Cache缺失率非常高,但同時另外一種Cache卻有部分閑置。如果設計一種Cache結構能隨著不同程序的需求,將一種Cache的閑置部分提供給另外一個需要增大容量的Cache使用,而不是簡單地關閉這些部分,那么處理器性能將會大大提高。滑動Cache組織結構圖如圖1 所示。

圖1 滑動Cache組織結構圖
Scache有3種狀態:當Icache缺失率較高時Scache作為Icache使用;當Dcache缺失率較高時Scache作為Dcache使用;如果Icache和Dcache缺失率都不高,Scache就休眠。當Scache與原有的Icache和Dcache結合使用時,只擴大組數,不改變相聯度。Scache的容量要小于等于Icache和Dcache中容量較大的一個,即Cslide≤max(Cinst,Cdata)。例如Icache容量為32 KB,Dcache容量為64 KB,則Scache容量可選范圍小于等于64 KB。假設Scache選定為64 KB,當Scache被指定用做Icache時, Scache中只有32 KB與原Icache結合使用,其余超出原Icache容量的32 KB處于休眠狀態。由于不同容量的Cache需要的Tag長度不同,Scache的容量可能會在Icache和Dcache兩個不同容量之間變動,導致滑動Cache的Tag長度也不固定。為了保證Scache既可充當Icache使用,又可充當Dcache使用,Scache的Tag長度應該等于指令和數據Tag中較長的,即Lslide tag=max(Linst tag,Ldata tag)。
1.2 滑動Cache仲裁機制
滑動Cache仲裁機制是核心部分,通過它來判斷Cache容量何時需要滑動、何時休眠,以及按照什么原則進行滑動。利用缺失率作為監視Cache性能的基本尺度,通過設計和使用一套參數來監視、反映和調整系統的動態行為和需求。這套參數如下所示:
① 敏感間隔計數器(Sense Intervals Num,SIN):為了監視Cache性能,就必須把一個應用程序的整個運行周期分成一些固定的長度,稱為敏感間隔(例如100萬條指令為一個間隔[6])。運算邏輯單元每執行一條指令,敏感間隔計數器就會自動加1。并且強制規定,只有一個敏感間隔結束以后,才可以啟動仲裁機制調整一級Cache的容量。
② Icache缺失計數器(Icache Miss Num,IMN):用來統計一個敏感間隔內Icache的缺失次數,每當Icache發生缺失時計數器自動加1,并且在每個敏感間隔開始時仲裁機制將其清0。
③ Dcache缺失計數器(Dcache Miss Num,DMN):用來統計一個敏感間隔內Dcache的缺失次數,每當Dcache發生缺失時計數器自動加1,并且每個敏感間隔開始時仲裁機制將其清0。
④ Icache缺失邊界寄存器(Icache Miss Bound,IMB):用來存儲預先設定的Icache缺失邊界。
⑤ Dcache缺失邊界寄存器(Dcache Miss Bound,DMB):用來存儲預先設定的Dcache缺失邊界。
⑥ Scache狀態標志寄存器(Slide State,SS):用來存儲當前Scache的狀態,當敏感間隔結束時,仲裁機制會根據IMB、DMB、IMN和DMN的值判斷發生哪種情況,進而將Scache設置成相應的狀態。Scache的狀態有以下5種:
狀態1:如果IMN>IMB且DMN 狀態2:如果IMN 狀態3:如果IMN>IMB且DMN>DMB,并且Icache超過邊界的比例大于Dcache,則SS被標志成1,下一個敏感間隔把Scache作為Icache使用。 狀態4:如果IMN>IMB且DMN>DMB,并且Dcache超過邊界的比例大于Icache,則SS被標志成2,下一個敏感間隔把Scache作為Dcache使用。 狀態5:如果IMN 1.3 滑動Cache工作過程 滑動Cache的工作流程如圖2所示。 圖2 滑動Cache的工作流程圖 (1) 設置各個狀態寄存器(SS,IMB,DMB) 首先,清空各個計數器(SIN,IMN,DMN),在程序運行初期將SS置為0(即休眠狀態),因為在程序剛開始時初始化Cache會導致缺失率非常大,這期間根據缺失率來設置SS是不正確的。通過實驗發現大部分程序運行幾個敏感間隔后,缺失率趨近于穩定。本文在過了第3個敏感間隔后,每個敏感間隔結束時都啟用仲裁機制。 (2) 設置仲裁策略 啟動仲裁機制,如圖1所示,如果IMB、DMB、IMN和DMN的值滿足狀態1或狀態3,仲裁機制將SS設置為1,Scache作為Icache使用。由于Scache比原Icache容量要大,因此只需要截取與原Icache容量相同的部分作為Icache使用,其余部分休眠。為了正確讀取Icache和Scache,就要保證能夠正確尋址,因此增加一位地址位用來尋址。本方案將來自CPU地址中的Tag字段的最低位作為增加的地址位尋址,用來判斷是對原Icache讀取,還是對Scache讀取。如果地址中Tag字段的最低位是1,表明來自CPU的地址是對Scache的操作,Scache片選信號選中,Icache片選信號關閉。與之相應,送到總線上的輸出數據也應該是從Scache讀出的數據。這時IMN統計的數據應該是Icache和Scache的缺失數目之和。 敏感間隔結束后,如果IMB、DMB、IMN和DMN的值滿足狀態2或狀態4,仲裁機制將SS設置為2,Scache作為Dcache使用。如果這時增加的地址位是0,則表明來自CPU的地址是對Dcache的操作,Dcache與總線交互數據,Scache片選信號關閉。當狀態5發生時SS被設置為0,整個Scache休眠,Icache和Dcache正常工作。 為了對上述設計進行性能評測,在兼容MIPS指令集的嵌入式CPU模擬器上進行測試和數據采集。該模擬器精確到了周期,為提取Cache模型的詳細運行數據提供了極大的方便。模擬測試分別實現了3種傳統Cache結構模型和可配置Cache結構模型在模擬器上運行兩個測試應用程序的性能比較,為了簡單起見,主要是對CPI進行比較[7]。 測試過程如下:A、B、C均為傳統結構的Cache模型,模型A的Cache大小是4 KB,采用直接映象的組織方式,二級Cache大小為28 KB;模型B的一級Cache大小為8 KB,采用直接映象的組織方式,二級Cache大小為24 KB;模型C的一級Cache大小為8 KB,采用兩路組相聯映象的組織方式,二級Cache為24 KB;模型D為滑動Cache配置結構的Cache模型,測試數據比較見圖3。 圖3 測試數據比較圖 從模擬器測試的結果看,在采用滑動Cache配置結構的Cache模型上運行的兩個應用程序的CPI值為最小,相較典型的A、B 和C三個傳統Cache模型,其性能改進是明顯的。 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 A
2 模擬測試及結果

結 語
