基于流水化和滑動(dòng)窗口結(jié)構(gòu)的低功耗指令Cache設(shè)計(jì)*
李偉,肖建青
(西安微電子技術(shù)研究所,陜西 西安 710065)
摘要:嵌入式處理器中Cache的應(yīng)用極大地提高了處理器的性能,同時(shí)Cache,尤其是指令Cache功耗占據(jù)了處理器很大一部分功耗,關(guān)閉不必要的tag SRAM和data SRAM的訪問,可以極大地降低功耗。提出了一種流水化的指令Cache訪問機(jī)制,關(guān)閉不必要的data SRAM的訪問;并且通過記錄指令Cache行的信息和預(yù)測(cè)下一行的Cache形成一個(gè)Cache行滑動(dòng)窗口,關(guān)閉不必要的tag SRAM訪問。所提出的方法沒有性能損失,在SMIC 90 nm工藝下進(jìn)行功耗分析,其指令訪問的功耗降低50%。
關(guān)鍵詞:指令Cache;低功耗 ;流水化;滑動(dòng)窗口;CPU
中圖分類號(hào):TP303 文獻(xiàn)標(biāo)志碼:A
doi:10.3969/j.issn.1007-130X.2015.06.001
收稿日期:*2014-05-02;修回日期:2014-09-01
基金項(xiàng)目:國家863計(jì)劃資助項(xiàng)目(2011AA120201)
作者簡介:
通信地址:710065 陝西省西安市太白南路198號(hào)研究生部
Address:Graduate Department,198 Taibai Rd South,Xi’an 710065,Shaanxi,P.R.China
Low power instruction cache design based on pipeline and sliding window structure
LI Wei,XIAO Jian-qing
(Xi’an Microelectronic Technology Institute,Xi’an 710065,China)
Abstract:While the application of cache significantly improves the performance of the embedded processors, the cache, especially the I-cache, also consumes a large proportion of power. Reducing unnecessary accesses to the tag SRAM and the data SRAM can lower the power consumption. In this paper we design a pipeline I-Cache access mechanism that can deny the unnecessary access to the data SRAM. We also present a slide window of the cache lines by recording the information of the current introduction cache line and by predicting the information of the next cache line to reduce the unnecessary access to the tag SRAM. In the SMIC 90nm, the proposed method can achieve a 50% power reduction of the I-Cache without any performance degradation.
Key words:I-cache;low power;pipeline;slide window;CPU
1引言
在現(xiàn)代嵌入式處理器中,Cache的功耗占很大一部分比例,例如strong-arm110的Cache功耗占處理器功耗的43%[1]。在嵌入式應(yīng)用中l(wèi)oad/store指令的比例一般不超過25%[2],并且數(shù)據(jù)沒有明顯的局部性特點(diǎn),數(shù)據(jù)Cache大都采用直接映射,因此其所占功耗較小。指令一般具有顯著的局部性特點(diǎn),為了提高指令Cache的命中率,一般指令Cache都采用多路組相連的Cache結(jié)構(gòu),功耗較大,因此降低指令Cache的功耗一直是嵌入式處理器設(shè)計(jì)的重點(diǎn)。
在嵌入式應(yīng)用環(huán)境中,功耗可以說是設(shè)計(jì)的第一要素。隨著功耗問題的日益明顯,Cache的低功耗設(shè)計(jì)方法也層出不窮。指令Cache分階段訪問就是將tag位和data位的訪問分為兩個(gè)階段,只有在tag位命中的情況下,才去訪問data位,以減小指令Cache的訪問功耗[3],但是該方法引入了一個(gè)時(shí)鐘周期的延遲,降低了指令Cache的性能。為了消除分階段訪問帶來的延遲,文獻(xiàn)[4]提出了一種路預(yù)測(cè)的方法,通過直接訪問預(yù)測(cè)命中路的指令,以減小訪問的功耗。但是,功耗的降低與預(yù)測(cè)的準(zhǔn)確率相關(guān),當(dāng)準(zhǔn)確率較低時(shí),不僅沒有降低功耗,同樣會(huì)造成性能的損失。文獻(xiàn)[5]提出了基于預(yù)測(cè)機(jī)制的Filter Buffer技術(shù),通過預(yù)測(cè)將要訪問的指令是在指令Cache中還是在Filter Buffer中來降低指令Cache的訪問次數(shù)。文獻(xiàn)[6]提出了一種基于分支折合的低功耗設(shè)計(jì)方法,充分利用指令緩沖隊(duì)列中執(zhí)行過的指令來減小指令Cache訪問功耗。以上兩種技術(shù)分別增加了額外的存儲(chǔ)結(jié)構(gòu),發(fā)掘程序中的短循環(huán)體,以降低訪問功耗,一方面額外的存儲(chǔ)結(jié)構(gòu)會(huì)帶來額外的功耗消耗;另一方面如果發(fā)掘算法不合理或緩沖隊(duì)列的深度不合適,反而會(huì)額外增加指令Cache的功耗。文獻(xiàn)[7~9]提出了基于特定算法的動(dòng)態(tài)可重構(gòu)的指令Cache設(shè)計(jì),通過動(dòng)態(tài)改變指令Cache的容量和組相聯(lián)數(shù)達(dá)到減小訪問次數(shù)和功耗的目的。由于指令的動(dòng)態(tài)功耗與存儲(chǔ)體訪問寬度關(guān)聯(lián)較大,與容量關(guān)聯(lián)度較小,因此動(dòng)態(tài)功耗下降有限,此外容量的動(dòng)態(tài)調(diào)整滯后于實(shí)際的程序需要,因此對(duì)指令Cache的性能有一定的影響。
本文對(duì)LEON3處理器的指令Cache進(jìn)行分析后,充分發(fā)掘利用指令Cache訪問時(shí)已經(jīng)讀出的tag信息,減小tag訪問的次數(shù);此外,采用了基于雙時(shí)鐘沿流水化分階段訪問的結(jié)構(gòu),減小數(shù)據(jù)區(qū)域訪問的次數(shù),在增加很小的硬件代價(jià)的基礎(chǔ)上,大幅度降低了指令Cache的動(dòng)態(tài)功耗。
2滑動(dòng)窗口的原理分析
通過對(duì)指令Cache行的執(zhí)行情況進(jìn)行分析,可以將指令流歸納為四種情況,如圖1所示。
Figure 1 Four types of instruction flow 圖1 四種類型的指令流
第一類為指令流在同一Cache行。如當(dāng)前指令為指令a,當(dāng)不發(fā)生跳轉(zhuǎn)時(shí)將執(zhí)行指令b,如果發(fā)生跳轉(zhuǎn)時(shí),跳轉(zhuǎn)到本行指令c。無論哪種情況其相繼執(zhí)行的指令都在同一Cache行中。對(duì)于某一Cache行的多條指令,共享tag標(biāo)志位。
第二類為相鄰的Cache行。如指令b為當(dāng)前指令最后一行,如果不發(fā)生跳轉(zhuǎn),將要執(zhí)行下一Cache行的第一條指令,如果發(fā)生跳轉(zhuǎn),其跳轉(zhuǎn)的目標(biāo)指令為下一行的指令b。也就是說將要執(zhí)行的指令在相鄰的下一個(gè)Cache行中。在第一類指令發(fā)生的空隙,tag SRAM處于空閑,如果利用空閑周期,預(yù)先讀出同一路下一個(gè)Cache的tag標(biāo)志位和有效位,在指令發(fā)生Cache行切換時(shí),預(yù)先比較預(yù)測(cè)的Cache行是否命中,如果命中就可以關(guān)閉tag SRAM,其余路的比較器也可以不參與比較,這樣便可以有效地降低功耗。事實(shí)上由于指令的局部性特征比較明顯,預(yù)測(cè)的成功率很高。
第三類是在第i行Cache發(fā)生跳轉(zhuǎn),跳轉(zhuǎn)到最近執(zhí)行過的Cache行。對(duì)于此類指令可以記錄最近執(zhí)行過的多個(gè)Cache行的信息,當(dāng)指令發(fā)生跳轉(zhuǎn)時(shí),首先比較記錄中的Cache行是否命中,同樣,如果命中便可以降低tag SRAM的功耗。
第四類是發(fā)生跳轉(zhuǎn)指令,其跳轉(zhuǎn)地址不在以上三類的記錄信息內(nèi),對(duì)于此類指令流沒有規(guī)律可循,因此不做處理。
因此,本文通過設(shè)置一個(gè)滑動(dòng)的寄存器窗口來記錄預(yù)測(cè)的Cache行信息、當(dāng)前Cache行的信息和最近訪問Cache行的信息,用于提前比較指令Cache是否命中,如果命中,可以有效地降低指令Cache的功耗,如果不命中,也不會(huì)帶來額外的性能損失。其原理示意圖如圖2所示,圖中采用了四路組相聯(lián)Cache,每一Cache指令字為4,滑動(dòng)窗口深度為3?;瑒?dòng)窗口由三個(gè)字段組成:(1)set字段用于保存有效指令所在的Cache組號(hào);(2)tag字段用于記錄tag信息,用于命中判斷;(3)valid字段用于記錄對(duì)應(yīng)指令是否有效。不失一般性,假設(shè)剛剛執(zhí)行過和正在執(zhí)行的指令均來自第一路Cache,當(dāng)執(zhí)行到第i行指令Cache時(shí),首先將當(dāng)前Cache行tag、valid等信息保存到記錄窗口中,此后同一行Cache的指令通過滑動(dòng)窗口進(jìn)行命中判斷。利用Cache tag SRAM訪問的空閑時(shí)間段,將同一路Cache的下一行信息保存到記錄窗口中。當(dāng)Cache行發(fā)生變化時(shí),首先判斷記錄窗口記錄的tag信息是否命中,如果命中發(fā)生窗口滑動(dòng),將下一行信息保存為當(dāng)前信息,當(dāng)前信息保存為歷史信息。如果沒有命中,首先將當(dāng)前信息保存為歷史信息,重新記錄當(dāng)前Cache信息和預(yù)取下一Cache行信息。事實(shí)上,通過設(shè)置set字段保存有效的Cache組號(hào),Cache的跳轉(zhuǎn)可以是不同組的Cache行??紤]到順序執(zhí)行的指令序列占總指令的很大一部分比例,記錄窗口只是預(yù)取同一路的下一Cache信息,而不做復(fù)雜的預(yù)測(cè)。
Figure 2 Schematic of instruction cache sliding window 圖2 指令Cache滑動(dòng)窗口原理示意圖
3基于流水化和滑動(dòng)窗口結(jié)構(gòu)的低功耗指令Cache設(shè)計(jì)
3.1滑動(dòng)窗口的低功耗設(shè)計(jì)
滑動(dòng)窗口的狀態(tài)控制有四種狀態(tài),如圖3所示。
Figure 3 Schematic diagram of the sliding window 圖3 滑動(dòng)窗口狀態(tài)示意圖
(1)記錄狀態(tài),記錄當(dāng)前Cache行的tag位和valid位;
(2)同一Cache行狀態(tài),預(yù)取下一行指令的tag、valid位;
(3)不同Cache行狀態(tài),當(dāng)相繼兩條指令不在同一Cache行時(shí),需要更新當(dāng)前Cache行和歷史Cache行的tag、valid位;
(4)寫tag更新狀態(tài),當(dāng)Cache不命中時(shí),需要重新寫Cache行,此時(shí)如果需要更新的Cache行在窗口內(nèi),需要更新其有效值。
狀態(tài)遷移條件有八種,分別是:c1記錄當(dāng)前Cache行信息,并且下一條指令在同一Cache內(nèi);c2當(dāng)前指令不在同一Cache內(nèi);c3更新記錄窗口后,跳轉(zhuǎn)到同一Cache行狀態(tài);c6記錄狀態(tài)時(shí)發(fā)生跳轉(zhuǎn),當(dāng)前指令與記錄指令不在同一Cache內(nèi);c4、c7和c8為Cache指令不命中,需要跳轉(zhuǎn)到寫tag更新狀態(tài),更新相應(yīng)的標(biāo)志位;c5狀態(tài)為寫更新后跳轉(zhuǎn)到記錄狀態(tài)得新開始記錄。
指令Cache 的滑動(dòng)窗口由三類寄存器組構(gòu)成:current寄存器用于記錄當(dāng)前行tag、set、valid信息;next寄存器用于記錄預(yù)測(cè)行tag、set、valid信息;history寄存器用于記錄最近執(zhí)行過的Cache行信息?;瑒?dòng)窗口的命中判斷過程如圖4所示。首先將NPC中tag值與記錄窗口中的所有tag字段進(jìn)行比較,當(dāng)均不相同時(shí)表示記錄窗口缺失,需要打開四路tag區(qū)域進(jìn)行tag位的讀取,并隨后更新記錄窗口。當(dāng)命中時(shí),通過set字段的組號(hào)生成Data SRAM的片選信號(hào)并保存到Data_Enable寄存器中,用于指示指令所在的區(qū)域,并根據(jù)NPC的地址偏移量來選擇有效位,如果有效位valid_x有效,表示指令字有效可以關(guān)閉tag SRAM;如果valid_x無效,表示指令字在Cache中缺失,按指令字缺失做處理,當(dāng)指令字重新從主存中取回時(shí),更新相應(yīng)的標(biāo)志位。
3.2分段流水化的低功耗設(shè)計(jì)
為了進(jìn)一步減小指令Cache數(shù)據(jù)區(qū)域的訪問次數(shù),降低功耗,在本文的指令Cache設(shè)計(jì)中,將取指令操作分為了三個(gè)流水階段,分階段比較和輸出,減小data SRAM的訪問次數(shù)。在寄存器和SRAM全部采用時(shí)鐘上升沿采樣時(shí),取tag標(biāo)志位信息、tag位輸出比較并根據(jù)結(jié)果使能data SRAM和指令輸出將分別對(duì)應(yīng)處理器流水的W(寫回)、F(取指)和D(譯碼)。在這種情況下,SRAM輸出的時(shí)延將壓縮譯碼階段電路的譯碼時(shí)間,對(duì)譯碼電路本就緊張的時(shí)序造成影響。因此,本文對(duì)data SRAM的控制信號(hào)采用了下降沿采樣的設(shè)計(jì)方法,將3個(gè)時(shí)鐘周期壓縮為2.5個(gè)時(shí)鐘周期或2個(gè)時(shí)鐘周期。其電路結(jié)構(gòu)如圖5所示。
Figure 4 Hit judgment of the sliding window 圖4 滑動(dòng)窗口命中判斷
Figure 5 Scheme of instruction cache with pipeline 圖5 流水化操作電路結(jié)構(gòu)圖
在W流水級(jí),根據(jù)NPC值將使能信號(hào)和地址信號(hào)輸入到四路tag SRAM中,同時(shí)進(jìn)行記錄窗口的預(yù)判,并將預(yù)判結(jié)果保存到寄存器中。
在F流水級(jí),如果記錄窗口命中,通過多路選擇器和latch進(jìn)行操作數(shù)隔離,減小索引和PC比較的功耗,如果沒有命中,使用PC地址和tag SRAM輸出的索引進(jìn)行命中判斷,將命中的結(jié)果保存到D_set寄存器中。在時(shí)鐘的下降沿,data SRAM采樣控制和地址信號(hào),并將數(shù)據(jù)輸出。當(dāng)時(shí)鐘頻率較低時(shí),使用寄存器保存指令輸出結(jié)果,當(dāng)時(shí)鐘頻率較高時(shí),寄存器的建立時(shí)間無法保障,采用鎖存器保存輸出結(jié)果,鎖存器在高電平時(shí)透明,在低電平時(shí)將數(shù)據(jù)鎖存,保證譯碼階段指令的持續(xù)輸出。對(duì)于使用鎖存器保存指令的結(jié)構(gòu),同時(shí)需要設(shè)置額外的一個(gè)寄存器用于保存指令字,保證流水由于數(shù)據(jù)相關(guān)停頓時(shí),譯碼器的指令字來自指令寄存器,從而可以最大限度地減小指令Cache的訪問。在本文的設(shè)計(jì)中,時(shí)鐘的頻率為200 MHz,完全可以滿足使用寄存器保存指令的時(shí)序要求。
通過流水化的指令Cache設(shè)計(jì),可以將分段訪問Cache技術(shù)帶來的額外時(shí)鐘消耗完成隱藏到流水線中。同時(shí),利用分段訪問組相聯(lián)Cache原理,根據(jù)tag的比較結(jié)果選擇有效的數(shù)據(jù)區(qū)域進(jìn)行訪問,減少了訪問Cache數(shù)據(jù)區(qū)域的次數(shù),有效地降低了Cache的功耗。
4實(shí)驗(yàn)及結(jié)果分析
4.1訪問量分析
我們使用Power Stone Benchmarks[10]嵌入式功耗測(cè)試向量對(duì)改進(jìn)前后的LEON3指令Cache tag、data區(qū)域的訪問次數(shù)進(jìn)行了統(tǒng)計(jì),發(fā)現(xiàn)next和current寄存器的設(shè)置可以有效地降低tag SRAM訪問的次數(shù),而history的數(shù)量對(duì)減少tag SRAM訪問次數(shù)的貢獻(xiàn)較小,在設(shè)置1、2、4個(gè)history寄存器時(shí),平均訪問減少3.583%、3.589%、3.589%。因此,本文的歷史寄存器數(shù)量設(shè)置為1。最終的統(tǒng)計(jì)結(jié)果如表1所示。
Table 1 Number of access to the tag SRAM before
通過以上的統(tǒng)計(jì)信息可以看出,采用滑動(dòng)記錄窗口的技術(shù),可以有效地降低tag SRAM的訪問次數(shù),訪問次數(shù)減小為初始設(shè)計(jì)的39%,而處理器總的執(zhí)行周期沒有任何變化。
對(duì)選取的Power Stone測(cè)試向量進(jìn)行了指令Cache數(shù)據(jù)區(qū)域訪問的統(tǒng)計(jì),統(tǒng)計(jì)結(jié)果如表2所示。
Table 2 Number of access to the data SRAM before
通過以上統(tǒng)計(jì)結(jié)果可以看出,采用基于分段訪問的流水結(jié)構(gòu)的Cache訪問,極大地減少了對(duì)指令Cache數(shù)據(jù)區(qū)域的訪問次數(shù),data SRAM的訪問次數(shù)下降為優(yōu)化前的27%。
4.2功耗分析
指令Cache的tag SRAM和data SRAM采用TSMC 90 nm工藝的Memory Compiler生產(chǎn),指令Cache控制器同樣采用TSMC 90 nm工藝在Synopsys DC工具綜合生產(chǎn)?;跁r(shí)鐘周期的仿真采用Power Stone Benchmarks測(cè)試程序集,功耗分析采用Synopsys PTPX工具進(jìn)行分析。tag SRAM和data SRAM的功耗對(duì)比圖如圖6和圖7所示。
Figure 6 Power comparison of each set tag SRAM with and without the sliding record window 圖6 采用滑動(dòng)記錄窗口技術(shù)前后 指令Cache各路tag功耗對(duì)比
Figure 7 Power comparison of each set data SRAM with and without the technique of phased access and pipeline 圖7 采用分階段訪問和流水化技術(shù)前后 每路data SRAM功耗對(duì)比
從圖6可以看出,通過采用流水化分階段訪問技術(shù),指令Cache的data SRAM區(qū)域功耗得到了有效的控制,平均功耗下降至原始設(shè)計(jì)功耗的40%。從圖7可以看出,通過采用滑動(dòng)記錄窗口技術(shù),指令Cache的tag SRAM區(qū)域的訪問功耗大幅下降,平均減少到原始設(shè)計(jì)的60%。
Figure 8 Total power comparison of instruction cache 圖8 指令Cache的總功耗對(duì)比
從圖8的功耗仿真結(jié)果可以看出,采用流水化指令Cache以后,其指令Cache的功耗減少了約40%,同時(shí)采用流水化設(shè)計(jì)和滑動(dòng)窗口設(shè)計(jì)后指令Cache的功耗減少了約60%。因此,極大地降低了指令Cache的功耗。
5結(jié)束語
本文首先研究分析了現(xiàn)有的降低指令Cache的設(shè)計(jì)方法和技術(shù),并結(jié)合具體項(xiàng)目中的Cache結(jié)構(gòu),設(shè)計(jì)一種滑動(dòng)記錄窗口的流水結(jié)構(gòu)指令Cache,用于降低指令Cache的動(dòng)態(tài)功耗。該技術(shù)通過將指令Cache的訪問分為三級(jí)流水結(jié)構(gòu),將指令Cache的tag位讀取、tag位的比較和指令的讀取分為三個(gè)階段完成。由于只有在tag位命中后才進(jìn)行指令的讀取,有效地降低了指令Cache的指令區(qū)域的訪問量,有效地降低了功耗。同時(shí),基于指令訪問顯著的空間局部性特點(diǎn),通過設(shè)置滑動(dòng)記錄窗口記錄當(dāng)前的和最近訪問過的tag標(biāo)志位,在讀取指令Cache的tag標(biāo)志位之前首先比較記錄窗口的tag標(biāo)志位,只有不命中時(shí),才讀取指令Cache的tag標(biāo)志位,有效地降低了tag位的比較和tag區(qū)域的訪問次數(shù),可以有效地降低功耗。
參考文獻(xiàn):
[1]Montenaro J,Loe T H,Witek R T,et al. A 160MHz 32b 0.5W CMOS RISC microprocessor[J]. IEEE ISSCC,1996,31(11):1703-1714.
[2]Guthaus M R,Ringenberg J S,Ernst D,et al. Mibench:A free,commercially representative embeded benchmark suite[C]//Proc of IEEE 4th Annual Workshop on Workload Characterization,2001:3-14.
[3]Megalingam R K,Deepu K B,Joseph I P,et al. Phased set associative cache design for reduced power consumption[C]//Proc of International Conference on Computer Science and Information Technology,2009:551-556.
[4]Raveendran B K,Sudarshan T S B,Patil A,et al. Predictive placement scheme in set-associative cache for energy efficient embedded systems [C]//Proc of International Conference on Signal Processing,Communications and Networking,2008:152-157.
[5]Ali K,Aboelaze M,Datta S. Energy efficient I-Cache using multiple line buffers with prediction[J]. Computer&Digtial Techniques,2008,2(5):355-362.
[6]Meng Jian-yi,Yan Xiao-lang,Ge Hai-tong,et al.Instruction recycling based low power branch folding[J].Journal of Zhejiang University (Engineering Science),2010,44(4):632-638. (in Chinese)
[7]HSU P H,Chien S Y. Reconfigurable cache memory architecture for integral image and integral histogram applications[C] //Proc of International Conference on Signal Processing Systems,2011:151-156.
[8]Alipour M,Moshari K,Bagheri M R,et al. Performance per power optimum cache architecture for embedded applications,a design space exploration[C]//Proc of the 2nd IEEE International Conference on Networked Embedded Systems for Enterprise Application,2011:1-6.
[9]Ren Xiao-xi, Liu Qing. Study of dynamically reconfigurable algorithm for lowpower cache[J].Application Research of Computers,2013,30(20):414-416.(in Chinese)
[10]Scott J,Lee L H,Arends J,et al. Design the low-power M CORE architecture[C]//Proc of IEEE Power Driven Microarchitecture Workshop,1998:145-150.
參考文獻(xiàn):附中文
[6]孟建熠,嚴(yán)曉浪,葛海通,等. 基于指令回收的低功耗循環(huán)分支折合技術(shù)[J]. 浙江大學(xué)學(xué)報(bào)(工學(xué)版),2010,44(4):632-638.
[9]任小西,劉清. 一種低功耗動(dòng)態(tài)可重構(gòu)cache算法的研究[J]. 計(jì)算機(jī)應(yīng)用研究,2013,30(20):414-416.
李偉(1980-),男,山西晉中人,博士生,研究方向?yàn)镾oC低功耗設(shè)計(jì)。E-mail:David_lw@foxmail.com
LI Wei,born in 1980,PhD candidate,his research interest includes low power design of SoC.