專利名稱:用于程序員控制的超高速緩沖存儲器線回收策略的方法
技術(shù)發(fā)明領(lǐng)域發(fā)明的領(lǐng)域一般涉及計算機系統(tǒng)并且,更準(zhǔn)確地說,并非僅僅涉及支持程序員-控制器超高速緩沖存儲器線回收策略的技術(shù)。
背景技術(shù):
通用處理器一般包括相關(guān)的高速緩沖存儲器,其作為它們被安裝于其中的系統(tǒng)的存儲器分級體系的一部分。所述高速緩沖存儲器是一個小的快速存儲器,其接近于處理器核心并且可能被組織為不同的級別。例如,現(xiàn)代的微處理器在芯片上一般采用第一級(L1)和第二級(L2)兩種高速緩沖存儲器,其中第一級的高速緩沖存儲器較小并且較快(并且接近于核心),而第二級高速緩沖存儲器較大并且較慢。高速緩存通過使用空間局部性(在鄰近于已存取位置的相鄰地址的存儲單元也很可能被存取)和時間局部性(已經(jīng)被存取的存儲單元很可能又被存取)的性質(zhì)來保持必需的數(shù)據(jù)和指令接近于處理器核心,這樣減少了存儲器存取的等待時間,有益于處理器上的應(yīng)用程序性能。
通常,存在三種類型的全部的高速緩存模式(包括用于實現(xiàn)各種模式的各種技術(shù))。這些包括直接映射的高速緩沖存儲器,全相聯(lián)高速緩沖存儲器,和N路組相聯(lián)高速緩沖存儲器。在直接映射的高速緩沖存儲器下,每個存儲單元被映射到與其它高速緩沖存儲器共享的單一的超高速緩沖存儲器線;共享這條線的許多地址中只有一個能夠在某一給定時間使用它。這在原理和實現(xiàn)都是最簡單的技術(shù)。在這種高速緩存模式下,檢查高速緩沖存儲器命中的電路是快速地并且便于設(shè)計的,但是由于它的不可變更性,命中率與其它的設(shè)計相比相對較差。
在全相聯(lián)高速緩沖存儲器下,任何存儲單元能夠在任何超高速緩沖存儲器線中被高速緩存。當(dāng)檢查命中時這是最復(fù)雜的技術(shù)并且需要復(fù)雜的檢索算法。因為這個,所以它能夠?qū)е抡麄€的高速緩存被減速,但是它提供了最好的理論上的命中率,因為對于高速緩存任何存儲器地址存在那么多的選擇。
n路組相聯(lián)高速緩沖存儲器兼?zhèn)淞酥苯佑成浜腿嗦?lián)高速緩沖存儲器兩方面。借助這種方法,高速緩沖存儲器的每個被分為N條線的組(例如,n=2,4,8,等等),并且任何存儲器地址可以被高速緩存在那些n條線中的任何一條中。實際上,超高速緩沖存儲器線的組邏輯上被劃分成為n組。這樣改善了用直接映射的高速緩沖存儲器的命中率,但是沒有導(dǎo)致嚴(yán)重的檢索損失(因為n保持很小)。
總的說來,隨著時間的過去,高速緩沖存儲器被設(shè)計成加速存儲器的存取操作。對于通用處理器,這規(guī)定高速緩存模式相當(dāng)好的為各種類型的應(yīng)用程序工作,但是也許例外地不為任何單個的應(yīng)用程序工作。也存在一些對影響高速緩存模式的性能的考慮。一些方面,例如尺寸和存取等待時間,受到成本和處理的局限性的限制。例如,較大的高速緩沖存儲器是昂貴的,因為它們使用非常大數(shù)量的晶體管并且從半導(dǎo)體尺寸和產(chǎn)量減少這兩個角度來說制造就更加的昂貴。存取等待時間通常由制造技術(shù)和處理器核心和/或高速緩存的時鐘頻率決定(當(dāng)為每個使用不同的時鐘頻率時)。
另一個重要考慮是高速緩沖存儲器的回收。為了增加新的數(shù)據(jù)和/或指令到高速緩沖存儲器,一個或多個超高速緩沖存儲器線被分配。如果高速緩沖存儲器滿了(正常地這種情況在啟動操作之后),相同數(shù)目的現(xiàn)有的超高速緩沖存儲器線必須被回收。一般地回收策略包括隨機的,最近最少使用的(LRU)和偽LRU。借助現(xiàn)行辦法,通過由高速緩存控制器硬件執(zhí)行的相應(yīng)的算法執(zhí)行分配和回收策略。這導(dǎo)致不可改變的回收策略,其可能對于某種類型的應(yīng)用程序是很適合的,同時為其它類型的應(yīng)用程序提供較差的性能,在其中高速緩存性能水平取決于應(yīng)用程序代碼的結(jié)構(gòu)。
通過參考下列詳細(xì)說明的同時連同附圖一起理解,本發(fā)明的上述方面和許多伴隨的優(yōu)點將變得更加容易領(lǐng)會因為相同的變得更好理解,其中整個各種視圖中同樣的參考數(shù)字涉及同樣的部分,除非另作說明附圖1是舉例說明一個被使用在現(xiàn)代的計算機系統(tǒng)中的一般的存儲器等級的示意圖;附圖2是舉例說明在傳統(tǒng)的高速緩沖存儲器處理期間執(zhí)行的操作的流程圖;附圖3a是舉例說明在高速緩沖存儲器處理下執(zhí)行的操作和邏輯的流程圖,所述高速緩沖存儲器處理支持高速緩沖存儲器回收策略的程序設(shè)計的控制,其中根據(jù)本發(fā)明的一個實施例高速緩沖存儲器被劃分成為高的和低的優(yōu)先級的存儲池;附圖3b是舉例說明在高速緩沖存儲器處理下執(zhí)行的操作和邏輯的流程圖,所述高速緩沖存儲器處理支持高速緩沖存儲器回收策略的程序設(shè)計的控制,其中根據(jù)本發(fā)明的一個實施例,高速緩沖存儲器被劃分成為具有各自的優(yōu)先等級的多個優(yōu)先級存儲池;附圖4是舉例說明在程序設(shè)計、代碼生成和運行時間階段期間執(zhí)行的操作的流程圖,其中程序員能夠識別已經(jīng)按優(yōu)先次序高速緩存的部分應(yīng)用程序,并且根據(jù)本發(fā)明的一個實施例,按優(yōu)先次序列出的高速緩存的這種識別的部分在執(zhí)行生成的程序機器代碼期間被執(zhí)行;附圖5a是一個舉例說明示范性的編譯指示聲明的偽代碼列表,根據(jù)本發(fā)明的一個實施例該編譯指示聲明通常用于描繪被分配一個高的高速緩沖存儲器優(yōu)先等級的部分代碼;附圖5b是一個舉例說明示范性的編譯指示聲明的偽代碼列表,根據(jù)本發(fā)明的一個實施例該編譯指示聲明通常用于描繪被分配了多個高速緩沖存儲器優(yōu)先等級的部分代碼;附圖6是一個在程序設(shè)計,代碼生成和運行時間階段期間執(zhí)行的操作的流程圖,其中根據(jù)本發(fā)明的一個實施例,源程序代碼的存儲器存取模式被監(jiān)視以確定適合于按優(yōu)先次序列高速緩存的部分代碼,并且這種部分被手動地或自動地標(biāo)明并且源代碼被再編譯以包括用于影響按優(yōu)先次序高速緩存的操作的替換操作碼;附圖7a是一個4路組相聯(lián)高速緩存結(jié)構(gòu)的示意圖,在該結(jié)構(gòu)下超高速緩沖存儲器線組中的一個被分配到一個高優(yōu)先級存儲池,同時超高速緩沖存儲器線的剩余組被分配到一個低優(yōu)先級存儲池;附圖7b是舉例說明附圖7a的各種高速緩存結(jié)構(gòu)的示意圖,其中超高速緩沖存儲器線的每組被分配一個各自的具有不同優(yōu)先等級的存儲池;附圖8a是一個全相聯(lián)高速緩沖存儲器結(jié)構(gòu)的示意圖,在該結(jié)構(gòu)下經(jīng)由一個存儲池優(yōu)先位超高速緩沖存儲器線被分配一個高的-或低的優(yōu)先級存儲池;附圖8b是一個全相聯(lián)高速緩沖存儲器結(jié)構(gòu)的示意圖,在該結(jié)構(gòu)下使用多位存儲池標(biāo)識符將超高速緩沖存儲器線分配m優(yōu)先級中的一個;
附圖8c是舉例說明附圖8b的所述高速緩存結(jié)構(gòu)的可選結(jié)構(gòu)的示意圖,其中使用一個MESI(修改排除共享以及無效)協(xié)議;以及附圖9是舉例說明示范性的計算機系統(tǒng)和處理器的示意圖,在其上在此描述的高速緩存結(jié)構(gòu)實施例可以被實現(xiàn)。
具體實施例方式
用于啟動程序員控制的超高速緩沖存儲器線回收策略的方法和裝置的實施例在這里被描述。在下面的描述中,許多特定的細(xì)節(jié)被闡明以提供一個對本發(fā)明的實施例徹底的了解。然而,相關(guān)領(lǐng)域中的一個普通技術(shù)人員照理應(yīng)該認(rèn)識到本發(fā)明可以在沒有一個或多個特定細(xì)節(jié)的情況下或使用其它方法,元件,材料,等等實現(xiàn)。在其它情況中,眾所周知的結(jié)構(gòu),材料,或操作沒有顯示或詳細(xì)描寫以避免本發(fā)明的各方面模糊。
整個說明書中涉及″一個實施例″或″實施例″意味著與本實施例結(jié)合描述的一個特殊的特征,結(jié)構(gòu),或特性被包括在本發(fā)明的至少一個實施例中。因此,在貫穿整個說明書的不同地方的短語″在一個實施例中″或″在實施例中″的出現(xiàn)不一定全部指的是相同的實施例。此外,特殊的特征,結(jié)構(gòu),或特性可以在一個或多個實施例中以任何適當(dāng)?shù)姆绞奖唤Y(jié)合。
一般的存儲器分級體系模型在附圖1中示出。在分級結(jié)構(gòu)的頂端是在處理器101中的處理器寄存器100,其用于存儲由處理核心使用的臨時數(shù)據(jù),例如操作數(shù),指令操作碼,處理結(jié)果,等等。在下一級的是硬件高速緩沖存儲器,其通常包括至少一個L1高速緩沖存儲器102,并且一般還包括一個L2高速緩沖存儲器104。一些處理器也提供集成的3級(L3)高速緩沖存儲器105。這些高速緩沖存儲器被耦合到系統(tǒng)存儲器106(經(jīng)由高速緩存控制器),其一般包括某種形式的基于存儲器的DRAM-(動態(tài)隨機存取存儲器)。依次,所述系統(tǒng)存儲器用于儲存通常從一個或多個諸如磁盤驅(qū)動器的本地大容量存儲設(shè)備108中檢索的數(shù)據(jù),和/或在一個備份存儲器(例如,磁帶驅(qū)動器)上或經(jīng)由網(wǎng)絡(luò)存儲的數(shù)據(jù),正如由磁帶/網(wǎng)絡(luò)110所描繪的一樣。
許多新的處理器更進一步的使用廢棄物高速緩沖存儲器(或廢棄物緩沖器)112,其用來儲存最近從L1高速緩沖存儲器中回收的數(shù)據(jù)。借助這種結(jié)構(gòu),回收的數(shù)據(jù)(廢棄物)首先被移到廢棄物緩沖器(victim cache)中,然后到L2高速緩沖存儲器中。廢棄物高速緩沖存儲器使用專有的高速緩存結(jié)構(gòu),其中僅僅由不同的處理器高速緩存級保持特殊的超高速緩沖存儲器線的一個復(fù)本。
正如由對于所述分級結(jié)構(gòu)的每一級示范性的容量和存取時間信息所描繪的,所述靠近分級結(jié)構(gòu)頂端的存儲器具有較快的存取和較小的尺寸,同時朝著分級結(jié)構(gòu)底部方向的存儲器具有大的多的尺寸和較慢的存取。此外,所述存儲器類型的每存儲單元(字節(jié))的成本大約與存取時間成反比,并且寄存器存儲器是最昂貴的,磁帶/網(wǎng)絡(luò)存儲器是最便宜的??紤]到這些屬性和有關(guān)的性能標(biāo)準(zhǔn),計算機系統(tǒng)一般被設(shè)計成能均衡成本與性能。例如,一般的臺式計算機可能使用具有16千字節(jié)的L1高速緩沖存儲器,256千字節(jié)的L2高速緩沖存儲器的處理器,和具有512兆字節(jié)的系統(tǒng)存儲器的處理器。相反,一個高性能服務(wù)器可能使用一個具有大的多的高速緩沖存儲器的處理器,諸如由IntelXeonTM提供的MP處理器,其可能包括一個20千字節(jié)(數(shù)據(jù)和執(zhí)行追蹤)的高速緩沖存儲器,一個512千字節(jié)的L2高速緩沖存儲器,和一個4兆字節(jié)的L3高速緩沖存儲器,和數(shù)千兆字節(jié)的系統(tǒng)存儲器。
用于使用一個諸如在附圖1中描繪的存儲器分級體系的一個動機是根據(jù)價格性能比的考慮分離不同的存儲器類型。在抽象級上,每個給定的級實際上起用于低于它的級的高速緩存的作用。這樣,實際上系統(tǒng)存儲器106是一種用于大容量存儲器108的高速緩存,并且大容量存儲器甚至可以起一種用于磁帶/網(wǎng)絡(luò)110高速緩存的作用。
著眼于這些考慮,在附圖2中示出概括的傳統(tǒng)的高速緩存使用模型。所述高速緩存的使用在方框200開始,其中在參考一個數(shù)據(jù)位置標(biāo)識符的給定等級處接收一個存儲器存取請求,該數(shù)據(jù)位置標(biāo)識符指定數(shù)據(jù)位于所述分級結(jié)構(gòu)的下一級的位置。例如,一般的從一個處理器中的存儲器存取將指定請求數(shù)據(jù)的地址,其經(jīng)由執(zhí)行相應(yīng)的程序指令獲得。其它類型的存儲器存取請求可能在較低級產(chǎn)生。例如,操作系統(tǒng)可以使用磁盤驅(qū)動器的一部分以起虛擬內(nèi)存的作用,這樣就增加了所述系統(tǒng)存儲器的功能大小。這樣做時,操作系統(tǒng)將″交換″系統(tǒng)存儲器和磁盤驅(qū)動器之間的存儲頁面,其中所述頁被保存在一個臨時交換文件中。
響應(yīng)于所述存取請求,在判定框202中確定所述請求的數(shù)據(jù)是否在可適合的高速緩存中-即該(有效的)高速緩存是在所述分級結(jié)構(gòu)中的下一級。照一般說法,存在所述請求數(shù)據(jù)是″高速緩存命中″,而沒有所述數(shù)據(jù)導(dǎo)致″高速緩存未中″。對于一個處理器請求,這個決定將識別所述請求數(shù)據(jù)是否存在于L1高速緩存102中。對于L2高速緩存請求(經(jīng)由一個相應(yīng)的高速緩存控制器發(fā)出的),判定框202將確定所述數(shù)據(jù)是否在L2高速緩存中可獲得。
如果所述數(shù)據(jù)在所述可適合的高速緩存中可獲得,對判定框202的應(yīng)答是命中,前進所述邏輯到方框210,在其中數(shù)據(jù)被從所述高速緩存返回到在高于所述高速緩存的直接上一級的請求者。例如,如果所述請求從所述處理器發(fā)出到L1高速緩存102中并且數(shù)據(jù)存在于L1高速緩存中,它被返回到所述處理器(所述請求者)。然而,如果所述數(shù)據(jù)沒有存在于所述L1高速緩存中,所述高速緩存控制器這次從L1高速緩存發(fā)送第二數(shù)據(jù)存取請求到L2高速緩存。如果所述數(shù)據(jù)存在于L2高速緩存中,它被返回到L1高速緩存,當(dāng)前請求者。正如將由本領(lǐng)域中的那些普通技術(shù)人員認(rèn)識到的一樣,在包括一切的高速緩存設(shè)計下,這個數(shù)據(jù)然后將被寫入到L1高速緩存中并且從L1高速緩存返回到所述處理器。除在這里示出的配置之外,一些結(jié)構(gòu)使用并行路徑,不管所述L2高速緩存是否同時返回數(shù)據(jù)到L1高速緩存和所述處理器。
現(xiàn)在讓我們假定所述請求數(shù)據(jù)沒有存在于可適合的高速緩存中,導(dǎo)致未命中。在這種情況下,邏輯進行到方框204,其中使用可適合的高速緩存回收策略確定將(由請求數(shù)據(jù))替換的數(shù)據(jù)單元。例如,在L1,L2,和L3高速緩沖存儲器中,存儲的單元是″超高速緩沖存儲器線″(用于處理器高速緩存的存儲單元也被稱為一個塊,同時用于系統(tǒng)存儲器的替換單元一般是一個存儲頁面)。將被替換的單元包括回收單元,因為它從所述高速緩存中被回收。用于傳統(tǒng)的高速緩存回收的最常見的算法是LRU,偽LRU,和隨機。
結(jié)合方框204的操作,在方框206中,請求的數(shù)據(jù)單元從下一存儲器級中檢索,并且在方框208中用于替換回收的單元。例如,假定由一個處理器產(chǎn)生初始請求,并且在L2高速緩存中而不是在L1高速緩存中請求的數(shù)據(jù)是可用的。在方框204中,響應(yīng)于L1高速緩存的未中,將從L1高速緩存中回收的超高速緩沖存儲器線將由高速緩存控制器確定。并行的,在被選擇來回收的超高速緩沖存儲器線的位置處,在L2中包含請求數(shù)據(jù)的超高速緩沖存儲器線將被拷貝到L1高速緩存中,這樣替換所述回收的超高速緩沖存儲器線。在方框210,高速緩存數(shù)據(jù)單元被替換之后,包含在所述單元之內(nèi)的適合的數(shù)據(jù)被返回到所述請求者。
在所述傳統(tǒng)的方案下,高速緩存回收策略是靜態(tài)的。也就是說,它們一般經(jīng)由編程邏輯在高速緩存控制器硬件中實現(xiàn)其不能被改變。例如,一個特殊的處理器模型將具有一個被嵌入到它的高速緩存控制器邏輯中的特定的高速緩存回收策略,要求將被采用的回收策略用于運行在使用所述處理器的系統(tǒng)上的所有的應(yīng)用程序。
按照本發(fā)明的實施例,提供用于經(jīng)由可編程的控制元件控制高速緩存回收策略的機制。這使一個程序員或編譯器能夠在他的或她的源代碼中嵌入控制提示以指示高速緩存控制器如何選擇相應(yīng)的機器代碼部分(來源于源代碼)和/或通過使用程序控制的回收策略將被高速緩存的數(shù)據(jù)。
作為概述,本發(fā)明基本的實施例將首先被論述以舉例說明本程序設(shè)計的高速緩存政策控制機制的一般情況。另外,使用高級的高速緩存(例如,L1,L2,或L3高速緩存)實現(xiàn)這個實施例將被描述以便舉例說明由本機制使用的普遍原理。應(yīng)當(dāng)理解,這些普遍原理可以按類似的方式在其它高速緩存級,諸如在所述系統(tǒng)存儲器級上實現(xiàn)。
參照附圖3a,示出了一個舉例說明借助一個基本實施例的實現(xiàn)執(zhí)行的操作和邏輯的流程圖。在這個實現(xiàn)下,用于一個給定的高速緩存級的存儲器資源被劃分成為兩個存儲池高優(yōu)先級存儲池和低優(yōu)先級存儲池。高優(yōu)先級存儲池用來存儲包含很可能近期由處理器再存取的數(shù)據(jù)和/或代碼的超高速緩沖存儲器線同時低優(yōu)先級存儲池用來存儲包含很少會在這一段時間期間被再存取的數(shù)據(jù)和/或代碼的超高速緩沖存儲器線。此外,高優(yōu)先級存儲池被選擇以在傳統(tǒng)的高速緩存回收方案下存儲將被正?;厥盏某咚倬彌_存儲器線。根據(jù)本實現(xiàn)的其他方面,提示被嵌入到機器代碼中以指示高速緩存控制器包含請求數(shù)據(jù)的塊將被高速緩存到哪個存儲池中。
開始于方框300,存儲器存取周期可以按類似方式進行到常規(guī)方法,以及請求者(這個例子中是處理器)發(fā)送一個存儲器存取請求,其參照將被檢索的數(shù)據(jù)和/或指令的地址。然而,所述請求更進一步的包括一個高速緩存存儲池標(biāo)識符(ID),其用來指定檢索的數(shù)據(jù)將被高速緩存到其中的高速緩存存儲池。用于實現(xiàn)所述機制的這個方面的更多細(xì)節(jié)描述如下。
如前所述,響應(yīng)于存儲器存取請求,可適用的高速緩存級檢查所述數(shù)據(jù)是否存在,正如判定框302所示出的。在一些實施例中,高速緩存存儲池ID被采用以參與相應(yīng)的高速緩存搜索,正如下面所述的。在方框314,如果高速緩存命中結(jié)果,數(shù)據(jù)被返回到請求者,完成所述周期。然而,如果高速緩存未中結(jié)果,邏輯進行到判定框304,其中確定出高速緩存存儲池ID指定的是高還是低優(yōu)先級存儲池。
如果高速緩存存儲池ID指定的是高優(yōu)先級存儲池,相應(yīng)于所述請求的數(shù)據(jù)和/或指令已經(jīng)通過程序員識別出,其將被包括在部份應(yīng)用程序中,該部分應(yīng)用程序很可能將以比其它部分的應(yīng)用程序高的頻率被存取(然而在傳統(tǒng)的回收策略下也不是頻繁到足以保持在高速緩存中)。同樣地希望標(biāo)明請求數(shù)據(jù)將被存儲在其中的相應(yīng)的超高速緩沖存儲器線,以便當(dāng)和低優(yōu)先級超高速緩沖存儲器線相比的時候那些超高速緩沖存儲器線不經(jīng)常被回收。如果高速緩存存儲池ID指定低優(yōu)先級存儲池,這指示所述應(yīng)用程序的關(guān)聯(lián)部分被程序員認(rèn)為是不經(jīng)常存取的。在一個實施例中,高優(yōu)先級存儲池ID包含一個聲明位,同時低優(yōu)先級ID包含一個非聲明位。如下面更進一步的細(xì)節(jié)描寫的,在一個實施例中包含高優(yōu)先級數(shù)據(jù)和代碼的部分應(yīng)用程序被標(biāo)明將被高速緩存在高優(yōu)先級存儲池中,同時所有其它的數(shù)據(jù)和代碼通過缺省值被簡單地高速緩存在低優(yōu)先級或″缺省的″存儲池中。
根據(jù)判定框304的結(jié)果,帶有高優(yōu)先級存儲池ID的請求由方框306開始處理。在這個方框中,使用用于所述存儲池的可適用的高速緩存回收策略(和關(guān)聯(lián)的算法)作出決定哪個數(shù)據(jù)塊(超高速緩沖存儲器線)將被替換。在一個實施例中,高速緩沖存儲空間的各個部分被劃分成為固定尺寸的高-和低優(yōu)先級存儲池。在這種情況下,使用所述可適用的高速緩存回收算法從高優(yōu)先級存儲池中的超高速緩沖存儲器線中選擇出將被替換的超高速緩沖存儲器線。例如,在一個實施例中LRU算法可以用來從高優(yōu)先級的存儲池中回收最近最少使用的超高速緩沖存儲器線,同時其它實施例可以采用可選的算法,包括但不是限于偽LRU或隨機的回收算法。
在另一個實施例中,高-和低優(yōu)先級存儲池的尺寸是可變的。在這種情況下,高速緩存控制器中的邏輯被修改以便根據(jù)程序指令(例如,提示)和/或監(jiān)視存取方式來動態(tài)調(diào)整存儲池的相對大小。在一個實施例中,所述高速緩存控制器邏輯采用高速緩存回收策略,其根據(jù)高和低優(yōu)先級存儲池請求的觀測比來動態(tài)地調(diào)整所述存儲池的相對大小。在一個實施例中,單個的高速緩存回收策略被實現(xiàn)用于兩個高速緩存存儲池。在另一個實施例中,各自的次要的高速緩存回收策略被用于動態(tài)地調(diào)整高和低優(yōu)先級子存儲池。
在方框308中低優(yōu)先級存儲池入口可以以類似于高優(yōu)先級存儲池入口的方式處理。正如以上的討論,在一個實施例中所述高速緩存的一個固定部分被分配給低優(yōu)先級存儲池。因此,分離的低優(yōu)先級存儲池高速緩存回收策略被用于這部分高速緩存。也正如以上的討論,在其中高和低優(yōu)先級存儲池的尺寸可以被動態(tài)地調(diào)整的實施例下,單個的高速緩存回收策略可以被應(yīng)用到整個高速緩存,或各自的次要的高速緩存回收策略可以被應(yīng)用到動態(tài)調(diào)整的高和低優(yōu)先級子存儲池。
結(jié)合方框306和308的操作(作為可適用的),在方框310中請求的數(shù)據(jù)塊從下一存儲器級中被檢索并且在方框312中被用來替換為回收而選擇的塊。在L2到L1高速緩存替換或者L3到L2高速緩存替換的一個實施例下,在低級高速緩存中的超高速緩沖存儲器線被簡單地拷貝到由回收的超高速緩沖存儲器線在上級高速緩存中先前占有的位置,并且新數(shù)值被插入到相應(yīng)的超高速緩沖存儲器線標(biāo)記中。在請求數(shù)據(jù)已經(jīng)被寫入到高級高速緩存之后,它被返回到所述處理器。
上述介紹的用于高和低優(yōu)先級存儲池實施例的一般原理可以延伸至支持任意多個高速緩存優(yōu)先級。例如,附圖3b的實施例支持從1到n高速緩存存儲池優(yōu)先級。在一個實施例中,n是在n路關(guān)聯(lián)高速緩存中的路的數(shù)目。在另一個實施例中,n高速緩存優(yōu)先級存儲池使用一個全相聯(lián)高速緩沖存儲器來實現(xiàn)。在又一個的實施例中,n高速緩存優(yōu)先級存儲池在m路組相聯(lián)高速緩存上實現(xiàn)其中n≠m。
回到附圖3b的實施例,存儲器存取周期在方框300A以類似于上述討論的用于附圖3a的方框300的方式開始,但不是識別所述高速緩存存儲池,指定一個高速緩存優(yōu)先級的數(shù)據(jù)與所述存儲器地址一起被提供。按照由判定框302作出的高速緩存命中或未中決定,邏輯進行到方框314或者判定框305。在一個實施例中,高速緩存存儲池優(yōu)先級用來參與高速緩存搜索,然而高速緩存存儲池優(yōu)先級在其它實施例下在高速緩存搜索期間不被采用。
判定框305用來分流所述邏輯進入n個方框中的一個,其用來實現(xiàn)各自的用于相應(yīng)的優(yōu)先級的高速緩存回收策略。例如,如果高速緩存存儲池優(yōu)先級是1,邏輯被路由選擇到方框3061,如果它是2,邏輯被路由選擇到方框3062,等等。以類似于如上所述的方式,在一個實施例下高速緩存被劃分成為固定尺寸的n個存儲池,其中存儲池的尺寸可能相同或者可能不相同。在另一個實施例中,存儲池的尺寸鑒于對正在進行的存取方式的考慮而動態(tài)地調(diào)整。在方框3061-n的每一個中,考慮相應(yīng)的高速緩存存儲池優(yōu)先級,應(yīng)用各自的高速緩存回收策略。通常,相同類型的高速緩存回收策略可以被應(yīng)用于每個優(yōu)先級,或不同類型的回收策略(和相應(yīng)的算法)可以被實現(xiàn)來用于不同的級。在方框3061-n的其中一個中,將被替換的超高速緩沖存儲器線由所述回收策略確定之后,在方框310中請求的數(shù)據(jù)從下一存儲器級中被檢索并且在方框312中回收的超高速緩沖存儲器線可以按類似于上述討論的用于附圖3a中的相同標(biāo)號的方框的方式被替換。然后在方框314中最新的高速緩存數(shù)據(jù)被返回到請求處理器。
通常,可以使用多個技術(shù)的一個來標(biāo)明應(yīng)用程序代碼的各自部分的高速緩存存儲池優(yōu)先級。然而,最后,高速緩存優(yōu)先級標(biāo)記將被編碼成為機器級代碼,其適于運行在目標(biāo)處理器上,因為處理器不執(zhí)行源級代碼。如下所述在更進一步的細(xì)節(jié)中,在一個實施例中專門的操作碼被增加給一個處理器的指令集以指示處理器相應(yīng)的數(shù)據(jù)和指令將被高速緩存在哪個存儲池中。
在一個實施例中,標(biāo)記被嵌入在源代碼級中,導(dǎo)致生成在機器代碼中的相應(yīng)的高速緩存優(yōu)先級提示。參照附圖4,這個處理在方框400開始,其中標(biāo)記器被插入到高級源代碼中以為不同的代碼部分描繪高速緩存回收策略。在一個實施例中,高級代碼包括用C語言或C++語言寫的編程代碼,并且標(biāo)記借助于相應(yīng)的編譯指示聲明來實現(xiàn)。舉例說明一組示范性的編譯指示聲明以影響雙優(yōu)先級高速緩存回收策略的偽代碼在附圖5a中示出。在這個實施例中,存在雙優(yōu)先級開,指示高優(yōu)先級,和關(guān),指示低優(yōu)先級,或缺省優(yōu)先級。編譯指示聲明″CACHE EVICT POLICY ON″用來標(biāo)明將被分配給高優(yōu)先級存儲池的代碼部分的開始,同時″CACHE EVICT POLICY OFF″編譯指示聲明用來標(biāo)明代碼部分的結(jié)束。
在另一個實施例中,編譯指示聲明用來描繪n高速緩存優(yōu)先級。例如,舉例說明用于影響四個不同的高速緩存優(yōu)先級的編譯指示聲明的偽代碼在附圖5b中示出。在這種情況下,編譯指示″EVICT_LEVEL1″用來描繪級1高速緩存優(yōu)先級將被應(yīng)用的代碼部分的開始,″EVICT_LEVEL2″用來描繪級2高速緩存優(yōu)先級將被應(yīng)用的代碼部分的開始,等等。
在附圖5a和5b中示出的編譯指示聲明指示所述編譯程序生成機器代碼,其包括嵌入的提示,指示所述處理器和/或高速緩存控制器,在其中相應(yīng)的代碼和/或數(shù)據(jù)將被高速緩存在哪個存儲池中,并且這樣(間接地)將使用哪個高速緩存回收策略。在一個實施例中,這通過用新的操作碼替換常規(guī)存儲器存取操作碼來完成,新的操作碼提供一個裝置用于通知所述處理器和/或高速緩存控制器應(yīng)當(dāng)使用哪種高速緩存存儲池優(yōu)先級來高速緩存所述相應(yīng)的代碼部分,如方框402所示。
在一個實施例中,明確的操作碼具有每個各自的高速緩存優(yōu)先級。例如,在一個常見的指令集下,MOV指令用來在存儲器和寄存器之間移動數(shù)據(jù)。對于雙高速緩存優(yōu)先級,相應(yīng)的匯編指令可能是MOV(指定一個默認(rèn)的低優(yōu)先級高速緩存存儲池或沒有專門的處理被請求),MOVL(明確地指定使用低優(yōu)先級存儲池)和MOVH(明確地指定使用高優(yōu)先級存儲池)。在另一個實施例中,各自的操作碼具有各自的優(yōu)先級,諸如MOV1,MOV2,MOV3,等等。在n優(yōu)先級實現(xiàn)的一個實施例中,指令包括指令和定義所述優(yōu)先級的屬性,諸如MOVCn。
在另一個實施例中,指令用來明確地設(shè)置和清除標(biāo)志或多位存儲池ID寄存器。在這個方法下,使用識別哪個存儲池將應(yīng)被用來高速緩存相應(yīng)于所述存儲器存取的合適的數(shù)據(jù)和/或指令的標(biāo)志或存儲池ID值,標(biāo)志或多位存儲池ID寄存器連同解碼所選擇的存儲器存取指令一起被核對。用這樣的方式,寄存器值能夠被用來識別某一存儲池,利用高速緩存的與當(dāng)前的存取和后來的被分配給那些存儲池的存取有關(guān)的數(shù)據(jù)。為了改變所述存儲池,標(biāo)志或存儲池ID值因此被改變.在一組示范性的指令格式下,SETHF用來設(shè)置高優(yōu)先級存儲池標(biāo)志,同時CLRHF用來清除所述標(biāo)志(指示將使用低優(yōu)先級或默認(rèn)的存儲池)。在n優(yōu)先級實現(xiàn)的一個實施例下,指令包括指令和定義所述優(yōu)先級的屬性,諸如SETPn。
如方框404所示,在運行時間所述高速緩存使用借助于包含在所述執(zhí)行的機器代碼中的方向提示(所述特定的操作碼和可選的操作數(shù))被管理。示出硬件實現(xiàn)用于實行高速緩存回收策略的技術(shù)在下面被論述。
除在高級源代碼中使用編譯指示之外,機器級代碼部分可以使用代碼調(diào)整工具等等標(biāo)明不同的優(yōu)先級。例如,代碼調(diào)整工具,諸如Intel′s Vtune,可以用來在應(yīng)用程序的運行時間使用期間監(jiān)視代碼存取。這些工具使程序員能夠識別比其它部分更經(jīng)常使用的代碼部分。此外,所述使用周期數(shù)也可以被識別。這個對實現(xiàn)某些高速緩存回收策略尤其有好處的,所述高速緩存回收策略可以通過在這里描述的實施例被簡化。例如,在傳統(tǒng)的LRU回收算法下,具有非常高存取的代碼部分被裝載到一個高速緩存中并且保留在該高速緩存中,直到它們變成最近最少使用的超高速緩沖存儲器線。實際上,這是高優(yōu)先級高速緩存的一種類型。
相反,本發(fā)明的實施例使程序員能夠影響高速緩存回收策略用于其它沒有通過現(xiàn)存的高速緩存寬回收算法有效處理的類型的情形。例如,假定存在特殊的經(jīng)由相對長的一段時間(長期的時間局部性)十分經(jīng)常使用的代碼部分,然而在傳統(tǒng)的回收算法下繼續(xù)將在使用之間被回收。其間,其它代碼部分被節(jié)約地使用,其中最高級高速緩存的使用實際上是起相反作用的。在專有的高速緩存設(shè)計下這是尤其真實的,其中僅僅數(shù)據(jù)的一個復(fù)本被保持在不同的處理器高速緩沖存儲器中(例如,每次只有一個數(shù)據(jù)的復(fù)本存在于L1高速緩存或者L2高速緩存中,而不是在兩個中)。
附圖6示出了一個舉例說明執(zhí)行生成具有來源于實際應(yīng)用程序使用的觀測的高速緩存優(yōu)先級的代碼部分的操作流程圖。所述處理開始于方框600,其中源代碼以傳統(tǒng)的方式在沒有標(biāo)記的情況下被編譯。在方框602,使用適當(dāng)?shù)拇a調(diào)整工具等等對用已編譯的代碼的存儲器存取方式進行觀察。然后在方框604使用調(diào)整工具對所述具有特殊的存取方式的代碼部分標(biāo)明,或者在一個用戶的指導(dǎo)下或者自動地經(jīng)由邏輯編譯成調(diào)試工具。然后所述調(diào)整工具再編譯所述代碼以產(chǎn)生包括具有嵌入的高速緩存管理指令的指令的新代碼(例如,經(jīng)由明確的類似于那些在這里描述的操作碼)。
支持程序設(shè)計控制高速緩存回收策略的硬件體系結(jié)構(gòu)的示范性實施例在附圖7a-b,以及8a-c中示出。通常,在這些實施例中公開的原則可以在各種類型的眾所周知的高速緩存結(jié)構(gòu)上實現(xiàn),包括n路組相聯(lián)高速緩沖存儲器結(jié)構(gòu)和全相聯(lián)高速緩沖存儲器結(jié)構(gòu)。此外,所述原則可以在統(tǒng)一的高速緩沖存儲器(高速緩存和在相同的高速緩存中的數(shù)據(jù))和Harvard結(jié)構(gòu)高速緩沖存儲器(高速緩存被分成數(shù)據(jù)高速緩存(Dcache)和指令高速緩存(Icache)兩者上實現(xiàn)。進一步地注意其它高速緩存元件的細(xì)節(jié),諸如多路復(fù)用器,譯碼邏輯,數(shù)據(jù)端口等等,為了清楚在附圖7a-b和8a-c中而沒有示出。本領(lǐng)域中的那些普通技術(shù)人員應(yīng)當(dāng)理解,這些元件將存在于實際執(zhí)行的所述結(jié)構(gòu)中。
附圖7a的高速緩存結(jié)構(gòu)700A實施例對應(yīng)于4路組相聯(lián)高速緩存。通常,這個結(jié)構(gòu)表示n路組相聯(lián)高速緩存,在這里為了清楚,用詳細(xì)的4路實現(xiàn)。所述結(jié)構(gòu)的主要元件包括處理器702,各種高速緩存控制元件(其中的細(xì)節(jié)描述如下)共同地被認(rèn)為是一個高速緩存控制器,以及實際的高速緩沖存儲空間本身,其由用于存儲標(biāo)記陣列的存儲器和超高速緩沖存儲器線組成,也通常被稱為塊。
高速緩存結(jié)構(gòu)700A的一般的操作類似于由傳統(tǒng)的4路組相聯(lián)高速緩存使用的那些。響應(yīng)于存儲器存取請求(經(jīng)由執(zhí)行一個相應(yīng)的指令或者指令序列產(chǎn)生),由請求參考的地址被發(fā)送到所述高速緩存控制器。所述地址的字段被劃分成為標(biāo)記704,索引706,和塊偏移量708。標(biāo)記704和索引706的組合通常被認(rèn)為是塊(或超高速緩沖存儲器線)地址。塊偏移量708也通常被認(rèn)為是字節(jié)選擇或字選擇字段。字節(jié)/字選擇或塊偏移量的目的是從超高速緩沖存儲器線的多個字或字節(jié)中選擇一個請求字(一般的)或字節(jié)。例如,一般的超高速緩沖存儲器線尺寸的范圍是從8到128字節(jié)。因為超高速緩沖存儲器線是高速緩存中可能被存取的最小單元,必須提供能夠進一步分析所述超高速緩沖存儲器線的信息以返回所述請求數(shù)據(jù)。想要的字或字節(jié)的位置偏移于所述超高速緩沖存儲器線的基地址,因此命名為塊″偏移量?!逡话愕?,l最低有效位用于塊偏移量,具有2l字節(jié)寬的超高速緩沖存儲器線或塊的寬度。下一組m位包括索引706。索引包括地址位部分,接近于偏移量,其指定將被存取的高速緩存組。它在舉例說明的實施例中是m位寬,這樣每個陣列保持2m入口。它用來在每一標(biāo)記陣列中查尋一個標(biāo)記,并且,與偏移量一起用于在每一超高速緩沖存儲器線陣列中查尋數(shù)據(jù)。所述用于標(biāo)記704的位包括所述地址的最高有效n位。它用來在每個標(biāo)記陣列中查找一個相應(yīng)的標(biāo)記。
所有上述的高速緩存元件是傳統(tǒng)的元件。除這些元件之外,高速緩存結(jié)構(gòu)700A使用一個存儲池優(yōu)先位710。所述存儲池優(yōu)先位用來選擇一個組,其中超高速緩沖存儲器線將被搜索和/或回收/替換(必要時)。在高速緩存結(jié)構(gòu)700A下,存儲器陣列元件被劃分成為四組。每個組包括標(biāo)記陣列712j和超高速緩沖存儲器線陣列714j,其中j標(biāo)識所述組(例如,組1包括標(biāo)記陣列7121和超高速緩沖存儲器線陣列7141)。
響應(yīng)于一個存儲器存取請求,高速緩存結(jié)構(gòu)700A的操作如下進行。在舉例說明的實施例中,處理器702接收一個參照存儲器地址的MOVH指令716。正如以上討論的,在一個實施例中,MOVH指令指示所述處理器/高速緩存控制器在高優(yōu)先級存儲池中存儲一個相應(yīng)的超高速緩沖存儲器線。在舉例說明的實施例中,組1,2,3和4被劃分以便將組1-3用于低優(yōu)先級存儲池,同時將組4用于高優(yōu)先級存儲池。其它劃分方案也可能按照類似的方式被實現(xiàn),諸如平均地拆分所述組,或使用單個存儲池用于低優(yōu)先級存儲池,同時使用另三個存儲池用于所述高優(yōu)先級存儲池。
響應(yīng)于MOVH指令的執(zhí)行,具有高邏輯電平(1)的優(yōu)先位被作為一個前綴附加到所述地址上并提供給所述高速緩存控制器邏輯。在一個實施例中,高優(yōu)先級位被存儲在一個1位寄存器中,同時地址被存儲在另一個w位寄存器中,其中w是所述地址的寬度。在另一個實施例中,優(yōu)先位和地址的組合被存儲在w+1寬度的寄存器中。
在分開的存儲池方案的一個實施例下,諸如在附圖7a中示出的,僅僅具有與用于當(dāng)前請求的優(yōu)先位值有關(guān)的存儲池的那些組需要被搜索以檢驗高速緩存命中或未中。這樣,僅僅標(biāo)記陣列7124需要被搜索。在舉例說明的實施例下,在標(biāo)記陣列中的每個元件包括一個有效位。這些位用來指示相應(yīng)的超高速緩沖存儲器線是否是有效的,并且必須被設(shè)置用于一個匹配。在這個例子中,假定一個高速緩存未中發(fā)生。
響應(yīng)于所述高速緩存未中,高速緩存控制器從將被替換的組4中選擇一個超高速緩沖存儲器線。在舉例說明的實施例中,分開的高速緩存回收策略被實現(xiàn)用于每一高和低優(yōu)先級存儲池,描述為高優(yōu)先級回收策略718和低優(yōu)先級回收策略720。在另一個實施例中,通常的回收策略可能被用于兩個存儲池(盡管所述將被回收的超高速緩沖存儲器線通過優(yōu)先級仍然被分離)。
重要的是在回收的超高速緩沖存儲器線中修改的數(shù)據(jù)在回收之前被寫回給系統(tǒng)存儲器。在一般的方法下,″修改″位用來標(biāo)明已經(jīng)被更新的超高速緩沖存儲器線。依靠所述實現(xiàn),具有修改位(dirty bit)的超高速緩沖存儲器線可能被周期性地寫回給系統(tǒng)存儲器(隨后清除所述相應(yīng)的修改位),和/或它們可能響應(yīng)于一回收而被寫回。如果所述修改位被清除了,不需要與超高速緩沖存儲器線回收有關(guān)的寫回。
另一個連同選擇所述回收的超高速緩沖存儲器線一起執(zhí)行的操作是從低級存儲器722中檢索請求數(shù)據(jù)。這個低級存儲器表示在所述附圖1的存儲器分級體系中下一較低的級,如和當(dāng)前的高速緩存級相關(guān)。例如,高速緩存結(jié)構(gòu)700A可以相應(yīng)于L1高速緩存,同時低級存儲器722表示L2高速緩存,高速緩存結(jié)構(gòu)700A相應(yīng)于L2高速緩存,并且低級存儲器722表示系統(tǒng)存儲器,等等。為簡單起見,假定請求數(shù)據(jù)被存儲在低級存儲器722中。進一步地連同選擇回收的超高速緩沖存儲器線,諸如在附圖7a中舉例說明的,在具有采用一個廢棄物緩沖器724的專有的高速緩存結(jié)構(gòu)的高速緩存結(jié)構(gòu)700的可選實現(xiàn)下,超高速緩沖存儲器線被拷貝到廢棄物緩沖器中。
剛一返回請求數(shù)據(jù)到高速緩存控制器,所述數(shù)據(jù)就被拷貝到回收的超高速緩沖存儲器線中,并且相應(yīng)的標(biāo)記以及有效位在適當(dāng)?shù)臉?biāo)記陣列(在當(dāng)前的例子中是標(biāo)記陣列7124)中被更新。而不是僅僅返回請求數(shù)據(jù),最接近的并且包括所述請求數(shù)據(jù)的數(shù)據(jù)的許多連續(xù)的字節(jié)都被返回,其中字節(jié)的數(shù)目等于超高速緩沖存儲器線寬度。例如,對于一個32字節(jié)的超高速緩沖存儲器線寬度,32字節(jié)的數(shù)據(jù)將被返回。借助于一個4∶1塊選擇多路復(fù)用器728,一個包含在新的超高速緩沖存儲器線中的字(相當(dāng)于原始請求)然后從高速緩存中被讀出到用于處理器702的輸入寄存器726中。
寫入一個對應(yīng)于非高速緩存地址的值并且更新一個存儲在用于高速緩存結(jié)構(gòu)700A的超高速緩沖存儲器線中的值也被以類似于所述常規(guī)方法的方式執(zhí)行,除了進一步地使用所述存儲池優(yōu)先位外。這包括一個高速緩存寫回,存儲在輸出寄存器730中的數(shù)據(jù)將被寫入到系統(tǒng)存儲器(最后)中。首先使用與由所述存儲池優(yōu)先位定義的存儲池有關(guān)的組搜索適當(dāng)?shù)某咚倬彌_存儲器線(應(yīng)該是這種目前存在的)。如果發(fā)現(xiàn)了,所述超高速緩沖存儲器線用輸出寄存器730中的數(shù)據(jù)來更新,并且相應(yīng)的修改位(未顯示)被標(biāo)記。隨后用新的值經(jīng)由眾所周知的寫回操作來更新所述系統(tǒng)存儲器。如果在高速緩存中沒有發(fā)現(xiàn)將被更新的數(shù)據(jù),在一個實施例下超高速緩沖存儲器線以類似于如上所述用于一個讀請求的方式被回收,并且一個包括將被更新的數(shù)據(jù)的塊被從系統(tǒng)存儲器(或下一級高速緩存,視情況而定)中被檢索。這個塊然后被拷貝到回收的超高速緩沖存儲器線中并且相應(yīng)的標(biāo)記和有效位值在適當(dāng)?shù)臉?biāo)記陣列中被更新。在有些情況下,當(dāng)更新系統(tǒng)存儲器時希望旁路高速緩存操作。在這種情況下,在存儲器地址上的數(shù)據(jù)在沒有高速緩存到相應(yīng)的塊的情況下被更新。
附圖7b的高速緩存結(jié)構(gòu)700B類似于附圖7a的高速緩存結(jié)構(gòu)700A的配置,其中相同標(biāo)號的元件執(zhí)行類似的功能。在這個結(jié)構(gòu)下,四級高速緩存回收優(yōu)先方案被實現(xiàn),其通常被表示為n-級回收優(yōu)先方案。在這個方案下,每個組與各自的存儲池有關(guān),并且每個存儲池被分配一個各自的優(yōu)先級。上述單個的優(yōu)先位被替換為一個多位字段,并且位寬度取決于將根據(jù)二的乘方被實現(xiàn)的優(yōu)先級的數(shù)目。例如,在附圖7b中描繪四優(yōu)先級的情況下,二位被使用。此外,每個各自的存儲池具有關(guān)聯(lián)的存儲池回收策略,如由存儲池00回收策略732,存儲池01回收策略734,存儲池10回收策略736,和存儲池10回收策略738所描述的。
高速緩存結(jié)構(gòu)700B以類似于上面描述的用于高速緩存結(jié)構(gòu)700A那樣的方式工作。然而,在這種情況下,存儲池ID值,其識別請求的優(yōu)先級,用來識別適當(dāng)?shù)母咚倬彺娲鎯Τ?,以及由此適當(dāng)?shù)母咚倬彺娼M。
應(yīng)當(dāng)注意由高速緩存結(jié)構(gòu)700A和700B提供的特征的組合可以在同樣的高速緩存中實現(xiàn)。例如,n路組相聯(lián)高速緩存可以使用m優(yōu)先級,其中n≠m。
附圖8a-c描繪全相聯(lián)高速緩沖存儲器結(jié)構(gòu),其已經(jīng)被延伸至支持高速緩存策略的程序設(shè)計控制。全相聯(lián)高速緩沖存儲器功能象單個組相聯(lián)高速緩存一樣。因此,高速緩存結(jié)構(gòu)800A,800B,和800C(相應(yīng)于附圖8a,8b,和8c)的每一個包括單個標(biāo)記排列712和單個超高速緩沖存儲器線陣列714。因為僅僅存在標(biāo)記和超高速緩沖存儲器線的單個組,所以不需要索引,并且因此提供給高速緩存控制器的信息現(xiàn)在包括標(biāo)記804,表示塊地址,和塊偏移量808。在某種意義上類似于高速緩存結(jié)構(gòu)700A,附圖8a的高速緩存結(jié)構(gòu)800A使用一存儲池優(yōu)先位810,其執(zhí)行與上述討論的存儲池優(yōu)先位710的類似的功能。
和高速緩存結(jié)構(gòu)700A和700B不同,高速緩存結(jié)構(gòu)800A,800B,和800C的每一個都支持動態(tài)的存儲池分配。這個經(jīng)由使用一個或多個優(yōu)先權(quán)ID位來處理,并且位的數(shù)目取決于想要的將被實現(xiàn)的優(yōu)先權(quán)間隔尺寸。例如,將一個高速緩存劃分成為高和低優(yōu)先權(quán)存儲池將需要單一優(yōu)先位,而將一個高速緩存劃分成為m個存儲池將需要log2(m)優(yōu)先權(quán)ID位(例如,2位用于4個優(yōu)先級,3位用于8個優(yōu)先級,等等)。因為高速緩存組的尺寸是恒定的,在一個優(yōu)先級的存儲池分配中的增加將導(dǎo)致類似的到另一個存儲池的同樣的減少。
根據(jù)附圖8a的高速緩存結(jié)構(gòu)800A,單一優(yōu)先位字段被添加給每個標(biāo)記陣列入口,產(chǎn)生優(yōu)先位欄812。響應(yīng)一個存取請求,優(yōu)先位810與地址一起被提供給高速緩存控制器。然后可以使用優(yōu)先位欄812中的值作為掩碼搜索標(biāo)記陣列712,由此改進所述查找。響應(yīng)于高速緩存未中,來自于可應(yīng)用的高速緩存存儲池的超高速緩沖存儲器線(正如高速緩存結(jié)構(gòu)800A中的優(yōu)先位和高速緩存結(jié)構(gòu)800B和800C中的優(yōu)先權(quán)ID位所定義的)使用存儲池回收策略被驅(qū)逐。所述回收策略包括用于高速緩存結(jié)構(gòu)800A的低優(yōu)先級回收策略820和高優(yōu)先級回收策略818,和用于高速緩存結(jié)構(gòu)800B和800C的m回收策略8201-m。作為選擇,單一高速緩存策略(對于每個存儲池分別地實現(xiàn))可以被使用用于這些高速緩存結(jié)構(gòu)的每一個,如由通常的高速緩存策略824所描述的。
結(jié)合超高速緩沖存儲器線回收選擇,請求數(shù)據(jù)從較低級722中以類似于如上所述的對于高速緩存結(jié)構(gòu)700A和700B那樣的方式被檢索。可應(yīng)用的塊然后被從超高速緩沖存儲器線陣列714中拷貝到適當(dāng)?shù)某咚倬彌_存儲器線中,然后適當(dāng)?shù)淖?對應(yīng)于請求的地址)經(jīng)由一個字選擇多路復(fù)用器814被選擇并且返回到輸入寄存器726中。
在實施例800A,800B,以及800C的每一個中,每個存儲池的尺寸由存儲池尺寸選擇器830管理。所述存儲池尺寸選擇器使用邏輯(例如,經(jīng)由編程邏輯實現(xiàn)的算法)以便根據(jù)高速緩存的活動動態(tài)地改變所述存儲池的尺寸。例如,邏輯可以監(jiān)視在各自的存儲池中的高速緩存回收活動以檢查一個或多個存儲池是否太頻繁地被回收。在這種情況下,增加存儲池的尺寸,同時減少另一個或其它存儲池的尺寸可能是有利的。
影響在一個存儲池的尺寸方面的變化的機制十分簡單,而用于選擇超高速緩沖存儲器線以升級或降級的處理通常更加復(fù)雜。例如,改變一個給定的超高速緩沖存儲器線的優(yōu)先級,在所述標(biāo)記陣列中所述線的相應(yīng)的優(yōu)先位(或優(yōu)先級ID位)被簡單的改變以反映新的優(yōu)先級。其間,在一個實施例中,考慮諸如由LRU或偽LRU算法維持的信息之類的高速緩存活動信息來挑選所選擇的超高速緩沖存儲器線以用于優(yōu)先級升級或降級。在另一個實施例中,超高速緩沖存儲器線的連續(xù)的組可以被替換。
高速緩存結(jié)構(gòu)800B和800C除一個字段外是相同的。不同于使用有效位,高速緩存結(jié)構(gòu)800C使用2位MESI字段,所述MESI字段支持所述MESI(修改排除共享無效)協(xié)議。所述MESI協(xié)議是一個形式機制,用于經(jīng)由監(jiān)聽使用高速緩存相關(guān)性,并且特別地用在多處理器系統(tǒng)結(jié)構(gòu)中。在MESI協(xié)議下,每個超高速緩沖存儲器線被分配四個MESI狀態(tài)中的其中一個。
修改的狀態(tài)線(M狀態(tài)線)在僅僅一個高速緩存中是可用的并且它也包含已經(jīng)被處理的數(shù)據(jù)一也就是說,所述數(shù)據(jù)不同于在系統(tǒng)存儲器中相同地址的數(shù)據(jù)。M狀態(tài)線能夠在沒有在總線上發(fā)送一個周期的情況下被存取。
專有的狀態(tài)線(E狀態(tài)線)對于所述系統(tǒng)中僅僅一個高速緩存也是有用的,但是所述線不被修改。E狀態(tài)線能夠在沒有產(chǎn)生一個總線周期的情況下被存取。對E狀態(tài)線的寫入引起所述線變成可修改的。
共享的狀態(tài)線(S狀態(tài)線)指示所述線可能與其它高速緩沖存儲器共享(即,相同的線可以處于多于一個的高速緩存中。對S狀態(tài)線的讀取不產(chǎn)生總線活動,但是對共享線的寫入在所述總線上產(chǎn)生直寫周期。這可以使這條線在其它高速緩沖存儲器中無效。對S狀態(tài)線的寫入更新了所述高速緩存。對S狀態(tài)線的寫入將促使所述總線發(fā)送一個對所有權(quán)(RFO,零字節(jié)讀取)的讀取,該所有權(quán)將促使其它高速緩沖存儲器使所述線無效并且轉(zhuǎn)變這條線為專有的狀態(tài)。寫入然后可以進行到如上所述的E狀態(tài)線。
無效狀態(tài)(I狀態(tài))指示所述線在所述高速緩存中是不可用的。對這條線的讀取將導(dǎo)致一個未命中并且可以促使所述處理器執(zhí)行線路占用率(從系統(tǒng)存儲器中取出所述線)。在一個實施例中,對無效線的寫入促使處理器對所述總線執(zhí)行一個直寫周期。在一個實施例中,在寫回存儲器中對″I″狀態(tài)線的寫入將促使在總線上的存儲器讀取以在高速緩存中分配所述線。這是一個″關(guān)于寫的分配″策略。
應(yīng)當(dāng)注意,對于一個指令高速緩沖存儲器,在MESI協(xié)議中僅僅需要1位用于兩種可能的狀態(tài)(SI)。這是因為指令高速緩沖存儲器是被固有地寫保護。以類似于在高速緩存結(jié)構(gòu)800C中使用的那些的方式,MESI字段可能被使用以代替在高速緩存結(jié)構(gòu)700,700B,700C,和800A的每一個中的有效位字段。
參照附圖9,舉例說明通常傳統(tǒng)的計算機900,其表示不同的可能使用具有在這里描述的所述高速緩存結(jié)構(gòu)的處理器的計算機系統(tǒng),諸如臺式計算機,工作站,和膝上型計算機。計算機700也想要包括各種服務(wù)器結(jié)構(gòu),而且計算機具有多處理器。
計算機900包括機殼902其中被安裝了一個軟盤驅(qū)動器904(可選),一個硬盤驅(qū)動器906,和一個用適當(dāng)?shù)募呻娐方M裝的主板908,包括系統(tǒng)存儲器910和一個或多個處理器(CPU)912,正如對于本領(lǐng)域中的那些普通的技術(shù)人員來說普遍眾所周知的那樣。包括一個顯示器914用于顯示由計算機運行的軟件程序和程序模塊產(chǎn)生的圖形和正文。一個鼠標(biāo)916(或其它指示設(shè)備)可能被連接到機殼902背面的一個串行端口(或一個總線端口或USB端口)上,并且來自于鼠標(biāo)916的信號被傳送到所述主板來控制顯示器上的光標(biāo)以及通過在計算機上執(zhí)行的軟件程序和模塊來選擇顯示在顯示器914上的文字,菜單選項,和圖形組件。此外,鍵盤918耦合到所述主板用于文字和命令的用戶入口,其影響在計算機上執(zhí)行的軟件程序運行。
計算機900也可以選擇性地包括一個光盤只讀存儲器(CD=ROM)驅(qū)動器922,一個CD-ROM盤可以被插入到其中以便盤上的可執(zhí)行文件和數(shù)據(jù)可以被讀取用于傳送到內(nèi)存和/或計算機900的硬盤906上的存儲器中。可以包括其它諸如光學(xué)記錄介質(zhì)或DVD驅(qū)動器之類的大容量存儲器存儲設(shè)備。
處理器912的結(jié)構(gòu)細(xì)節(jié)在附圖9的上半部分中被示出。所述處理器體系結(jié)構(gòu)包括一個耦合到高速緩存控制器932和L1高速緩存934的處理器核心930。所述L1高速緩存934也耦合到L2高速緩存936。在一個實施例中,可選的廢棄物高速緩存938被連接在L1和L2高速緩沖存儲器之間。在一個實施例中,處理器結(jié)構(gòu)進一步包括可選的連接到L2高速緩存936的L3高速緩存940。L1,L2,L3,和廢棄物高速緩沖存儲器的每一個由高速緩存控制器932來控制。在舉例說明的實施例中,L1高速緩存使用包括指令高速緩存942和數(shù)據(jù)高速緩存944的Harvard結(jié)構(gòu)。處理器912進一步地包括一個存儲控制器946來控制對系統(tǒng)存儲器910的存取。
一般的,高速緩存控制器932代表高速緩存控制器,其實現(xiàn)這里描述的高速緩存體系結(jié)構(gòu)的高速緩存控制元件。除由在這里描述的高速緩存體系結(jié)構(gòu)實施例提供的所述操作來支持高速緩存回收策略的程序設(shè)計控制之外,高速緩存控制器執(zhí)行眾所周知的傳統(tǒng)的為本處理器領(lǐng)域中那些技術(shù)人員所知的高速緩存操作。
本發(fā)明舉例說明的實施例的上述描述,包括抽象描述的那些,沒有想要窮舉或來限定本發(fā)明到公開的精確形式。同時用于本發(fā)明的特定的實施例和例子在這里被描述用于說明性的目的,在本發(fā)明的范疇內(nèi)各種等效的修改是可能的,正如本相關(guān)領(lǐng)域中的那些技術(shù)人員將會認(rèn)識到的。
能夠根據(jù)上述詳細(xì)說明對本發(fā)明作出這些修改。在下面權(quán)利要求中使用的術(shù)語將不會被解釋為限定本發(fā)明到在所述說明書和附圖中公開的特殊的實施例。更確切些,本發(fā)明的范圍將完全地由下列權(quán)利要求確定,其將被按照權(quán)利要求解釋建立的學(xué)說解釋。
權(quán)利要求
1.一種方法,包括使程序員或編譯程序中的一個描繪部分代碼,用于一個高速緩存的相應(yīng)的高速緩存回收策略將被使用于所述代碼,以及使用如由所述程序員或編譯程序在執(zhí)行代碼的運行期間描繪的所述高速緩存回收策略以從所述高速緩存中回收超高速緩沖存儲器線。
2.如權(quán)利要求1所述的方法,進一步包括使一個程序員能夠定義部分源級代碼,一個指定的高速緩存回收策略應(yīng)用于所述代碼;和將所述源級代碼編譯成為機器代碼,其中所述機器代碼包括參與將指定的高速緩存回收策略應(yīng)用于機器代碼的相應(yīng)部分,所述相應(yīng)部分機器代碼來源于所述部分源級代碼,所述指定的高速緩存回收策略將被應(yīng)用于所述部分源級代碼。
3.如權(quán)利要求2所述的方法,進一步包括程序員能夠通過在所述源級代碼中插入聲明來定義所述指定的高速緩存回收策略將被應(yīng)用于其中的部分源級代碼來描繪那些部分。
4.如權(quán)利要求2所述的方法,進一步地包括使所述程序員能夠分配第一優(yōu)先級給所選擇的部分源級代碼,其中其它部分的源級代碼缺省被分配第二缺省優(yōu)先級;和響應(yīng)于包含在所述機器代碼中的提示,將第一高速緩存回收策略應(yīng)用于與來源于選擇的部分源級代碼的機器代碼有關(guān)的數(shù)據(jù)和/或指令,第一優(yōu)先級被分配給該部分源級代碼,同時將第二高速緩存回收策略應(yīng)用于與來源于另一部分源級的機器代碼有關(guān)的數(shù)據(jù)和/或指令,缺省優(yōu)先級被分配給該另一部分的源級。
5.如權(quán)利要求2所述的方法,進一步包括使所述程序員能夠分配各自的優(yōu)先級給選擇的部分源級代碼,所述各自的優(yōu)先級包括至少三個不同的優(yōu)先級,響應(yīng)于包含在所述機器代碼中的提示,對于分配給每個優(yōu)先級的部分源級代碼,將各自的高速緩存回收策略應(yīng)用于與來源于那些部分源級代碼的機器代碼有關(guān)的數(shù)據(jù)和/或指令。
6.如權(quán)利要求1所述的方法,進一步包括把一個高速緩存劃分成為多個具有不同優(yōu)先級的優(yōu)先級存儲池;和參考包含在所述超高速緩沖存儲器線中的數(shù)據(jù)和/或指令,在一個特殊的由至少一個包含在部分代碼中的提示所指定的優(yōu)先級存儲池中有選擇地高速緩存一個超高速緩沖存儲器線。
7.如權(quán)利要求6所述的方法,進一步包括將各自的超高速緩沖存儲器線回收策略應(yīng)用于每個相應(yīng)的優(yōu)先級存儲池。
8.如權(quán)利要求6所述的方法,其中所述高速緩存包括具有n組的n路組相聯(lián)高速緩存,所述方法進一步包括通過將各自的優(yōu)先級存儲池分配給n組的每一組來把所述高速緩存劃分成為多個優(yōu)先級存儲池。
9.如權(quán)利要求6所述的方法,進一步包括保持用于每個超高速緩沖存儲器線的標(biāo)記,所述標(biāo)記識別一個被分配給那個超高速緩沖存儲器線的優(yōu)先級存儲池。
10.如權(quán)利要求6所述的方法,進一步包括使選擇的優(yōu)先級存儲池的尺寸能夠在程序代碼執(zhí)行期間被動態(tài)地改變。
11.如權(quán)利要求6所述的方法,進一步包括提供一個指令集,其包括分配超高速緩沖存儲器線給選擇的高速緩存存儲池的指令。
12.如權(quán)利要求11所述的方法,其中所述指令集包括分配一個超高速緩沖存儲器線給具有一個特殊的優(yōu)先級的高速緩存存儲池的指令。
13.如權(quán)利要求11所述的方法,其中所述指令集包括設(shè)置一個標(biāo)志或多個位寄存器的其中一個用來分配一個超高速緩沖存儲器線給具有特定優(yōu)先級的高速緩存存儲池的指令。
14.如權(quán)利要求1所述的方法,進一步包括使所述程序員或編譯程序的其中一個能夠通過使用對應(yīng)于所述機器代碼的匯編語言指令來指定使用特定的高速緩存回收策略用于選擇的部分機器代碼。
15.如權(quán)利要求1所述的方法,進一步包括遵守用于部分應(yīng)用程序的存儲器存取模式,確定特殊的高速緩存回收策略將被應(yīng)用于其中的部分應(yīng)用程序;標(biāo)明那些部分應(yīng)用程序;以及再編譯應(yīng)用程序以產(chǎn)生包括操作碼的機器代碼,所述操作碼用于參與將所述特定的高速緩存回收策略應(yīng)用于部分被標(biāo)明的應(yīng)用程序。
16.如權(quán)利要求15所述的方法,其中確定特定的高速緩存回收策略將被應(yīng)用于其中的部分應(yīng)用程序,和標(biāo)明那些部分是通過代碼調(diào)整工具自動執(zhí)行地。
17.如權(quán)利要求1所述的方法,其中所述高速緩存包括第一級(L1)高速緩存。
18.如權(quán)利要求1所述的方法,其中高速緩存包括第二級(L2)高速緩存。
19.如權(quán)利要求1所述的方法,其中所述高速緩存包括第三級(L3)高速緩存。
20.一種處理器,包括一個處理器核心,一個高速緩存控制器,其耦合到所述處理器核心;一個第一高速緩存,由所述高速緩存控制器控制并且可操作地被耦合以從所述處理器核心接收數(shù)據(jù)以及提供數(shù)據(jù)到所述處理器核心,所述高速緩存包括至少一個標(biāo)記陣列以及至少一個超高速緩沖存儲器線陣列,其中所述高速緩存控制器被編程來劃分所述第一高速緩存成為多個存儲池,并且對每個存儲池應(yīng)用各自的高速緩存回收策略。
21.如權(quán)利要求20所述的處理器,其中第一高速緩存包括第一級(L1)高速緩存,其耦合到所述處理器。
22.如權(quán)利要求20所述的處理器,其中第一高速緩存包括第二級(L2)高速緩存,所述處理器進一步地包括第一級(LI)高速緩存,其耦合在所述處理器和L2高速緩存之間并且由所述高速緩存控制器來控制。
23.如權(quán)利要求20所述的處理器,其中所述高速緩存包括至少一個與每個超高速緩沖存儲器線有關(guān)的存儲池標(biāo)識符(ID)位,所述至少一個存儲池ID位用來指定所述超高速緩沖存儲器線被分配到其中的存儲池。
24.如權(quán)利要求23所述的處理器,其中所述高速緩存控制器被編程來允許用于一個超高速緩沖存儲器線的至少一個存儲池ID位能夠響應(yīng)于從所述處理器核心接收的輸入而被改變,從而動態(tài)地改變至少一個存儲池的尺寸。
25.如權(quán)利要求20所述的處理器,其中所述高速緩存包括n路組相聯(lián)高速緩存。
26.如權(quán)利要求25所述的處理器,其中所述n路組相聯(lián)高速緩存包括n組超高速緩沖存儲器線,每一組超高速緩沖存儲器線與一個不同的存儲池有關(guān)聯(lián),并且其中所述高速緩存控制器為每個存儲池提供各自的高速緩存回收策略。
27.如權(quán)利要求20所述的處理器,其中所述處理核心支持執(zhí)行一個包括至少一個存儲器存取指令的指令集,所述存儲器存取指令包括一個提示以指定一個存儲池,其中一個包含位于一個由所述存儲器存取指令引用的存儲器地址的數(shù)據(jù)和/或指令的超高速緩沖存儲器線將被分配給所述存儲池,并且其中由所述處理核心執(zhí)行上述的存儲器存取指令來促使將被執(zhí)行的操作包括響應(yīng)于一個高速緩存未中,確定一個存儲池,根據(jù)在存儲器存取指令中的提示,一個新的超高速緩沖存儲器線將被分配給所述存儲池;選擇一個現(xiàn)存的超高速緩沖存儲器線以從所述使用分配給所述存儲池的高速緩存回收策略確定的存儲池中回收;檢索一個將被插入超高速緩沖存儲器線中的數(shù)據(jù)塊,所述數(shù)據(jù)塊包括在系統(tǒng)存儲器中由所述存儲器存取指令參考的地址處存儲的數(shù)據(jù)和/或指令;和拷貝所述數(shù)據(jù)塊到所述被選擇為回收的超高速緩沖存儲器線中。
28.一種計算機系統(tǒng),包括存儲器,存儲程序指令和數(shù)據(jù),包括SDRAM(同步的動態(tài)隨機存取存儲器);一個存儲控制器,用于控制對所述存儲器的存取,和一個處理器,其耦合到所述存儲控制器,包括,一個處理器核心;一個高速緩存控制器,其耦合到所述處理器核心;一個第一級(L1)高速緩存,由所述高速緩存控制器控制并且可操作地被耦合以從所述處理器核心接收數(shù)據(jù)和提供數(shù)據(jù)到所述處理器核心;以及第二級(L2)高速緩存,由所述高速緩存控制器控制并且可操作地被耦合以從所述處理器核心接收數(shù)據(jù)和提供數(shù)據(jù)到所述處理器核心,其中所述高速緩存控制器被編程以便將L1和L2高速緩沖存儲器的至少一個劃分成為多個存儲池,并且把各自的高速緩存回收策略應(yīng)用于每個存儲池。
29.如權(quán)利要求28所述的計算機系統(tǒng)其中所述L2高速緩存包括一個包括n組超高速緩沖存儲器線的n路組相聯(lián)高速緩存,每組超高速緩沖存儲器線與不同的存儲池有關(guān)聯(lián),并且其中所述高速緩存控制器為每個存儲池提供各自的高速緩存回收策略。
30.如權(quán)利要求28所述的計算機系統(tǒng),其中所述LI高速緩存包含一個Harvard結(jié)構(gòu),其包括指令高速緩沖存儲器和數(shù)據(jù)高速緩沖存儲器,并且其中所述指令高速緩沖存儲器控制器被編程以便將用于所述指令高速緩沖存儲器的超高速緩沖存儲器線劃分成為多個存儲池,所述高速緩存控制器對每個存儲池使用各自的超高速緩沖存儲器線回收策略。
全文摘要
一種允許程序控制超高速緩沖存儲器線回收策略的方法和裝置。提供一個機制使程序員能夠用不同的高速緩存優(yōu)先級根據(jù)預(yù)期的或測量的用于那些代碼部分的存取模式來標(biāo)明部分代碼。參與影響所述與給定的優(yōu)先級有關(guān)的高速緩存回收策略的相應(yīng)的提示被嵌入在從源和/或匯編級代碼中產(chǎn)生的機器代碼中。提供高速緩存結(jié)構(gòu),把高速緩存間隔劃分成為多個存儲池,每個存儲池被分配不同的優(yōu)先級。響應(yīng)于執(zhí)行一個存儲器存取指令,根據(jù)包含在所述指令的提示中的信息選擇和搜索適當(dāng)?shù)母咚倬彺娲鎯Τ?。一旦一個高速緩存未中,使用一個與所述存儲池有關(guān)的高速緩存回收策略,從那些被回收的存儲池中選擇一個超高速緩沖存儲器線。實現(xiàn)機制或所描述的用于n路組相聯(lián)高速緩存和全相聯(lián)高速緩存兩者。
文檔編號G06F12/08GK1804816SQ200510121558
公開日2006年7月19日 申請日期2005年12月29日 優(yōu)先權(quán)日2004年12月29日
發(fā)明者M·卡波特 申請人:英特爾公司