專利名稱:一種針對包容性末級高速緩存的替換方法
技術(shù)領(lǐng)域:
本發(fā)明涉及處理器中包容性末級高速緩存的替換方法。
背景技術(shù):
由于處理器和主存儲器之間的性能差距越來越大,在現(xiàn)代處理器中使用多級高速緩存來填補(bǔ)這個差距。在多級高速緩存設(shè)計中一個重要的問題是是否能夠保證數(shù)據(jù)的包容性。在包容性高速緩存中,末級高速緩存包含所有內(nèi)部高速緩存的數(shù)據(jù),因此包容性末級高速緩存可以為內(nèi)部高速緩存過濾不必要的一致性信息來簡化一致性協(xié)議的實(shí)現(xiàn)。因此包容性高速緩存在很多新近提出的處理器中被使用。但是相比其它高速緩存結(jié)構(gòu),包容性高速緩存由于兩個原因造成其性能較低。第一個原因是由于數(shù)據(jù)在不同緩存中的復(fù)制,造成有效緩存空間減少。第二個原因是為了保證包容性,在末級緩存中排出一個高速緩存塊需要同時在內(nèi)部緩存中把該塊置為無效,這些為保證包容性而在內(nèi)部緩存中被無效的塊叫做包容性受害者。局部性通常用來表示一個塊被訪問的可能性,而由于內(nèi)部緩存過濾掉大部分訪問的局部性,包容性受害者有可能在內(nèi)部緩存中局部性很好,對它們的下次訪問會在所有緩存中失效從而影響性能?,F(xiàn)有的末級高速緩存管理策略主要有如下兩方面包容性高速緩存的管理策略以及互斥性和非包容性高速緩存的管理策略。包容性高速緩存管理策略為減少包容性受害者,全局替換策略(GlobalReplacement)把內(nèi)部緩存中的命中暴露給末級緩存。在內(nèi)部緩存命中時,內(nèi)部緩存用一個消息通知末級緩存更新命中塊在末級緩存中的替換狀態(tài)。Fletcher等人提出了三種減少直接相聯(lián)包容性末級緩存的包容性受害者的方法一是增加緩存的相聯(lián)度;二是使用一個受害者緩存;三是放松對包容性的要求,加入一個一致性過濾器。Jaleel等人提出了三種改進(jìn)包容性末級緩存性能的方法時間局部性提示方法(Temporal Locality Hint, TLH)通過發(fā)出局部性暗示信息來把內(nèi)部緩存中的局部性信息通知末級緩存;提前無效方法(Early Core Invalidation, ECI)通過提前無效內(nèi)部緩存中的塊來得到該塊的局部性信息;基于查詢的選擇方法(Query Based Selection, QBS)通過查詢內(nèi)部緩存來得到局部性信息?;コ庑院头前菪愿咚倬彺婀芾聿呗詣討B(tài)插入算法(DynamicInsertionPolicy, DIP)通過把局部性差的塊的插入最近最少使用(Least Recently Use,LRU)位置來避免緩存的顛簸。再訪問插入預(yù)測(Re-Reference InsertionPrediction,RRIP)通過區(qū)分在緩存中被訪問過的塊和沒被訪問過的塊,使得前者在緩存中停留的時間更長來改善性能。偽后進(jìn)先出(Pseudo-Last-1n-First-Out, Pseudo-LIFO)通過優(yōu)先排出棧頂端的塊,使得棧低端的塊被保存的時間更長?;诤灻拿蓄A(yù)測(Signature-basedHitPredictor, SHiP)通過預(yù)測塊的重用距離來在RRIP的基礎(chǔ)上改善性能。死亡塊預(yù)測技術(shù)通過預(yù)測一個塊的最后一次訪問來提高性能。基于預(yù)測的方法,死亡塊預(yù)測技術(shù)可以分為基于蹤跡的、基于時間的和基于計數(shù)器的。合并連續(xù)訪問方法通過對連續(xù)的訪問進(jìn)行預(yù)測來提高準(zhǔn)確率?;诓蓸拥乃劳鰤K預(yù)測方法通過采樣一部分訪問來訓(xùn)練預(yù)測器,從而減少硬件開銷和提高預(yù)測準(zhǔn)確率。旁路方法通過預(yù)測并旁路那些在被排出之前沒被使用的塊來提高性能。根據(jù)預(yù)測的方法可以分為基于程序計數(shù)器(Program Counter,PC)的和基于地址的。較少再用過濾器(Less Reused Filter,LRF)通過既使用基于PC的又使用基于地址的預(yù)測器來提高性能。使用自適應(yīng)旁路的分段替換(Dueling Segmented replacement with adaptive Bypassing,D SB)在失效時記錄進(jìn)入塊和排出塊的對,通過比較它們被訪問的順序來決定旁路的使用概率。Gaur等人提出了一個針對互斥性末級高速緩存的旁路和插入方法。以上這些方法要么是針對互斥性和非包容性高速緩存的,要么只專注于減少包容性高速緩存的包容性受害者而無法進(jìn)一步提高性能。本發(fā)明旨在提出一種在需要較少的硬件開銷的可以提高包容性末級高速緩存性能的管理策略。
發(fā)明內(nèi)容
為了在不犧牲包容性末級高速緩存一致性協(xié)議簡單的優(yōu)點(diǎn)的情況下,提高包容性末級緩存的性能,本發(fā)明提供一種針對包容性末級高速緩存的替換方法。為了解決上述技術(shù)問題,本發(fā)明提供了一種針對包容性末級高速緩存的替換方法,包括A、在一個高速緩存塊進(jìn)入末級高速緩存時,預(yù)測所述進(jìn)入塊的局部性,如果預(yù)測結(jié)果為所述高速緩存塊的局部性差,則將所述高速緩存塊放入高排出優(yōu)先級列表中,否則將所述高速緩存塊放入低排出優(yōu)先級列表中;所述高排出優(yōu)先級列表為末級高速緩存中所有局部性差的高速緩存塊的列表;所述低排出優(yōu)先級列表為末級高速緩存中所有局部性好的高速緩存塊的列表;B、在替換時,檢測高排出優(yōu)先級列表中的高速緩存塊,將不在內(nèi)部高速緩存中的一個高排出優(yōu)先級列表中的高速緩存塊作為受害者替換出末級高速緩存;C、等待下一個聞速緩存塊進(jìn)入末級聞速緩存,返回步驟A。進(jìn)一步地,步驟B中將不在內(nèi)部高速緩存中的一個高排出優(yōu)先級列表中的高速緩存塊作為受害者替換出末級高速緩存的方法為隨機(jī)替換方法、非最近使用替換方法、最近最少使用替換方法中的一種。進(jìn)一步地,步驟B還包括如果所有高排出優(yōu)先級列表中的高速緩存塊都在內(nèi)部高速緩存中,則檢測低排出優(yōu)先級列表中的高速緩存塊,將不在內(nèi)部高速緩存中的一個低排出優(yōu)先級列表中的高速緩存塊作為受害者替換出末級高速緩存。進(jìn)一步地,步驟A中,預(yù)測進(jìn)入塊的局部性的方法為根據(jù)進(jìn)入塊和排出塊的訪問順序判斷進(jìn)入塊的局部性。進(jìn)一步地,如果進(jìn)入塊被先訪問,則進(jìn)入塊的局部性好;如果排出塊被先訪問,則進(jìn)入塊局部性差;如果進(jìn)入塊沒被使用就被排出,則進(jìn)入塊局部性差。進(jìn)一步地,步驟B中,通過向內(nèi)部高速緩存發(fā)送查詢信息來獲得所述高速緩存塊是否在內(nèi)部高速緩存中。進(jìn)一步地,確定受害者的方法為
按照高排出優(yōu)先級列表或者低排出優(yōu)先級列表從第一個物理路到最后一個物理路的順序確定一個受:害者。進(jìn)一步地,在替換時,設(shè)置一個最大查詢閾值,如果查詢信息的數(shù)量大于所述閾值,則把高排出優(yōu)先級列表中的下一個高速緩存塊或者低排出優(yōu)先級列表中的下一個高速緩存塊作為受害者,不在發(fā)送查詢信息查詢所述下一個高速緩存塊是否在內(nèi)部高速緩存中。進(jìn)一步地,所述閾值為2。與現(xiàn)有技術(shù)相比,本發(fā)明的替換方法對于局部性差的塊,如果它們不再在內(nèi)部緩存中,則會被排出末級高速緩存,在縮短局部性差的塊的壽命的同時又不會引起包容性受害者,因此可以有效提高包容性末級高速緩存的性能,并且只需要很少的硬件開銷和設(shè)計修改。
圖1為本發(fā)明實(shí)施例的用于實(shí)現(xiàn)包容性末級高速緩存替換的結(jié)構(gòu)示意圖;圖2為本發(fā)明實(shí)施例的針對包容性末級高速緩存的替換方法的流程圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。本發(fā)明提出的包容性高速緩存替換策略叫做“TEP” (Two-levelEvictionPriority)。為了避免產(chǎn)生包容性受害者,一個高速緩存塊在其在內(nèi)部緩存中的局部性被耗盡之前都不應(yīng)該從末級緩存中排出。為了提高性能,在末級緩存中局部性差的塊應(yīng)該停留盡可能短的時間以把空間留給局部性好的塊。為達(dá)到上述兩個目的,TEP給每個塊分配一個排出優(yōu)先級位(EPB)來表示其在末級緩存中的局部性。當(dāng)一個塊被帶入末級緩存時,一個局部性識別方法被用來識別該塊的局部性并相應(yīng)地設(shè)置它的EPB。如圖1和圖2所示,一種針對包容性末級高速緩存的替換方法,其特征在于,包括A、在一個高速緩存塊進(jìn)入末級高速緩存時,預(yù)測所述進(jìn)入塊的局部性,如果預(yù)測結(jié)果為所述高速緩存塊的局部性差,則將所述高速緩存塊放入高排出優(yōu)先級列表中,否則將所述高速緩存塊放入低排出優(yōu)先級列表中;所述高排出優(yōu)先級列表為末級高速緩存中所有局部性差的高速緩存塊的列表;所述低排出優(yōu)先級列表為末級高速緩存中所有局部性好的高速緩存塊的列表;B、在替換時,檢測高排出優(yōu)先級列表中的高速緩存塊,將不在內(nèi)部高速緩存中的一個高排出優(yōu)先級列表中的高速緩存塊作為受害者替換出末級高速緩存;C、等待下一個聞速緩存塊進(jìn)入末級聞速緩存,返回步驟A。TEP可以和任意基礎(chǔ)替換算法聯(lián)合在一起使用,其中包括但不限于非最近使用算法(Not Recently Used, NRU)、最近最少使用算法(Least RecentlyUsed, LRU)。
其中NRU給每個高速緩存塊增加一位最近使用位,當(dāng)一個塊被訪問時該高速緩存塊的最近使用位置I。在替換時,如果有受害者候選高速緩存塊的最近使用位為0,則選擇這樣的高速緩存塊作為受害者;否則如果所有受害者候選高速緩存塊的最近使用位都為1,則把所有受害者候選高速緩存塊的最近使用位都置為0,再選擇一個最近使用位為O的塊作為受害者。LRU記錄各個替換候選高速緩存塊的訪問順序,在替換時選擇上次訪問距離現(xiàn)在時間最長的高速緩存塊作為受害者排出末級高速緩存塊的訪問順序,在替換時選擇上次訪問距離現(xiàn)在時間最長的高速緩存塊作為受害者排出末級高速緩存。步驟B還包括如果所有高排出優(yōu)先級列表中的高速緩存塊都在內(nèi)部高速緩存中,則檢測低排出優(yōu)先級列表中的高速緩存塊,將不在內(nèi)部高速緩存中的一個低排出優(yōu)先級列表中的高速緩存塊作為受害者替換出末級高速緩存。步驟A中,預(yù)測進(jìn)入塊的局部性的方法為根據(jù)進(jìn)入塊和排出塊的訪問順序判斷進(jìn)入塊的局部性。如果進(jìn)入塊被先訪問,則進(jìn)入塊的局部性好;如果排出塊被先訪問,則進(jìn)入塊局部性差;如果進(jìn)入塊沒被使用就被排出,則進(jìn)入塊局部性差。步驟B中,通過向內(nèi)部高速緩存發(fā)送查詢信息來獲得所述高速緩存塊是否在內(nèi)部高速緩存中。確定受害者的方法為按照高排出優(yōu)先級列表或者低排出優(yōu)先級列表從第一個物理路到最后一個物理路的順序確定一個受:害者。在替換時,設(shè)置一個最大查詢閾值,如果查詢信息的數(shù)量大于所述閾值,則把高排出優(yōu)先級列表中的下一個高速緩存塊或者低排出優(yōu)先級列表中的下一個高速緩存塊作為受害者,不在發(fā)送查詢信息查詢所述下一個高速緩存塊是否在內(nèi)部高速緩存中。所述閾值為2。實(shí)施例步驟A中,如果預(yù)測該塊的局部性好,則把EPB置為I ;如果預(yù)測該塊局部性差,則把EPB置為O。在失效時,首先檢查所有EPB為O的塊。TEP按照從第一個物理路到最后一個物理路的順序從EPB為O的塊中選擇一個受害者候選者,然后判斷這個塊是否在內(nèi)部緩存中,如果不在,這個塊就被選擇為受害者。否則繼續(xù)選擇下一個塊直到找到符合要求的塊。如果不存在EPB為O且不在內(nèi)部緩存中的塊,則檢查剩下的EPB為I的塊。使用基本替換算法提供第二層優(yōu)先級,在EPB為I的塊中選擇一個受害者候選者。如果這個塊在內(nèi)部緩存中,則把該塊更新到LRU位置,并繼續(xù)選擇下一個受害者候選者直到找到符合要求的塊。通過這樣做,對于局部性差的塊(即EPB為O的塊),一旦它們不再在內(nèi)部緩存中,它們就會被排出緩存。因此在縮短局部性差的塊的壽命的同時又不會引起包容性受害者。而對于局部性好的塊(即EPB為I的塊),它們只有在所有EPB為O的塊都在內(nèi)部緩存中時才會被選擇替換出緩存。因此它們可以在末級緩存中停留更長的時間來改善性能。為得知一個塊是否在內(nèi)部緩存中,當(dāng)TEP選擇出一個受害者候選者時,末級緩存向內(nèi)部緩存發(fā)送該塊的地址以詢問其是否在內(nèi)部緩存中,內(nèi)部緩存在其中查找該塊并相應(yīng)的返回相應(yīng)。為了避免額外增加過多的查詢信息,在每次替換時設(shè)置一個最大可以發(fā)送的查詢信息的閾值。如果當(dāng)前查詢信息的數(shù)量已經(jīng)達(dá)到了閾值,則TEP就把下一個受害者候選者作為受害者而不發(fā)送查詢信息。一般情況下在2條查詢信息內(nèi)就可以找到一個符合要求的受害者,因此閾值可以設(shè)定為2。TEP 主要使用 Replacement History Table (RHT)和 LocalityPredictionTable (LPT)兩個結(jié)構(gòu)來學(xué)習(xí)和預(yù)測一個塊的局部性。RHT :該結(jié)構(gòu)被用來記錄每次失效時的進(jìn)入塊和排出塊對,并且同時記錄進(jìn)入塊對應(yīng)的指令計數(shù)器(PC)。然后通過比較這個兩個塊的訪問順序來判斷進(jìn)入塊的局部性如果進(jìn)入塊先于排出塊被訪問,則說明進(jìn)入塊的局部性好(條件一);如果排出塊先于進(jìn)入塊被訪問,則說明進(jìn)入塊的局部性差(條件二);如果進(jìn)入塊未被訪問就被排出,則說明進(jìn)入塊的局部性差(條件三)。第一條和第三條易于理解,因?yàn)樵诰彺嬷斜辉L問過的塊被認(rèn)為具有良好的局部性,而在緩存中沒有被重用過的塊局部性較差。第二條的原理是排出塊被認(rèn)為是緩存中局部性最差的塊,如果排出塊在進(jìn)入塊之前被訪問,那么說明進(jìn)入塊的局部性比排出塊還要差,因此們在這種情況下認(rèn)為進(jìn)入塊的局部性不好。實(shí)際中可以使用I個128項(xiàng)、8路組相聯(lián)的RHT。LPT :該結(jié)構(gòu)是一個使用PC索引的飽和計數(shù)器表。它被用于學(xué)習(xí)和預(yù)測對每個PC訪問的數(shù)據(jù)的局部性。當(dāng)RHT中一個被記錄項(xiàng)的進(jìn)入塊的局部性被學(xué)習(xí)到之后,使用被記錄的PC索引到LPT的一項(xiàng)。如果學(xué)習(xí)到該塊局部性好,則計數(shù)器加1,否則計數(shù)器減I。在失效時,用當(dāng)前失效塊的PC來查詢LPT以預(yù)測它的局部性。如果該塊對應(yīng)的計數(shù)器大于等于0,則預(yù)測該塊局部性好,否則預(yù)測該塊局部性差。在每次訪問中,首先在RHT中檢查條件一和條件二是否被滿足,并相應(yīng)的更新LPT0如果該次訪問失效,則在RHT中檢查排出塊是否滿足條件三。然后RHT決定是否記錄該次失效。由于RHT只有128項(xiàng),因此只在RHT中有無效項(xiàng)或一個很小的概率發(fā)生時才記錄失效。最后根據(jù)相應(yīng)的PC索引的計數(shù)器的值,來設(shè)置該塊對應(yīng)的EPB。以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非限制,僅僅參照較佳實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)說明。本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍,均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1.一種針對包容性末級高速緩存的替換方法,其特征在于,包括 A、在一個高速緩存塊進(jìn)入末級高速緩存時,預(yù)測所述進(jìn)入塊的局部性,如果預(yù)測結(jié)果為所述高速緩存塊的局部性差,則將所述高速緩存塊放入高排出優(yōu)先級列表中,否則將所述高速緩存塊放入低排出優(yōu)先級列表中; 所述高排出優(yōu)先級列表為末級高速緩存中所有局部性差的高速緩存塊的列表; 所述低排出優(yōu)先級列表為末級高速緩存中所有局部性好的高速緩存塊的列表; B、在替換時,檢測高排出優(yōu)先級列表中的高速緩存塊,將不在內(nèi)部高速緩存中的一個高排出優(yōu)先級列表中的高速緩存塊作為受害者替換出末級高速緩存; C、等待下一個高速緩存塊進(jìn)入末級高速緩存,返回步驟A。
2.如權(quán)利要求1所述的替換方法,其特征在于 步驟B中將不在內(nèi)部高速緩存中的一個高排出優(yōu)先級列表中的高速緩存塊作為受害者替換出末級高速緩存的方法為 隨機(jī)替換方法、非最近使用替換方法、最近最少使用替換方法中的一種。
3.如權(quán)利要求1所述的替換方法,其特征在于 步驟B還包括 如果所有高排出優(yōu)先級列表中的高速緩存塊都在內(nèi)部高速緩存中,則檢測低排出優(yōu)先級列表中的高速緩存塊,將不在內(nèi)部高速緩存中的一個低排出優(yōu)先級列表中的高速緩存塊作為受害者替換出末級高速緩存。
4.如權(quán)利要求1所述的替換方法,其特征在于步驟A中,預(yù)測進(jìn)入塊的局部性的方法為根據(jù)進(jìn)入塊和排出塊的訪問順序判斷進(jìn)入塊的局部性。
5.如權(quán)利要求4所述的替換方法,其特征在于如果進(jìn)入塊被先訪問,則進(jìn)入塊的局部性好;如果排出塊被先訪問,則進(jìn)入塊局部性差;如果進(jìn)入塊沒被使用就被排出,則進(jìn)入塊局部性差。
6.如權(quán)利要求1所述的替換方法,其特征在于步驟B中,通過向內(nèi)部高速緩存發(fā)送查詢信息來獲得所述高速緩存塊是否在內(nèi)部高速緩存中。
7.如權(quán)利要求1至3任一權(quán)利要求所述的替換方法,其特征在于 確定受害者的方法為 按照高排出優(yōu)先級列表或者低排出優(yōu)先級列表從第一個物理路到最后一個物理路的順序確定一個受害者。
8.如權(quán)利要求6所述的替換方法,其特征在于在替換時,設(shè)置一個最大查詢閾值,如果查詢信息的數(shù)量大于所述閾值,則把高排出優(yōu)先級列表中的下一個高速緩存塊或者低排出優(yōu)先級列表中的下一個高速緩存塊作為受害者,不在發(fā)送查詢信息查詢所述下一個高速緩存塊是否在內(nèi)部高速緩存中。
9.如權(quán)利要求8所述的替換方法,其特征在于所述閾值為2。
全文摘要
一種針對包容性末級高速緩存的替換方法,涉及處理器中包容性末級高速緩存的替換方法,在不犧牲包容性末級高速緩存一致性協(xié)議簡單的優(yōu)點(diǎn)的情況下,提高包容性末級緩存的性能,所述替換方法,包括在一個高速緩存塊進(jìn)入末級高速緩存時,預(yù)測所述進(jìn)入塊的局部性,如果預(yù)測結(jié)果為所述高速緩存塊的局部性差,則將所述高速緩存塊放入高排出優(yōu)先級列表中,否則將所述高速緩存塊放入低排出優(yōu)先級列表中;在替換時,檢測高排出優(yōu)先級列表中的高速緩存塊,將不在內(nèi)部高速緩存中的一個高排出優(yōu)先級列表中的高速緩存塊作為受害者替換出末級高速緩存。本發(fā)明可以有效提高包容性末級高速緩存的性能,并且只需要很少的硬件開銷和設(shè)計修改。
文檔編號G06F12/12GK103049399SQ20121059370
公開日2013年4月17日 申請日期2012年12月31日 優(yōu)先權(quán)日2012年12月31日
發(fā)明者程旭, 李凌達(dá), 佟冬, 謝子超, 陸俊林 申請人:北京北大眾志微系統(tǒng)科技有限責(zé)任公司