,就發(fā)出預取命令。在圖1lB的示例中,可以將預取閾值設定為2,如果內存地址A所對應的緩存線有兩個“局部使用標識位”為一,就發(fā)出對A+128,A+256等的內存地址的預取命令。
[0090]預取的參數可以和“局部使用標識位”的記錄情況相關聯(lián)。比如,預取的長度,也就是預取多少個內存字節(jié),可以是“局部使用標識位”中為一的標志位的狀態(tài)的一個函數。如果一個緩存線的“局部使用標識位”中為一的數目多,可以更加“激進”地預取,預取更多的字節(jié)。如果一個緩存線的“局部使用標識位”中為一的數目少,則預取少一點的字節(jié)。
[0091]除了利用“局部使用標識位”進行順序預取,還可以利用“局部使用標識位”的信息發(fā)出其他類型的預取命令,比如間隔預取(Stride Prefetch)和基于歷史的預取(PrefetchBased On History-Buffer)?!熬植渴褂脴俗R位”提供了一個關于某地址區(qū)間的使用情況的很好的時機,可以被使用在各種預取方法中。
[0092]防止WLRU替換算法的“過殺傷”的設計。相比于LRU替換算法,WLRU替換算法能夠更快地將不會被再次使用的地址替換出緩存。這是為什么WLRU替換算法相比于LRU替換算法對于數據量大的應用有更好的表現的原因。但是,對于某些應用,特別是當緩存的容量較小時,WLRU有可能過快地將新的緩存內容在其被再次訪問之前替換出緩存,從而造成更多的緩存失誤。這是WLRU替換算法的“過殺傷(Over Killing)”現象。
[0093]在WLRU替換算法中,被命中過的緩存線,也就是命中Hit標識位被置I的緩存線,在替換時比剛剛裝入緩存的緩存線(其命中Hit標識位為O)有更高的優(yōu)先級。限制緩存中命中Hit標識位為I的緩存線的數目,可以使得新裝入的緩存線被替換掉的幾率降低,使新裝入的緩存線能夠停留更長時間,從而緩解WLRU替換算法的“過殺傷”現象。
[0094]圖12描述了一種防止WLRU替換算法過殺傷的設計。圖12的示例為一個16路組相關(16 way set associative)緩存,每一個組共16條緩存線。此設計使用一個計數器1210監(jiān)測緩存組中命中Hit標志位已經置I的緩存線的數目。當計數器1210的值超過某一閾值,比如13,則清零緩存線的命中Hit標識位??梢允侨壳辶闼芯彺婢€的命中Hit標識位,也可以只清零一部分緩存線的命中Hit標識位。計數器1210也可以監(jiān)控緩存組中命中Hit標識位未置I的緩存線數目,如果未置I的緩存線的數目低于閾值,比如3,則將緩存組中全部或者部分緩存線的命中Hit標識位清零。這個閾值可以是預先設定或者根據應用程序的特征動態(tài)設定的。
[0095]為了降低計數器的加法電路難度,在圖12的示例中,也可以把16條緩存線劃分兩個或者多個子集,比如緩存線O到緩存線7為一個子集,緩存線8到緩存線15為一個子集,分別計算子集中的命中Hit標識位為I的緩存線的數目。如果子集的計數器超過一個閾值,則清零子集中全部或者部分的緩存線的命中Hit標識位。
[0096]采用組合邏輯電路的近似算法來計算命中Hit標識位為I的緩存線數目可以進一步地降低電路的復雜度并提高電路的計算速度。當組合邏輯電路的輸出為I時,開始清除緩存線的命中Hit標識位。由組合邏輯電路計算出的緩存中的命中Hit標識位為I的緩存線數目是近似的,不精確,但是其計算結果可以容忍。
[0097]圖13是另外一種比圖11更加簡單快速的防止WLRU替換算法“過殺傷”的電路設計。圖13中,無需計算緩存線的命中Hit標識位為I或者O的數目,而是簡單地使用一個“與(And)門”邏輯代替加法電路。一個“與門”連接任意一組緩存線的命中Hit標識位,如果這組緩存線的命中Hit標識位都為1,則“與門”輸出為I,此時全部或者部分清零這組緩存線的命中Hit標識位。圖13中的示例中,簡單起見,每四條緩存線的命中Hit標識位和一個“與門”連接。緩存線O到3的命中Hit標識位和“與門” 1320相連,緩存線12到15的命中Hit標識位和“與門” 1330相連。以“與門” 1320為例,如果緩存線O到3的命中Hit標識位都為1,則“與門” 1320輸出為1,此時,清零緩存線O到3的全部或部分命中Hit標識位。
[0098]在圖13的設計中,還可以增加與門的數目,比如,增加4個與門:緩存線0,4,8,12,連接到一個與門;緩存線1,5,9,13連接到第二個與門;緩存線2,6,10,14連接到第三個與門;緩存線3,7,11,15連接到第四個與門。當這些與門的輸出為I時,清除全部或者部分緩存線的命中Hit標識位。一般來講,根據應用程序的不同特征,清除命中Hit標識位的組合邏輯條件的設定可以在精確和電路復雜度之間找到平衡。
[0099]在上述過程中,清零緩存線的命中Hit標識位,可以全部清零,也可以只清零一部分,比如清零其中一半的緩存線。部分清零時,可以采用一個偽隨機的指針來確定要清零的緩存線。如果清零一半的緩存線,指針只需I位寬。當指針的值為零時,清零低半部分的緩存線的命中Hit標識位;指針的值為I時,清零編號在高半部分的緩存線的命中Hit標識位。在圖12的示例中,如果每次清零一半的緩存線,當指針為O時,清零緩存線O到7,指針為I時,清零緩存線8到15。每做一次清零動作后,指針的值翻轉,從O變?yōu)镮或者從I變?yōu)镺。
[0100]WLRU替換算法的防“過殺傷”設計可以保證新的緩存內容在緩存中能夠有適當的停留時間通過這段停留時間,WLRU替換算法可以有效地判斷緩存內容的價值,從而保留高價值的緩存內容,盡快地替換無價值的緩存內容。防止“過殺傷”設計的參數可以預先設定好的,也可以是根據應用程序的特征動態(tài)配置的。
[0101]如上所述,便可較好的實現本發(fā)明。
【主權項】
1.一種計算機緩存系統(tǒng)的管理方法,其特征在于:該緩存由多個緩存線構成,且每個緩存線包含多個數據字,同時每個緩存線按地址分成多個子集,每個子集對應一個或者多個數據字;每個子集設置一個或多個局部Sub-block標識位;當緩存查詢和填充等操作采用緩存線子集對應的地址的粒度時,根據緩存線子集對應的地址粒度記錄緩存線相應子集的狀態(tài)和歷史信息,并將信息保存在該子集對應的局部Sub-block標識位中; 同時,每個緩存線子集設置一個局部使用Sub-block Used標識位;整個緩存線設置一個或多個全局標識位,其管理步驟如下: 當緩存線第一次裝入緩存時,除了正在訪問的地址所對應的子集的局部使用Sub-block Used標識位置1,其他子集的局部使用Sub-block Used標識位置O ; 當緩存線在緩存中命中時,如果命中的地址所對應的子集的局部使用Sub-block Used標識位為0,則置I ;如果命中的地址所對應的子集的局部使用Sub-block Used標識位已經為1,則改變全局標識位。2.根據權利要求1所述的一種計算機緩存系統(tǒng)的管理方法,其特征在于,每個緩存線中都有一個全局命中Global Hit標識位,其管理步驟如下: 當緩存線第一次裝入緩存時,全局命中Global Hit標識位置為0,除了正在訪問的地址所對應的子集的局部使用Sub-block Used標識位置1,其他子集的局部使用Sub-blockUsed標識位置O ; 當緩存線在緩存中命中時,如果命中的地址所對應的子集的局部使用Sub-block Used標識位為0,則置I ;如果命中的地址所對應的子集的局部使用Sub-block Used標識位已經為1,則置全局命中Global Hit標識位為I ; 替換時,首先替換全局命中Global Hit標識位為O的緩存線,后替換全局命中GlobalHit標識位為I的緩存線。
【專利摘要】本發(fā)明公開了一種計算機緩存系統(tǒng)的管理方法,其特征在于:該緩存由多個緩存線構成,且每個緩存線包含多個數據字,同時每個緩存線按地址分成多個子集,每個子集對應一個或者多個數據字;每個子集設置一個或多個局部Sub-block標識位;當緩存查詢和填充等操作采用緩存線子集對應的地址的粒度時,根據緩存線子集對應的地址粒度記錄緩存線相應子集的狀態(tài)和歷史信息,并將信息保存在該子集對應的局部Sub-block標識位中。本發(fā)明能確保CPU系統(tǒng)具有指令和數據的預取能力,能在指令和數據被真實使用前,提前發(fā)出請求從內存或者其他存儲機構將指令和數據取回到CPU中,能顯著的提高運算速度。
【IPC分類】G06F12/08
【公開號】CN105005537
【申請?zhí)枴緾N201510497721
【發(fā)明人】鄒陽, 王去非
【申請人】廣州優(yōu)倍達信息科技有限公司
【公開日】2015年10月28日
【申請日】2015年8月13日