專利名稱:一種嵌入式設(shè)備低功耗混合Cache的實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種嵌入式設(shè)備緩沖存儲器的處理方法,尤其是一種嵌入式設(shè)備低功耗混合Cache的實現(xiàn)方法,屬于計算機存儲器層次結(jié)構(gòu)設(shè)計領(lǐng)域。
背景技術(shù):
目前,對于以電池供電的便攜式嵌入式設(shè)備而言,降低其整體功耗具有越來越大的現(xiàn)實意義。而在這些嵌入式設(shè)備中,Cache的功耗占整體功耗的40%左右,因此研究如何降低Cache的功耗成為嵌入式設(shè)備設(shè)計者普遍關(guān)注的問題。嵌入式系統(tǒng)通常采用固定容量的指令Cache和數(shù)據(jù)Cache,但是不同程序?qū)χ噶?Cache和數(shù)據(jù)Cache的需求是不平衡的,從而導致某種Cache的容量不足而另一種Cache卻有空閑。而混合Cache卻不存在這種問題,但混合Cache的容量一般都比較大,訪問功耗也就比較大,降低了其普遍適用性。針對混合Cache的特點,前人提出一種低功耗分類訪問方案,該方案通過增加一個類型指示位,將Cache的每一塊動態(tài)化分為指令塊和數(shù)據(jù)塊,在訪問過程中,只有類型匹配的塊才被訪問,從而可以過濾對不必要的存儲體訪問,節(jié)省了訪問功耗。但該方案不能滿足程序運行時對Cache容量的動態(tài)需求。申請?zhí)枮?03116564. 8,200810156535. 2、200910096957. X 的中國專利申請分別公開了低功耗Cache實現(xiàn)的幾種方法。第一種方法只能面向指令Cache,該方法設(shè)立了索引標志寄存器,來保存行匹配和組選擇結(jié)果,利用預(yù)測的方法和環(huán)形歷史緩沖區(qū)來減少對索引標志寄存器的訪問,實現(xiàn)對指令Cache降低功耗。第二種方法是通過增加一個Cache控制器,實現(xiàn)了將頻繁訪問的數(shù)據(jù)拷貝到Cache中,而將引起預(yù)取時間局部下降的數(shù)據(jù),直接從主存讀出,同時根據(jù)歷史記錄,生成標記信息表(該表可以由軟件修改),加載到Cache控制器中,控制其操作,從而降低Cache的功耗;第三種是基于程序需求改變Cache組相聯(lián)度的方法,該方法主要修改了 Cache的組相聯(lián)度,對于Cache的類型和有效性并未加以判斷,且每組的組相聯(lián)度必須相同。
綜上所述,現(xiàn)有技術(shù)的Cache設(shè)計方案均無法滿足嵌入式設(shè)備容量小、低功耗的需求。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對上述現(xiàn)有技術(shù)存在的不足,提出一種可以有效降低沖突缺失、避免抖動的嵌入式設(shè)備低功耗混合Cache的實現(xiàn)方法。本發(fā)明的嵌入式設(shè)備指其中嵌入計算機系統(tǒng)的信息電器、移動通訊設(shè)備、網(wǎng)絡(luò)設(shè)備、以及工控仿真設(shè)備等。為達到上述目的,本發(fā)明嵌入式設(shè)備低功耗混合Cache的實現(xiàn)方法在嵌入式設(shè)備中通過以下基本步驟完成
第一步、分別預(yù)先設(shè)置指令Cache和數(shù)據(jù)Chche的以下狀態(tài)(參見圖幻初始狀態(tài)SO、 預(yù)備大容量狀態(tài)Si、容量競爭狀態(tài)S2、預(yù)備小容量狀態(tài)S3、容量調(diào)整狀態(tài)S4 ; 初始狀態(tài)SO是指=Cache容量、結(jié)構(gòu)保持不變的狀態(tài);預(yù)備大容量狀態(tài)Sl是指比目前Cache具有更大容量的Cache狀態(tài);通常若目前Cache 的容量不為最大,則定義更大Cache具有比目前更多路——例如增加1路的容量;
容量競爭狀態(tài)S2是指指令Cache和數(shù)據(jù)Cache容量需求產(chǎn)生沖突的狀態(tài);通常由于程序運行連續(xù)缺失指令,且所有Cache路已經(jīng)全部分配完,無空閑路,即處于此狀態(tài);
預(yù)備小容量狀態(tài)S3是指比目前Cache具有更小容量的Cache狀態(tài);通常若目前Cache 的容量不為最小,則定義更小Cache的容量為當前容量一半的狀態(tài);
容量調(diào)整狀態(tài)S4是指對目前的Cache容量進行調(diào)整、重新分配指令Cache和數(shù)據(jù) Cache容量大小的狀態(tài);
第二步、建立以下各計數(shù)器或寄存器
A.分別用于統(tǒng)計預(yù)定時間片內(nèi)各狀態(tài)下指令Cache和數(shù)據(jù)Cache訪問次數(shù)的指令訪問計數(shù)器I-AC和數(shù)據(jù)訪問計數(shù)器D-AC ;
B.分別用于統(tǒng)計在容量競爭狀態(tài)下指令Cache和數(shù)據(jù)Cache有效路數(shù)的指令Cache的有效路計數(shù)器I-MC和數(shù)據(jù)Cache的有效路計數(shù)器D-MC ;
C.分別用于統(tǒng)計在容量競爭狀態(tài)下指令Cache和數(shù)據(jù)Cache缺失次數(shù)的指令Cache缺失次數(shù)計數(shù)器I-MC和數(shù)據(jù)Cache缺失次數(shù)計數(shù)器D-MC ;
D.分別用于統(tǒng)計初始狀態(tài)下指令Cache和數(shù)據(jù)Cache連續(xù)缺失次數(shù)的指令Cache連續(xù)缺失計數(shù)器I-CMC和數(shù)據(jù)Cache連續(xù)缺失計數(shù)器D-CMC ;
E.分別用于統(tǒng)計在預(yù)備大容量狀態(tài)下指令Cache和數(shù)據(jù)Cache額外路命中次數(shù)的指令 Cache額外路命中計數(shù)器I-EWHC和數(shù)據(jù)Cache額外路命中計數(shù)器D-EWHC ;
F.分別用于統(tǒng)計在預(yù)備小容量狀態(tài)下指令Cache和數(shù)據(jù)Cache最近最少路命中數(shù)的指令Cache最近最少路命中計數(shù)器I-LRWHC和數(shù)據(jù)Cache最近最少路命中計數(shù)器D-LRWHC ;
G.分別用于統(tǒng)計在預(yù)備小容量狀態(tài)下指令Cache和數(shù)據(jù)Cache除最近最少命中路外次最近最少路命中數(shù)的指令Cache次最近最少路命中計數(shù)器I-SLRWHC和數(shù)據(jù)Cache次最近最少路命中計數(shù)器D-SLRWHC;
第三步、預(yù)置以下各邊界值
a.作為初始狀態(tài)下Cache狀態(tài)轉(zhuǎn)換條件之一的時間片邊界值TSB;
b.作為判斷指令Cache和數(shù)據(jù)Cache在不同狀態(tài)下是否超出最大訪問次數(shù)的訪問邊界值A(chǔ)B ;
c.作為判斷Cache容量是否超出當前程序需求的連續(xù)缺失邊界值CMB;
d.作為判斷是否帶來不必要能耗的額外路命中邊界值EWHB;
e.作為判斷關(guān)閉最近最少命中路是否會導致性能損失的最近最少路命中邊界數(shù) LRffHB ;
第四步、每當程序段發(fā)生變化且進入下一個程序段時,根據(jù)對以下條件的逐一判斷,進入相應(yīng)狀態(tài)并進行相應(yīng)置數(shù)和狀態(tài)設(shè)置
條件A 如果I-CMOCMB且I-MC+D-MC<8,則將I-AC和I-CMC置零,指令Cache轉(zhuǎn)到預(yù)備大容量狀態(tài);
條件B 如果I-CMOCMB且I-MC+D-MC==8且當前數(shù)據(jù)Cache的狀態(tài)不為預(yù)備小容量狀態(tài),則將I-AC和I-CMC置零,指令Cache和數(shù)據(jù)Cache轉(zhuǎn)到容量競爭狀態(tài),同時將D-AC和 D-CMC置零,并將數(shù)據(jù)Cache的當前狀態(tài)設(shè)為指令Cache和數(shù)據(jù)Cache的容量競爭狀態(tài);條件C 如果I-AOTSB且I-MOl且I_CMC<CMB,則將I-AC和I-CMC置零,指令Cache 轉(zhuǎn)到預(yù)備小容量狀態(tài);
條件 D 如果(I-AC+D-AC) >2*AB,則將 I_AC、D_AC、I-MC 和 D-MC 置零,指令 Cache 和數(shù)據(jù)Cache轉(zhuǎn)到初始狀態(tài),同時將數(shù)據(jù)Cache的當前狀態(tài)設(shè)為數(shù)據(jù)Cache的初始狀態(tài);
條件 E 如果(I-AC+D-AC)==2*AB 且 I-AOD-AC 且 I-MOD-MC,則將 I-AC、D-AC, I-MC 和D-MC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài),同時將數(shù)據(jù)Cache的最近最少命中路用于指令Cache,并將數(shù)據(jù)Cache的當前狀態(tài)設(shè)為數(shù)據(jù)Cache的初始狀態(tài);
條件F 如果I-AOAB且I-EWHC<EWHB,則將I-AC和I-EWHC置零,指令Cache和數(shù)據(jù) Cache轉(zhuǎn)到初始狀態(tài);
條件G 如果I-EWHC>=EWHB,則將I-AC和I-EWHC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài), 激活額外路,即預(yù)備大容量狀態(tài)下,相對于原先SO狀態(tài)增加的新路;
條件H 如果I-LRWHOLRWHB,則將I_AC、I-SLRffHC和I-LRWHC置零,指令Cache和數(shù)據(jù) Cache轉(zhuǎn)到初始狀態(tài);
條件 I 如果 I-AOAB 且 I-MC>2 且 I_LRWHC<=LRWHB 且 I_SLRWHC<=LRWHB,則將 I-AC、 I-SLRWHC和I-LRWHC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài),關(guān)閉最近最少和次最近最少命中路;
條件 J 如果 I-AOAB 且 I-LRWHC<=LRWHB,且 I_MC<2 或 I-SLRWHOLRWHB,則將 I-AC、 I-SLRffHC和I-LRWHC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài),關(guān)閉最近最少命中路; 條件K 如果對指令Cache和數(shù)據(jù)Cache進行容量調(diào)整,之后均轉(zhuǎn)到初始狀態(tài)。本發(fā)明方法的理論依據(jù)是采用PBCRA算法,可以通過比較連續(xù)間隔的指令工作集簽名過程中的相對簽名距離來檢測判斷程序段變化,并優(yōu)先分配混合Cache的指令路,然后分配數(shù)據(jù)路(為表述方便,將由混合Cache中的指令路構(gòu)成的Cache稱為指令Cache,而由數(shù)據(jù)路構(gòu)成的Cache稱為數(shù)據(jù)Cache)。所謂工作集簽名最早由Dhodapkar等人提出。每個簽名包含了在IOOk指令間隔內(nèi)的指令工作集信息。指令工作集簽名是一個η位向量,向量每一位的值由程序計數(shù)器PC 的值右移b位(b=log2m,m=程序所使用的指令Cache塊大小)得到。隨機哈希函數(shù)用來選擇向量位地址。若S1和&代表相鄰間隔的兩個指令工作集簽名,則定義相對簽名距離為
A = Is1 S2|/|S^S2(1)
其中分子部分為兩個簽名的異或運算;分母部分為兩個簽名的同或運算。若A=I, 則表明兩個簽名完全不同;而Δ=0,則表明兩個簽名完全相同。為了準確地判斷運行程序段的變化,定義了一個相對簽名距離閾值A(chǔ)th。如果Δ > Ath,則表明程序的運行段發(fā)生了變化;否則表明程序段沒有改變。但一個合適的閾值可能隨著運行程序段的不同而變化,因此該閾值將隨程序運行而自調(diào)整。以上內(nèi)容在相關(guān)論文中有詳細記載,本文不展開描述(詳見論文DHODAPKAR A S, SMITH JE. Managingmulti-configuration hardware via dynamicworking set analysis[C] //Proc of the 29th Annual InternationalSymposium on ComputerArchitecture. New York: ACM Press, 2002: 233-244.)。Cache的資源需求和處理器的工作負荷在同一程序段內(nèi)均不作明顯變化,PBCRA 算法可以利用程序運行時搜集到的Cache性能參數(shù)決定各個狀態(tài)之間的轉(zhuǎn)換。由于不同的程序甚至同一程序的不同運行階段對Cache容量的需求不一定是相同的,而且對指令Cache和數(shù)據(jù)Cache的訪問也不一定是平衡的,而上述容量聯(lián)合分配PBCRA算法較好地解決了 在滿足程序?qū)ache資源的實時需求的同時,還能充分利用有限的片上Cache資源, 因此有效地避免了分離Cache中由于資源分配不均衡帶來的性能損失。換言之,本發(fā)明一方面采用分類訪問機制,避免了對不必要路的訪問;另一方面還采用了基于程序段的重構(gòu)算法(PBCRA算法),能動態(tài)調(diào)整Cache的容量,從而合理滿足了程序運行時不同運行階段對 Cache的資源需求,顯著降低了功耗。并且,對于性能參數(shù)AC、CMC等,因為目前嵌入式設(shè)備的處理器中已有一些計數(shù)器(如Cache缺失計數(shù)器、Cache命中計數(shù)器等),所以收集這些參數(shù)信息并不需要很大的系統(tǒng)開銷。歸納起來,本發(fā)明具有以下顯著優(yōu)點
1、減少了 Cache的抖動。采用本發(fā)明后,由于指令Cache的路數(shù)和數(shù)據(jù)Cache的路數(shù)是可變的,可以降低沖突缺失并避免抖動,保證系統(tǒng)穩(wěn)定運行。2、性價比高。在不增加硬件的情況下,采用本發(fā)明后,功耗可以降低20. 4% 40. 7%ο
下面結(jié)合附圖對本發(fā)明作進一步的說明。圖1為本發(fā)明容量配置過程的流程圖。圖2為本發(fā)明指令Cache或數(shù)據(jù)Cache各種狀態(tài)關(guān)系示意圖。圖3是本發(fā)明一個實施例基于分類訪問和有效位預(yù)測的可重構(gòu)八路組相聯(lián)混合 Cache的結(jié)構(gòu)框圖。
具體實施例方式實施例一
本實施例中,如圖1所示,當一種用于建立電子病歷的嵌入式設(shè)備系統(tǒng)運行新程序后,通過計算原程序和新程序的相對簽名距離,并加入比較,決定是否進入以下低功耗混合 Cache,其實現(xiàn)步驟為
第一步、分別設(shè)置指令Cache和數(shù)據(jù)Chche的圖2所示各狀態(tài)初始狀態(tài)SO、預(yù)備大容量狀態(tài)Si、容量競爭狀態(tài)S2、預(yù)備小容量狀態(tài)S3、容量調(diào)整狀態(tài)S4。各狀態(tài)定義如前。第二步、建立以下各計數(shù)器
A.分別用于統(tǒng)計預(yù)定時間片內(nèi)各狀態(tài)下指令Cache和數(shù)據(jù)Cache訪問次數(shù)的指令訪問計數(shù)器I-AC和數(shù)據(jù)訪問計數(shù)器D-AC ;
B.分別用于統(tǒng)計在容量競爭狀態(tài)下指令Cache和數(shù)據(jù)Cache有效路數(shù)的指令Cache的有效路計數(shù)器I-MC和數(shù)據(jù)Cache的有效路計數(shù)器D-MC ;
C.分別用于統(tǒng)計在容量競爭狀態(tài)下指令Cache和數(shù)據(jù)Cache缺失次數(shù)的指令Cache缺失次數(shù)計數(shù)器I-MC和數(shù)據(jù)Cache缺失次數(shù)計數(shù)器D-MC ;
D.分別用于統(tǒng)計初始狀態(tài)下指令Cache和數(shù)據(jù)Cache連續(xù)缺失次數(shù)的指令Cache連續(xù)缺失計數(shù)器I-CMC和數(shù)據(jù)Cache連續(xù)缺失計數(shù)器D-CMC ;
E.分別用于統(tǒng)計在預(yù)備大容量狀態(tài)下指令Cache和數(shù)據(jù)Cache額外路命中次數(shù)的指令 Cache額外路命中計數(shù)器I-EWHC和數(shù)據(jù)Cache額外路命中計數(shù)器D-EWHC ;F.分別用于統(tǒng)計在預(yù)備小容量狀態(tài)下指令Cache和數(shù)據(jù)Cache最近最少路命中數(shù)的指令Cache最近最少路命中計數(shù)器I-LRWHC和數(shù)據(jù)Cache最近最少路命中計數(shù)器D-LRWHC ;
G.分別用于統(tǒng)計在預(yù)備小容量狀態(tài)下指令Cache和數(shù)據(jù)Cache除最近最少命中路外次最近最少路命中數(shù)的指令Cache次最近最少路命中計數(shù)器I-SLRWHC和數(shù)據(jù)Cache次最近最少路命中計數(shù)器D-SLRWHC;
第三步、預(yù)置以下各邊界值
a.作為初始狀態(tài)下Cache狀態(tài)轉(zhuǎn)換條件之一的時間片邊界值TSB;
b.作為判斷指令Cache和數(shù)據(jù)Cache在不同狀態(tài)下是否超出最大訪問次數(shù)的訪問邊界值A(chǔ)B ;
c.作為判斷Cache容量是否超出當前程序需求的連續(xù)缺失邊界值CMB;
d.作為判斷是否帶來不必要能耗的額外路命中邊界值EWHB;
e.作為判斷關(guān)閉最近最少命中路是否會導致性能損失的最近最少路命中邊界數(shù) LRffHB ;
以上各邊界值可以根據(jù)經(jīng)驗預(yù)置,例如可以將TSB設(shè)為(80K)、AB設(shè)為(5000)、CMB設(shè)為(4)、EWHB 設(shè)為(4)、LRWHB 設(shè)為(4)。 第四步、每當通過比較連續(xù)間隔的指令工作集簽名過程中相對簽名距離(或通過其它方法)發(fā)現(xiàn)程序段變化且進入下一個程序段時,根據(jù)對以下條件的逐一判斷,進入相應(yīng)狀態(tài)并進行相應(yīng)置數(shù)和狀態(tài)設(shè)置
條件A 如果I-CMOCMB且I-MC+D-MC<8,則將I-AC和I-CMC置零,指令Cache轉(zhuǎn)到預(yù)備大容量狀態(tài);
條件B 如果I-CMOCMB且I-MC+D-MC==8且當前數(shù)據(jù)Cache的狀態(tài)不為預(yù)備小容量狀態(tài),則將I-AC和I-CMC置零,指令Cache和數(shù)據(jù)Cache轉(zhuǎn)到容量競爭狀態(tài),同時將D-AC和 D-CMC置零,并將數(shù)據(jù)Cache的當前狀態(tài)設(shè)為指令Cache和數(shù)據(jù)Cache的容量競爭狀態(tài);
條件C 如果I-AOTSB且I-MOl且I_CMC<CMB,則將I-AC和I-CMC置零,指令Cache 轉(zhuǎn)到預(yù)備小容量狀態(tài);
條件 D 如果(I-AC+D-AC) >2*AB,則將 I_AC、D_AC、I-MC 和 D-MC 置零,指令 Cache 和數(shù)據(jù)Cache轉(zhuǎn)到初始狀態(tài),同時將數(shù)據(jù)Cache的當前狀態(tài)設(shè)為數(shù)據(jù)Cache的初始狀態(tài);
條件 E 如果(I-AC+D-AC)==2*AB 且 I-AOD-AC 且 I-MOD-MC,則將 I-AC、D-AC, I-MC 和D-MC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài),同時將數(shù)據(jù)Cache的最近最少命中路用于指令Cache,并將數(shù)據(jù)Cache的當前狀態(tài)設(shè)為數(shù)據(jù)Cache的初始狀態(tài);
條件F 如果I-AOAB且I-EWHC<EWHB,則將I-AC和I-EWHC置零,指令Cache和數(shù)據(jù) Cache轉(zhuǎn)到初始狀態(tài);
條件G 如果I-EWHC>=EWHB,則將I-AC和I-EWHC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài), 激活額外路;
條件H 如果I-LRWHOLRWHB,則將I_AC、I-SLRffHC和I-LRWHC置零,指令Cache和數(shù)據(jù) Cache轉(zhuǎn)到初始狀態(tài);
條件 I 如果 I-AOAB 且 I-MC>2 且 I_LRWHC<=LRWHB 且 I_SLRWHC<=LRWHB,則將 I-AC、 I-SLRWHC和I-LRWHC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài),關(guān)閉最近最少和次最近最少命中路;條件 J 如果 I-AOAB 且 I-LRWHC<=LRWHB,且 I_MC<2 或 I-SLRWHOLRWHB,則將 I-AC、 I-SLRffHC和I-LRWHC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài),關(guān)閉最近最少命中路; 條件K 如果對指令Cache和數(shù)據(jù)Cache進行容量調(diào)整,之后均轉(zhuǎn)到初始狀態(tài)。由于以上條件窮舉了所有可能出現(xiàn)的情況,并且只會滿足其中的條件之一,因此比較判斷的順序不影響最終Cache狀態(tài)轉(zhuǎn)換的結(jié)果。如圖3所示,如果有一個程序指令工作集M,初始時M有四個指令行X和數(shù)據(jù)行 Y,其地址分別為{ XO, XI,X2,X3 }和{ YO, Yl, Y2, Y3 },X映射到指令Cache的組A (WayO_Way3)中,對應(yīng)為{ XO, XI,X2,X3 },Y 映射到數(shù)據(jù) Cache 的組 B (Way4_Way7)中, 對應(yīng)為{ Y0,Y1,Y2,Y3 },此時M對Cache的需求是可以滿足的,運行時不會產(chǎn)生沖突缺失和抖動現(xiàn)象,Cache容量、結(jié)構(gòu)保持不變,處于狀態(tài)SO。隨著程序的運行,Cache的需求發(fā)生動態(tài)變化,例如X中增加一個指令地址X4,Y 減少一個數(shù)據(jù)地址Y3,此時組B對應(yīng)的有一個空閑路way7,組A由于路數(shù)不夠,如不及時調(diào)整,將會產(chǎn)生沖突缺失和抖動現(xiàn)象。通過計算相對簽名距離(或通過其它方法),可以發(fā)現(xiàn)前后程序需求差異的存在,且原先所有的way已經(jīng)分別分配給數(shù)據(jù)和指令Cache,I-CMC中的值為5 (由于出現(xiàn)抖動,該數(shù)值將不斷增加),I-WC的值為4,D-WC的值為4,CMB的值為 4,AB的值為5000,EffHB的值為4,LRffHB的值為4。判斷表明,此時I-CMOCMB且I_WC+D_WC==8且當前數(shù)據(jù)Cache的狀態(tài)不為預(yù)備小容量狀態(tài)S3,滿足條件B,則將I-AC和I-CMC置零,并轉(zhuǎn)到指令Cache和數(shù)據(jù)Cache的容量競爭狀態(tài)S2,同時將數(shù)據(jù)Cache的D-AC和D-CMC置零,并將數(shù)據(jù)Cache的狀態(tài)設(shè)為數(shù)據(jù) Cache和指令Cache的容量競爭狀態(tài)S2。隨著程序運行,I-AC的值變?yōu)镵(K為已經(jīng)執(zhí)行的指令條數(shù)),D_AC的值為3K/5 (因為指令與數(shù)據(jù)的比例關(guān)系為5:3),I-MC的值為K,D-MC的值為3,隨著K值的不斷增大, 通過上述第三步的逐項判斷,符合條件E的情形,即(I-AC+D-AC)==2*AB且I_AC>D_AC且 I-MOD-MC,則將I-AC、D-AC, I-MC和D-MC置零,并轉(zhuǎn)到指令Cache的容量調(diào)整狀態(tài)S4,同時將數(shù)據(jù)Cache的最近最少命中路(采用LRU算法可得為way7)用于指令Cache,即將組B 關(guān)閉最近最少使用的空閑路way7,并將其分配給組A,從而避免組A產(chǎn)生沖突缺失和抖動出現(xiàn)。如設(shè)R4-R7是組B的路類型寄存器,寄存器的每一位控制相應(yīng)的一路用于指令路還是數(shù)據(jù)路當R4-R7的某位為“1”時,相應(yīng)的路為數(shù)據(jù)路,為“O”則將相應(yīng)的路用于指令路。則此時,R4-R7取值為1110,路暫停控制寄存器對應(yīng)取值為1111時,表明將組B的第四路way7用于指令Cache并激活,同時將指令和數(shù)據(jù)Cache的狀態(tài)設(shè)為初始狀態(tài)SO。不難理解,當用于只有小容量Cache并且應(yīng)用程序?qū)χ噶頒ache和數(shù)據(jù)Cache的訪問不均衡的嵌入式設(shè)備時,以上方法在分別動態(tài)調(diào)整指令Cache和數(shù)據(jù)Cache的容量的同時,更多的是聯(lián)合分配兩種Cache的容量,均衡指令Cache和數(shù)據(jù)Cache的負載,因此可以顯著提高Cache的性能。而當用于具有大容量Cache (例如指令和數(shù)據(jù)Cache的初始容量均為32 K)的設(shè)備時,由于兩種Cache的最大容量均能滿足程序的需求,因此不需在兩種Cache中進行容量的聯(lián)合分配,只要分別動態(tài)調(diào)整兩種Cache的容量,滿足程序運行過程中對各Cache的實時需求即可。在此過程中,由于控制了對空閑路的打開和關(guān)閉,將不用的空閑Cache路關(guān)閉,因此可以降低功耗,更好的滿足低功耗嵌入式設(shè)備的要求。
由上述技術(shù)方案可以看出,本發(fā)明的關(guān)鍵在于采用PBCRA算法的可分類訪問的混合Cache的功耗比傳統(tǒng)混合Cache的功耗平均降低40. 7%,比采用分類訪問方案的混合 Cache的功耗平均降低20. 4%。本發(fā)明引入一種基于程序段的重構(gòu)算法——PBCRA,并提出了一種新的基于分類訪問的可重構(gòu)混合Cache結(jié)構(gòu),該方案能夠根據(jù)不同程序段對Cache容量的需求,動態(tài)地分配混合Cache的指令路數(shù)和數(shù)據(jù)路數(shù),還能夠?qū)旌螩ache進行分類訪問,過濾對不必要路的訪問,從而實現(xiàn)了降低混合Cache的功耗的目的。除上述實施例外,本發(fā)明還可以有其他實施方式。例如,Cache組的路徑數(shù)量可以為4等,程序段發(fā)生變化也可以通過其它方法判斷。凡采用等同替換或等效變換形成的技術(shù)方案,均落在本發(fā)明要求的保護范圍。
權(quán)利要求
1. 一種嵌入式設(shè)備低功耗混合Cache的實現(xiàn)方法,其特征在于在嵌入式設(shè)備中通過以下步驟完成第一步、分別預(yù)先設(shè)置指令Cache和數(shù)據(jù)Chche的以下狀態(tài)初始狀態(tài)SO、預(yù)備大容量狀態(tài)Si、容量競爭狀態(tài)S2、預(yù)備小容量狀態(tài)S3、容量調(diào)整狀態(tài)S4 ;所述初始狀態(tài)SO為 Cache容量、結(jié)構(gòu)保持不變的狀態(tài);所述預(yù)備大容量狀態(tài)Sl為比目前Cache具有更大容量的Cache狀態(tài);所述容量競爭狀態(tài)S2為指令Cache和數(shù)據(jù)Cache容量需求產(chǎn)生沖突的狀態(tài); 所述預(yù)備小容量狀態(tài)S3為比目前Cache具有更小容量的Cache狀態(tài);所述容量調(diào)整狀態(tài)S4 為對目前的Cache容量進行調(diào)整、重新分配指令Cache和數(shù)據(jù)Cache容量大小的狀態(tài);第二步、建立以下各計數(shù)器A.分別用于統(tǒng)計預(yù)定時間片內(nèi)各狀態(tài)下指令Cache和數(shù)據(jù)Cache訪問次數(shù)的指令訪問計數(shù)器I-AC和數(shù)據(jù)訪問計數(shù)器D-AC ;B.分別用于統(tǒng)計在容量競爭狀態(tài)下指令Cache和數(shù)據(jù)Cache有效路數(shù)的指令Cache的有效路計數(shù)器I-MC和數(shù)據(jù)Cache的有效路計數(shù)器D-MC ;C.分別用于統(tǒng)計在容量競爭狀態(tài)下指令Cache和數(shù)據(jù)Cache缺失次數(shù)的指令Cache缺失次數(shù)計數(shù)器I-MC和數(shù)據(jù)Cache缺失次數(shù)計數(shù)器D-MC ;D.分別用于統(tǒng)計初始狀態(tài)下指令Cache和數(shù)據(jù)Cache連續(xù)缺失次數(shù)的指令Cache連續(xù)缺失計數(shù)器I-CMC和數(shù)據(jù)Cache連續(xù)缺失計數(shù)器D-CMC ;E.分別用于統(tǒng)計在預(yù)備大容量狀態(tài)下指令Cache和數(shù)據(jù)Cache額外路命中次數(shù)的指令 Cache額外路命中計數(shù)器I-EWHC和數(shù)據(jù)Cache額外路命中計數(shù)器D-EWHC ;F.分別用于統(tǒng)計在預(yù)備小容量狀態(tài)下指令Cache和數(shù)據(jù)Cache最近最少路命中數(shù)的指令Cache最近最少路命中計數(shù)器I-LRWHC和數(shù)據(jù)Cache最近最少路命中計數(shù)器D-LRWHC ;G.分別用于統(tǒng)計在預(yù)備小容量狀態(tài)下指令Cache和數(shù)據(jù)Cache除最近最少命中路外次最近最少路命中數(shù)的指令Cache次最近最少路命中計數(shù)器I-SLRWHC和數(shù)據(jù)Cache次最近最少路命中計數(shù)器D-SLRWHC;第三步、預(yù)置以下各邊界值a.作為初始狀態(tài)下Cache狀態(tài)轉(zhuǎn)換條件之一的時間片邊界值TSB;b.作為判斷指令Cache和數(shù)據(jù)Cache在不同狀態(tài)下是否超出最大訪問次數(shù)的訪問邊界值A(chǔ)B ;c.作為判斷Cache容量是否超出當前程序需求的連續(xù)缺失邊界值CMB;d.作為判斷是否帶來不必要能耗的額外路命中邊界值EWHB;e.作為判斷關(guān)閉最近最少命中路是否會導致性能損失的最近最少路命中邊界數(shù) LRffHB ;第四步、每當程序段發(fā)生變化且進入下一個程序段時,根據(jù)對以下條件的逐一判斷,進入相應(yīng)狀態(tài)及進行相應(yīng)置數(shù)和狀態(tài)設(shè)置條件A 如果I-CMOCMB且I-MC+D-MC<8,則將I-AC和I-CMC置零,指令Cache轉(zhuǎn)到預(yù)備大容量狀態(tài);條件B 如果I-CMOCMB且I-MC+D-MC==8且當前數(shù)據(jù)Cache的狀態(tài)不為預(yù)備小容量狀態(tài),則將I-AC和I-CMC置零,指令Cache和數(shù)據(jù)Cache轉(zhuǎn)到容量競爭狀態(tài),同時將D-AC和 D-CMC置零,并將數(shù)據(jù)Cache的當前狀態(tài)設(shè)為指令Cache和數(shù)據(jù)Cache的容量競爭狀態(tài);條件C 如果I-AOTSB且I-MOl且I_CMC<CMB,則將I-AC和I-CMC置零,指令Cache 轉(zhuǎn)到預(yù)備小容量狀態(tài);條件 D 如果(I-AC+D-AC) >2*AB,則將 I_AC、D_AC、I-MC 和 D-MC 置零,指令 Cache 和數(shù)據(jù)Cache轉(zhuǎn)到初始狀態(tài),同時將數(shù)據(jù)Cache的當前狀態(tài)設(shè)為數(shù)據(jù)Cache的初始狀態(tài);條件 E 如果(I-AC+D-AC)==2*AB 且 I-AOD-AC 且 I-MOD-MC,則將 I-AC、D-AC, I-MC 和D-MC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài),同時將數(shù)據(jù)Cache的最近最少命中路用于指令Cache,并將數(shù)據(jù)Cache的當前狀態(tài)設(shè)為數(shù)據(jù)Cache的初始狀態(tài);條件F 如果I-AOAB且I-EWHC<EWHB,則將I-AC和I-EWHC置零,指令Cache和數(shù)據(jù) Cache轉(zhuǎn)到初始狀態(tài);條件G 如果I-EWHC>=EWHB,則將I-AC和I-EWHC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài), 激活額外路;條件H 如果I-LRWHOLRWHB,則將I_AC、I-SLRffHC和I-LRWHC置零,指令Cache和數(shù)據(jù) Cache轉(zhuǎn)到初始狀態(tài);條件 I 如果 I-AOAB 且 I-MC>2 且 I_LRWHC<=LRWHB 且 I_SLRWHC<=LRWHB,則將 I-AC、 I-SLRWHC和I-LRWHC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài),關(guān)閉最近最少和次最近最少命中路;條件 J 如果 I-AOAB 且 I-LRWHC<=LRWHB,且 I_MC<2 或 I-SLRWHOLRWHB,則將 I-AC、 I-SLRffHC和I-LRWHC置零,指令Cache轉(zhuǎn)到容量調(diào)整狀態(tài),關(guān)閉最近最少命中路; 條件K 如果對指令Cache和數(shù)據(jù)Cache進行容量調(diào)整,之后均轉(zhuǎn)到初始狀態(tài)。
2.根據(jù)權(quán)利要求1所述嵌入式設(shè)備低功耗混合Cache的實現(xiàn)方法,其特征在于當目前Cache的容量不為最大時,定義預(yù)備大容量狀態(tài)Sl為具有比目前Cache增加1路的容量。
3.根據(jù)權(quán)利要求2所述嵌入式設(shè)備低功耗混合Cache的實現(xiàn)方法,其特征在于當目前Cache的容量不為最小,定義預(yù)備小容量狀態(tài)S3為具有目前Cache —半的容量。
4.根據(jù)權(quán)利要求3所述嵌入式設(shè)備低功耗混合Cache的實現(xiàn)方法,其特征在于所述程序段發(fā)生變化通過比較連續(xù)間隔的指令工作集簽名過程中的相對簽名距離檢測判斷。
全文摘要
本發(fā)明涉及一種嵌入式設(shè)備低功耗混合Cache的實現(xiàn)方法,屬于計算機存儲器層次結(jié)構(gòu)設(shè)計領(lǐng)域。該方法在嵌入式設(shè)備進行分別配置指令Cache和數(shù)據(jù)Chche的初始狀態(tài)S0、預(yù)備大容量狀態(tài)S1、容量競爭狀態(tài)S2、預(yù)備小容量狀態(tài)S3、容量調(diào)整狀態(tài)S4;建立邊界和計數(shù)器;每當程序段發(fā)生變化且進入下一個程序段時,根據(jù)對以下條件的逐一判斷,確定指令Cache和數(shù)據(jù)Cache的轉(zhuǎn)換狀態(tài)以及相關(guān)置數(shù)。采用本發(fā)明后,在幾乎不增加硬件的情況下,采用本發(fā)明基于程序段的PBCRA重構(gòu)算法后,功耗降低20.4%~41.7%,并且減少了Cache的抖動。由于指令Cache的路數(shù)和數(shù)據(jù)Cache的路數(shù)是可變的,可以降低沖突缺失并避免抖動,保證系統(tǒng)穩(wěn)定運行。
文檔編號G06F1/20GK102455977SQ201010527889
公開日2012年5月16日 申請日期2010年11月2日 優(yōu)先權(quán)日2010年11月2日
發(fā)明者宋余慶, 楊旭東, 陳健美 申請人:江蘇大學