專利名稱:清除而不用寫回包含失效數(shù)據(jù)的高速緩存行的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機,更具體地說,涉及高速緩存管理。本發(fā)明的主要目的是通過消除某些將無用數(shù)據(jù)寫回到主存儲器的操作來提高計算機性能。
背景技術(shù):
許多的現(xiàn)代進步與計算機技術(shù)中的提高有關(guān)。計算機系統(tǒng)通常包括用于存儲數(shù)據(jù)和程序指令的存儲器以及依照程序指令處理數(shù)據(jù)的處理器。典型的處理器包含一起制造在集成電路上的許多裝置,使得它們可以以很高速度相互通信。雖然少量的存儲器能與處理器駐留在一個集成電路上,但是主存儲器通常是外置的。因此,對計算機而言,存儲器存取可能是性能限制者。對技術(shù)應(yīng)用而言,這是特別正確的,其中處理器常常急需來自存儲器的數(shù)據(jù)。
高速緩存是保留存儲器的最近訪問區(qū)域的副本的存儲裝置,使得處理器能從高速緩存而不是從存儲器讀取某些數(shù)據(jù)??梢詫⑺俣群芸斓母咚倬彺媲队诰哂刑幚砥鞯耐患呻娐穬?nèi)部或比主存儲器更近地耦合到處理器的外部電路上。芯片內(nèi)高速緩存往往是最快的但具有最大受限容量。芯片外高速緩存往往更大和更慢,然而相對于主存儲器存取來說,仍提供了大速度優(yōu)勢。
不但讀操作而且寫操作都可以使用高速緩存來加速。寫入高速緩存單元比寫入主存儲器單元花費少得多的時間。然而,通常,寫入高速緩存單元的數(shù)據(jù)必須寫入主存儲器;否則,高速緩存和存儲器將不匹配,即它們將是“不相干的”。因此,某些“直寫”高速緩存在數(shù)據(jù)寫入高速緩存之后,盡可能快地將數(shù)據(jù)拷貝到主存儲器。
然而,通過延遲寫回到主存儲器直到它們是必需的,其它的“寫回”(或“拷貝回”)高速緩存實現(xiàn)某些性能優(yōu)點。在直寫高速緩存中,高速緩存行的每個修改導(dǎo)致分別寫回主存儲器;在寫回高速緩存中,任何參與修改可能包括在單個寫回中。例如,寫回高速緩存可以延遲行的寫回直到將要替換它,以便為最近取出的數(shù)據(jù)騰出空間。在這種情況下,不管用于高速緩存行的修改的數(shù)目如何,只需要一個寫回。
這種寫回策略不僅在對同一高速緩存行執(zhí)行多次寫時,而且在其它情況下,減少存儲器存取并改善性能。例如,當(dāng)外部裝置直接寫入存儲器時,該數(shù)據(jù)不應(yīng)當(dāng)被高速緩存中的數(shù)據(jù)覆寫。因此,裝置驅(qū)動器能發(fā)出高速緩存行的清除指令(例如,如惠普公司開發(fā)的PA-Risc體系結(jié)構(gòu)所規(guī)定的),這些高速緩存行對應(yīng)于裝置要寫入的那些存儲器區(qū)域。從不寫回清除的數(shù)據(jù),節(jié)約了對應(yīng)的存儲器存取。雖然前面的高速緩存策略已提供了性能改善,但是期望更多的性能增益。
發(fā)明內(nèi)容
本發(fā)明提供了具有高速緩存的系統(tǒng),該高速緩存指示其哪個(如果有)區(qū)域包含具有失效狀態(tài)的數(shù)據(jù)。本發(fā)明也提供一種方法,用于識別包含具有失效狀態(tài)的數(shù)據(jù)的高速緩存區(qū)域,然后清除具有包含具有失效狀態(tài)的數(shù)據(jù)的至少一個區(qū)域的高速緩存行而不寫回到主存儲器。本發(fā)明還提供了指明包含將獲得“失效”狀態(tài)的數(shù)據(jù)的高速緩存行區(qū)域的程序。本文中的“失效”數(shù)據(jù)是無效修改的或未修改的數(shù)據(jù),該數(shù)據(jù)至少以前當(dāng)將其寫入高速緩存時可能是有效的數(shù)據(jù)。“清除”涵蓋使無效和替代兩方面。通過參照下面的附圖和下面的描述實現(xiàn)包括某些本發(fā)明更具體方面的本發(fā)明。
下面的圖描述了本發(fā)明的具體實施例,并不是本發(fā)明自身的描述。
圖1是依照本發(fā)明的計算機系統(tǒng)的示意性的框圖。
圖2是在圖1的計算機系統(tǒng)的環(huán)境中實現(xiàn)的本發(fā)明的方法的流程圖。
圖3是依照本發(fā)明用于圖1中所示的系統(tǒng)的備選高速緩存的狀態(tài)區(qū)域的示意圖。
具體實施例方式
依照本發(fā)明的計算機系統(tǒng)AP1包括執(zhí)行單元11、存儲器13、指令高速緩存15、數(shù)據(jù)高速緩存17、數(shù)據(jù)高速緩存管理器19。存儲器13存儲程序21和數(shù)據(jù)23,后者依照程序21的指令來處理。
數(shù)據(jù)高速緩存17具有12條高速緩存行L1-LC,每個高速緩存行是16字節(jié)寬并被分為4個32位區(qū)域。本發(fā)明的備選實施例包括具有不同深度、寬度和區(qū)域數(shù)的數(shù)據(jù)高速緩存。事實上,本發(fā)明的優(yōu)點之一是程序員或編譯器不需要預(yù)先知道高速緩存的結(jié)構(gòu)或尺寸以實現(xiàn)本發(fā)明提供的性能增益。
數(shù)據(jù)高速緩存17具有為每個高速緩存行描述整體狀態(tài)的兩個狀態(tài)字段。第一個“有效性”狀態(tài)位指示該行是否包含有效(V)或無效(I)數(shù)據(jù);第二個“修改”狀態(tài)位指示有效數(shù)據(jù)是否處于其原始未修改形式(U)并因此匹配存儲器中的副本或已被修改(M)并且因此不同于存儲器中的副本。在備選實施例中,可使用附加狀態(tài)字段以指示用于多處理器實施例的排他和共享。
所說明的實施例中的下面四個狀態(tài)字段用于各個高速緩存行區(qū)域。每個區(qū)域狀態(tài)字段為各個區(qū)域指示它所包含的有效修改的數(shù)據(jù)是否是持久的(D)、不經(jīng)久的(P)或失效的(S)。在高速緩存17中,未修改的有效數(shù)據(jù)是持久的。修改的有效數(shù)據(jù)可能是持久的、不經(jīng)久的或失效的。在清除(例如,覆寫或標(biāo)記無效)高速緩存行之前,必須將包含修改的持久的數(shù)據(jù)或不經(jīng)久數(shù)據(jù)的高速緩存行寫回到存儲器;只包含失效數(shù)據(jù)的高速緩存行在被清除前不寫回。
在向高速緩存17中未表示的主存儲單元尋址的常規(guī)讀操作期間,從主存儲器取出一行數(shù)據(jù)并存儲在高速緩存17中。如圖1對于高速緩存行L1所示,存儲數(shù)據(jù)的高速緩存行則標(biāo)記為有效(V)和未修改(U),而缺省情況下每個區(qū)域標(biāo)記為持久的(D)??蓮母咚倬彺嫘蠰1得到滿足的讀保持高速緩存行狀態(tài)未修改,而常規(guī)的向同一行寫會將狀態(tài)從未修改變?yōu)樾薷?,如對于行L2所示。當(dāng)向未在高速緩存中表示的存儲單元寫時,也可獲得行L2的狀態(tài);在那種情況下,將存儲單元的內(nèi)容拷貝到高速緩存,然后覆寫。
依照本發(fā)明,程序21包括導(dǎo)致高速緩存數(shù)據(jù)被標(biāo)記“失效”的兩種類型的新指令。一執(zhí)行,直接指令導(dǎo)致數(shù)據(jù)被標(biāo)記失效?;竞x是“在對應(yīng)于指定主存儲器地址范圍的高速緩存單元中標(biāo)記為失效數(shù)據(jù)”。該范圍可對應(yīng)于單獨區(qū)域或任何數(shù)目的區(qū)域,甚至跨越多個高速緩存行。
直接指令的實例是如圖1中I-高速緩存15所示的“標(biāo)記為失效”。該指令指明主存儲器的一個或多個32位區(qū)域。一執(zhí)行“標(biāo)記為失效”指令,如果在數(shù)據(jù)高速緩存17中存在對應(yīng)于指定存儲器區(qū)域的行區(qū)域,則將行區(qū)域標(biāo)記“失效”。數(shù)據(jù)高速緩存17的行L3表示前一狀態(tài)(諸如對于行L2所示)之后“標(biāo)記為失效”指令的結(jié)果。如果在數(shù)據(jù)高速緩存17中沒有對應(yīng)區(qū)域,不會導(dǎo)致高速緩存狀態(tài)變化。“標(biāo)記為失效”指令允許指示許多區(qū)域,有效指明主存儲器區(qū)域地址的范圍;達到指定的主存儲器地址在數(shù)據(jù)高速緩存17中表示的程度,它們被標(biāo)記“失效”。范圍不需要與高速緩存行邊界一致并能夠一次影響多個高速緩存行。
直接指令的另一個實例是在圖1中I-高速緩存15中表示的“讀最后一次”指令。該指令指明單個主存儲器區(qū)域。如常規(guī)讀指令中一樣,如果指定區(qū)域在數(shù)據(jù)高速緩存17表示,則從中讀所請求數(shù)據(jù),如果指定區(qū)域在高速緩存中未表示,則從主存儲器拷貝,然后從數(shù)據(jù)高速緩存17讀取。在任一情況下,將對應(yīng)區(qū)域標(biāo)記“失效”。在圖1,行L4表示用于行L4的區(qū)域S2的“讀最后一次”指令的結(jié)果,其先前狀態(tài)對應(yīng)于為行L3所示的狀態(tài)。
條件指令定義條件,當(dāng)符合條件時,會導(dǎo)致數(shù)據(jù)變?yōu)槭?。例如,條件指令能指明下一次讀該數(shù)據(jù)之后,將數(shù)據(jù)標(biāo)記失效。條件指令通常是寫指令,使得將條件指定為數(shù)據(jù)寫到高速緩存。然而,本發(fā)明規(guī)定適用于先前寫到高速緩存的數(shù)據(jù)的條件指令。
條件指令的一個實例是如指令高速緩存15中所示的“寫為讀一次”。符合條件,下次寫入的區(qū)域是下次讀,如指令高速緩存15中“讀字”指令所表示。對數(shù)據(jù)高速緩存17中在高速緩存行L5、區(qū)域S4所表示的存儲區(qū)域執(zhí)行“寫為讀一次”指令的結(jié)果如圖1所示,其中高速緩存行L5的先前狀態(tài)對應(yīng)于如圖1所示的高速緩存行L1或高速緩存行L2。對于具有如對行L5所示的先前狀態(tài)的高速緩存行,對于在高速緩存中如行L6、區(qū)域S3所表示的指定主存儲器區(qū)域的單個字,“標(biāo)記為讀一次”指令的結(jié)果如圖1所示。在高速緩存行L7示出了指明一系列區(qū)域的“標(biāo)記為讀一次”指令的結(jié)果,其中先前狀態(tài)如對于高速緩存行L4-L6中任一行所示,主存儲器區(qū)域的范圍對應(yīng)于高速緩存行L7的區(qū)域S1-S4。
高速緩存行L7表示其中的所有區(qū)域已被標(biāo)記“讀一次”的高速緩存行。因此,所有區(qū)域狀態(tài)位指示“不經(jīng)久的”(P)。高速緩存L8表示其中所有區(qū)域已被標(biāo)記“讀一次”并且已讀了一個區(qū)域S4的狀態(tài)。狀態(tài)位指示三個不經(jīng)久區(qū)域和一個失效區(qū)域。行L9與行L8相似,但是具有從區(qū)域S3附加讀。行LA和行LB與行L9相似,但具有分別從區(qū)域S2和S1附加讀?;蛘?,使用如上所述的“標(biāo)記為失效”指令或“讀”(讀一次數(shù)據(jù))和“標(biāo)記為失效”指令的組合可得到高速緩存行LB。表I列出本發(fā)明規(guī)定的某些指令。
在實現(xiàn)對于行LB所示的“所有失效”狀態(tài)之后,行LC表示由于清除而達到的狀態(tài)。將行標(biāo)記無效并且其余狀態(tài)位是無意義的。在所說明的實例中,一將所有區(qū)域標(biāo)記“失效”就使高速緩存行無效。在備選實施例中,完全失效的高速緩存行保持有效性直到它們被覆寫。在任何情況下,行LB可用于覆寫而不先回寫到主存儲器。
如圖1的系統(tǒng)AP1中實現(xiàn)的方法M1用圖2中的流程圖來描述,該方法在程序驅(qū)動步驟SP1-SP3和高速緩存管理器步驟SM1-SM4之間有區(qū)別。程序驅(qū)動步驟SP1包括執(zhí)行指明成為失效的條件的指令。例如,指令可以是“寫為讀一次”指令。執(zhí)行該指令導(dǎo)致高速緩存管理器19標(biāo)記利用條件寫入的區(qū)域,以使其包含的數(shù)據(jù)呈現(xiàn)為具有失效狀態(tài)。(本文,認(rèn)為標(biāo)記失效的區(qū)域及認(rèn)為本文標(biāo)記失效的數(shù)據(jù)不存在實際的不同。)例如,條件可以是一旦從包含區(qū)域下一次讀,數(shù)據(jù)是失效的。
步驟SP2包括執(zhí)行導(dǎo)致符合條件的指令。如在讀指令的情況下,當(dāng)已將數(shù)據(jù)標(biāo)為讀一次時,該步驟可能是單個步驟?;蛘?,如在第四個讀指令的情況下,當(dāng)數(shù)據(jù)被寫為“讀四次”時,該步驟可能是若干個步驟中的最后一個。如“與”門31所示,利用條件已被標(biāo)記的區(qū)域的最后條件步驟的執(zhí)行導(dǎo)致該區(qū)域在步驟SM2被標(biāo)記“失效”。
步驟SM2也能從程序驅(qū)動步驟SP3直接實現(xiàn),SP3包括直接指明將數(shù)據(jù)標(biāo)記失效的指令(例如“標(biāo)記為失效”指令或“讀最后一次”指令)的執(zhí)行。每次將高速緩存行的一個區(qū)域標(biāo)記失效,則在步驟CM3,高速緩存管理器19檢驗整體的高速緩存行以確定是否已將所有的區(qū)域標(biāo)記失效。如果它們沒有被標(biāo)記失效,沒有任何操作發(fā)生。如果它們已被標(biāo)記失效,在步驟CM4可立即或在要求覆寫時清除行。
在系統(tǒng)AP1中,一旦確定所有區(qū)域包含失效數(shù)據(jù),則使行無效。使高速緩存行無效或其它方式使其比其它有效高速緩存行更適合替代,減少有用數(shù)據(jù)將從高速緩存中被替代的可能性-通常提高命中率。在備選實施例中,不將失效高速緩存行標(biāo)記無效,但是無論何時將其清除都不回寫,例如,使得可由最近提取的數(shù)據(jù)來覆寫該高速緩存行。
更廣義地說,本發(fā)明提供一些實施例,其中例如通過標(biāo)記“無效”,立即清除一些高速緩存行,而另一些只是在替代時被清除。圖3示出了其它方面與系統(tǒng)AP1可比較的系統(tǒng)中用于備選高速緩存17B的狀態(tài)字段。在高速緩存17B中,不存在行狀態(tài)位,但每個區(qū)域有四個狀態(tài)位。對于每個區(qū)域,存在指示該區(qū)域中的數(shù)據(jù)是否有效(+)或無效(-)的有效(V)位;指示該區(qū)域中的數(shù)據(jù)是否修改(+)或未修改(-)的“修改”(M)位;指示該區(qū)域中的數(shù)據(jù)是否持久(+)或非持久(-)的“持久”位;指示該區(qū)域中的數(shù)據(jù)是否失效(+)或未失效(-)的“失效”位?!胺浅志谩焙w“失效”和“未失效”兩方面,后者等價于圖1中的“不經(jīng)久”。在圖3,空白單元格指示用于相應(yīng)標(biāo)記的值是無意義的,例如,當(dāng)區(qū)域具有無效數(shù)據(jù)時,修改、持久和失效的標(biāo)記是無意義的。
高速緩存17B的行L1表示所有區(qū)域被標(biāo)記有效、修改、非持久及失效的行;如對于行L2所示,通過將所有區(qū)域標(biāo)記無效,一將最后區(qū)域暫時地標(biāo)記失效就使該行無效,因此對覆寫給予了高優(yōu)先級。行L3表示前三個區(qū)域S1-S3具有失效數(shù)據(jù)并且第四個區(qū)域S4被標(biāo)記無效的行;按照行L2的格式立即使該行無效。因為行L1-L3是無效的,可向它們寫入新數(shù)據(jù)而不用寫回。
高速緩存17B的行L4具有包含失效數(shù)據(jù)的區(qū)域S1-S3以及包含有效未修改持久數(shù)據(jù)的區(qū)域S4。不立即使具有這種狀態(tài)組合的行無效,因為未修改持久的數(shù)據(jù)可能仍證明是有用的。然而,如果將其替換,不會將其寫回。行L5具有包含失效數(shù)據(jù)的區(qū)域S1-S3以及包含有效未修改不經(jīng)久(未失效)數(shù)據(jù)的區(qū)域S4。也不立即使該行無效,因為仍可能需要讀未修改不經(jīng)久的數(shù)據(jù)。然而,如果將其替換,不會將其寫回。在行L6,區(qū)域S1包含失效修改的數(shù)據(jù),區(qū)域S2被標(biāo)記無效,區(qū)域S3包含未修改持久的數(shù)據(jù),區(qū)域S4包含未修改非持久未失效的數(shù)據(jù)。當(dāng)該行被替換時,不將其寫回。
高速緩存17B的行L7具有包含失效數(shù)據(jù)的區(qū)域S1-S3以及包含不經(jīng)久修改數(shù)據(jù)的區(qū)域S4。除了區(qū)域S4包含修改的持久數(shù)據(jù),行L8是類似的。這些行都包含未失效修改的數(shù)據(jù)。因此,當(dāng)它們被替換時,都必須從高速緩存17B寫回。
本發(fā)明提供用于跟蹤行和區(qū)域狀態(tài)的許多備選方法。例如,在與圖1所示系統(tǒng)類似的系統(tǒng)中,將具有修改持久數(shù)據(jù)的區(qū)域與具有未修改持久數(shù)據(jù)的區(qū)域區(qū)分,所以每區(qū)域存在用兩位表示的四種狀態(tài)未修改持久數(shù)據(jù)、修改持久數(shù)據(jù)、不經(jīng)久數(shù)據(jù)、失效數(shù)據(jù)。當(dāng)將要覆寫行時,如果該行區(qū)域僅包含失效和未修改持久數(shù)據(jù),可跳過寫回。如果該行包含任一修改的數(shù)據(jù)或不經(jīng)久數(shù)據(jù),則將其寫回。在另一個實施例中,將未修改的不經(jīng)久數(shù)據(jù)與修改的不經(jīng)久數(shù)據(jù)區(qū)分,以便一替換就僅將具有修改的不經(jīng)久或持久數(shù)據(jù)的行寫回。
對于程序員或編譯器,存在許多機會來優(yōu)化代碼以利用本發(fā)明。例如,通過注意到數(shù)組對于程序是局部的,在程序的右側(cè)僅發(fā)生一次,用于引用數(shù)組的索引表達是從循環(huán)索引到數(shù)組索引的一對一映射,編譯器能推斷數(shù)組具有讀一次屬性?;蛘撸幾g器通過指針分析或另外的機制能發(fā)現(xiàn)該點。程序員也能注解變量,指示它們具有讀一次屬性。使用在指令集中支持的機制,編譯器則能產(chǎn)生適當(dāng)?shù)臋C器碼以通知高速緩存行由讀一次數(shù)據(jù)組成。
本發(fā)明提供了新高速緩存特征的組合、使用它們的指令、能共同抑制寫到存儲器和從存儲器讀的通信量的軟件。能將這些用于避免處理器中產(chǎn)生的并由在同一處理器芯片上的相同或另一個處理器在短時間之后消耗的數(shù)據(jù)流的存儲器通信量。數(shù)據(jù)被路由通過高速緩存并且從不在主存儲器中存儲?!岸虝r間之后”意味著已產(chǎn)生并還沒有消耗的活數(shù)據(jù)集能足夠快地裝入高速緩存,無需在使用之前由于容量或沖突而覆寫。也能更一般地使用它們,例如,抑制已知無用的變量寫回,例如超出范圍的自動變量。
在流式傳輸?shù)木唧w實例中,階段1是以從開始到最后的順序?qū)⒁痪S數(shù)組的元素寫入的“for”循環(huán)for(k=1;k<100000;k++)a[k]=f(k);階段2消耗數(shù)據(jù)流,以相同的順序讀a的元素for(j=1;j<100000;j++)=a[j];如果程序在執(zhí)行階段2之前全部執(zhí)行階段1,可能通過高速緩存分級結(jié)構(gòu)的一些級已將數(shù)據(jù)寫回到主存儲器。通過重新組織該程序,程序員能確信階段1寫數(shù)組“a”的元素之后不久,階段2讀這些元素,所以很可能它們?nèi)择v留在處理器的本地高速緩存中,因此階段2更快地可得到它們。例如,程序員可決定重寫程序以便在階段1產(chǎn)生數(shù)組“a”的100個元素之后,階段2消耗它們
for(block=0;block<1000;block++){for(k=100*block;k<100*(block+1);k++)a[k]=f(k);for(j=100*block;j<100*(block+1);j++)=a[j];}或者,能安排階段1和階段2并行運行,階段2落后階段1正好足以在階段2消耗數(shù)據(jù)之前,階段1產(chǎn)生數(shù)據(jù)。通過這種重新安排,能減少階段1已寫的且階段2仍未讀的中間數(shù)組的元素數(shù)目。使得階段1產(chǎn)生的但仍未被階段2消耗的工作數(shù)據(jù)集減少到能在高速緩存中保持的大小的這種工作的重新安排也能通過編譯器或通過其它程序開發(fā)工具自動完成。
實際上,為了減少內(nèi)部循環(huán)嵌套的工作集的大小以便提高時間局部性并增加高速緩存命中率,編譯器作這種重新安排。如果利用常規(guī)寫回高速緩存在機器上完成這種實現(xiàn),能成功消除通過階段2從主存儲器讀數(shù)據(jù)-高速緩存提供數(shù)據(jù)。然而,沒有消除向主存儲器寫無用數(shù)據(jù)。首先將“a”的每個元素寫入到標(biāo)記為臟(比主存儲器具有更加新的數(shù)據(jù))的高速緩存行。在另一個高速緩存行覆寫該行之前,該行將被寫回到存儲器。
在很多情況下,程序員會知道或編譯器能確定,階段2是數(shù)組“a”的唯一讀取者。該數(shù)組具有“讀一次”特征-數(shù)組的每個元素值將載入寄存器最多一次。換句話說,在數(shù)組的任何元素的任何兩次載入之間,會存在對該元素的介入存儲。為在編譯器中下決定,能將現(xiàn)代數(shù)據(jù)依靠技術(shù)(包括仿射數(shù)組索引表達式的分析以及使用分析工具決定線性不等式和等式組的整數(shù)解的存在)擴展以確定數(shù)組數(shù)據(jù)的活性。
當(dāng)覆寫保留讀一次數(shù)組的元素的高速緩存行時,十分可能高速緩存行中的數(shù)據(jù)是“失效的”,意味著它們不會在程序中隨后被引用。如果在覆寫行之前,從階段2對于高速緩存行中的數(shù)組元素的所有讀已發(fā)生,則這將發(fā)生在我們的實例中。所以會存在修改的但失效的高速緩存中的行。在本發(fā)明中,高速緩存意識到這點,所以不是通過寫回到存儲器來覆寫行,它只是使該行無效,不利用存儲器寫而使高速緩存空間可用。
本發(fā)明提供上述實施例的許多備選方案。指令能指明各個區(qū)域或區(qū)域范圍;范圍能在多個高速緩存行上延伸。如在這里看到的,指明區(qū)域范圍的指令也指明“一個區(qū)域”,例如,范圍的第一區(qū)域。指令能為認(rèn)為失效的數(shù)據(jù)指明各種各樣的條件。例如,數(shù)據(jù)能讀一次、讀n次,等于常數(shù)例如0等。當(dāng)某些但不是所有的高速緩存行區(qū)域包含失效數(shù)據(jù)時,只要沒有一個包含非失效修改的數(shù)據(jù),本發(fā)明規(guī)定清除而無需寫回。例如,某些區(qū)域可包括清除或無效的數(shù)據(jù)而不是失效數(shù)據(jù)。在這些情況下,每區(qū)域可要求額外的標(biāo)記位。或者,失效標(biāo)記能具有額外的意義--例如,失效的標(biāo)記值能與無效數(shù)據(jù)的標(biāo)記值相等。
本發(fā)明規(guī)定將至少一個高速緩存行清除而不用寫回,該高速緩存行中所有的區(qū)域包含失效數(shù)據(jù)。然而,寫回某些僅包括失效數(shù)據(jù)的高速緩存行在本發(fā)明的范圍之內(nèi)。對于這種顯然浪費的寫回存在各種原因,但是這些不排除通過執(zhí)行的清除而不用寫回失效數(shù)據(jù)所提供的性能優(yōu)勢。
在一個方面,本發(fā)明提供指明包含將獲得“失效”狀態(tài)的數(shù)據(jù)的高速緩存行區(qū)域的計算機程序。最好是,利用將存儲區(qū)域與高速緩存行區(qū)域關(guān)聯(lián)的高速緩存管理器按照對應(yīng)(邏輯或物理)的主存儲器單元指明高速緩存行區(qū)域。指明失效數(shù)據(jù)能要求單指令或兩個或兩個以上指令的組合。例如,單指令能指明在對應(yīng)于指定的主存儲器區(qū)域的高速緩存區(qū)域中包含的數(shù)據(jù)是失效的。或者,本發(fā)明規(guī)定將數(shù)據(jù)讀標(biāo)記為失效的讀指令。
本發(fā)明還規(guī)定指明數(shù)據(jù)將獲得失效狀態(tài)的條件的指令。有利地,寫指令能指明條件,當(dāng)符合該條件時,將使寫到高速緩存的數(shù)據(jù)失效;當(dāng)執(zhí)行隨后的指令時,將符合條件。例如,寫指令能指明讀正寫到高速緩存的數(shù)據(jù)的次數(shù)。一旦讀該數(shù)據(jù)指定次數(shù),數(shù)據(jù)將被認(rèn)為失效。
在另一個方面,本發(fā)明提供包括高速緩存和高速緩存管理器的計算機系統(tǒng)。最好是,本系統(tǒng)包括執(zhí)行指明哪個數(shù)據(jù)失效的程序的執(zhí)行單元。高速緩存管理器能識別對應(yīng)于程序指令所指明的主存儲器地址的高速緩存行和/或區(qū)域。高速緩存管理器還確定何時高速緩存行符合清除失效數(shù)據(jù)的標(biāo)準(zhǔn)。例如,高速緩存管理器能檢查高速緩存行的每個區(qū)域的標(biāo)記以確定是否該行的所有區(qū)域包含失效數(shù)據(jù)(或無需寫回的其它類型的數(shù)據(jù)),或它能計算條件相關(guān)事件的數(shù)量以確定何時符合清除標(biāo)準(zhǔn)。
在又一個方面,本發(fā)明提供依照程序指令識別失效數(shù)據(jù)、并確定何時高速緩存行的所有區(qū)域包含失效數(shù)據(jù)的方法。另外,本發(fā)明規(guī)定當(dāng)高速緩存行的區(qū)域的至少一個包含失效數(shù)據(jù)并且沒有區(qū)域包含未失效修改的數(shù)據(jù)時,清除該高速緩存行。本方法適應(yīng)指明哪個數(shù)據(jù)失效的單指令以及確定哪個數(shù)據(jù)在什么條件下失效的指令的組合。該方法也規(guī)定通過高速緩存行區(qū)域或只是倒計數(shù)事件來跟蹤失效數(shù)據(jù)以確定何時高速緩存行總體上符合清除標(biāo)準(zhǔn)。
本發(fā)明以現(xiàn)有技術(shù)中未提供的方式允許將一些無用修改的高速緩存數(shù)據(jù)與有用修改的高速緩存數(shù)據(jù)區(qū)別。本發(fā)明則使用這種區(qū)別以消除一些在現(xiàn)有技術(shù)中要求的寫回并因此提供相應(yīng)的性能改善。本發(fā)明規(guī)定這種節(jié)約無需程序知道高速緩存結(jié)構(gòu)。本發(fā)明的另一優(yōu)點是它能允許具有有用數(shù)據(jù)的行比如果不跟蹤失效數(shù)據(jù)的情況要在高速緩存中保留的時間更長。例如,常規(guī)的高速緩存可能覆寫最近最少使用的高速緩存行,即使它包含將來可能需要的數(shù)據(jù)。本發(fā)明通過清除行因為它們僅包含失效數(shù)據(jù),只要能滿足最近取出的數(shù)據(jù)所要求的空間,將保留這樣的高速緩存行。
在所述實施例中,明確地跟蹤每個區(qū)域的失效對非失效狀態(tài)。在某些備選實施例中,不一個區(qū)域接一個區(qū)域地跟蹤狀態(tài)。例如,指令能指明高速緩存行的所有區(qū)域保存讀一次數(shù)據(jù)。高速緩存行的專用計數(shù)器則可被設(shè)置為區(qū)域的數(shù)目并且每次從高速緩存行讀時倒計數(shù)。一旦計數(shù)為0,則清除可發(fā)生。或者,每次將區(qū)域指定為讀一次時計數(shù)器能累加并且每次讀區(qū)域時倒計數(shù)。因此,在包含失效數(shù)據(jù)的區(qū)域數(shù)目能從狀態(tài)位讀出的意義上,甚至跟蹤各個區(qū)域狀態(tài)的實施例“計數(shù)”。本發(fā)明為基于所說明的實施例的這些以及其它的修改和變化作了準(zhǔn)備,通過下面權(quán)利要求定義本發(fā)明的范圍。
權(quán)利要求
1.一種系統(tǒng),用于在具有存儲器區(qū)域的存儲器中為處理器提供數(shù)據(jù)的副本,所述系統(tǒng)包括高速緩存,所述高速緩存具有各用于包含數(shù)據(jù)的多個高速緩存行區(qū)域的多個高速緩存行,所述高速緩存行區(qū)域的每一個在任何給定時間表示最多一個相應(yīng)的存儲器區(qū)域,所述高速緩存還包括為所述高速緩存行區(qū)域的每一個指示它是否包含具有失效狀態(tài)的數(shù)據(jù)的裝置。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括高速緩存管理器,當(dāng)所有高速緩存行的區(qū)域包含具有失效狀態(tài)的數(shù)據(jù)時,清除所述高速緩存行而不寫回到所述存儲器。
3.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括高速緩存管理器,當(dāng)高速緩存行的區(qū)域的至少一個包含具有失效狀態(tài)的數(shù)據(jù)并且它的區(qū)域都不包含不具有失效狀態(tài)的修改數(shù)據(jù)時,清除所述高速緩存行而不寫回到所述存儲器。
4.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括高速緩存管理器,當(dāng)高速緩存行的區(qū)域的至少一個包含具有失效狀態(tài)的數(shù)據(jù)并且它的區(qū)域都不包含不具有失效狀態(tài)的有效數(shù)據(jù)時,使所述高速緩存行無效而不寫回到所述存儲器。
5.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括高速緩存管理器,當(dāng)高速緩存行的區(qū)域的至少一個包含失效數(shù)據(jù),所述高速緩存行的區(qū)域的至少一個包含未修改數(shù)據(jù),并且所述高速緩存行的區(qū)域都不包含不具有失效狀態(tài)的修改數(shù)據(jù)時,覆寫所述高速緩存行而不寫回到所述存儲器。
6.一種方法,包括執(zhí)行將失效狀態(tài)分配到在高速緩存行區(qū)域中存儲的數(shù)據(jù)的指令的程序;以及清除具有至少一個包含具有失效狀態(tài)的數(shù)據(jù)的區(qū)域的高速緩存行而不寫回到存儲器。
7.如權(quán)利要求6所述的方法,其特征在于,還包括標(biāo)記包含失效數(shù)據(jù)的高速緩存行區(qū)域以確定何時清除所述高速緩存行。
8.如權(quán)利要求6所述的方法,其特征在于,當(dāng)高速緩存行的區(qū)域的至少一個包含失效數(shù)據(jù)并且它的區(qū)域都不包含未失效修改數(shù)據(jù)時,可進行所述高速緩存行的所述清除。
9.如權(quán)利要求6所述的方法,其特征在于,所述高速緩存行區(qū)域由所述程序以它們表示的存儲器區(qū)域的形式來指明。
10.如權(quán)利要求9所述的方法,其特征在于,所述程序包括將失效狀態(tài)分配到在至少一個高速緩存行區(qū)域中包含的數(shù)據(jù)的指令。
全文摘要
本發(fā)明提供具有高速緩存(17)的系統(tǒng)(AP1),該高速緩存指示其區(qū)域(S1-S4)的哪個(如果有)包含具有失效狀態(tài)的數(shù)據(jù)。本發(fā)明也提供一種方法(M1),該方法用于識別(SM2)包含具有失效狀態(tài)的數(shù)據(jù)的高速緩存區(qū)域,然后清除(SM4)具有包含具有失效狀態(tài)的數(shù)據(jù)的至少一個區(qū)域的高速緩存行(L1-LC)而不寫回到主存儲器(13)。本發(fā)明還提供指明包含要獲得“失效”狀態(tài)的數(shù)據(jù)的高速緩存行區(qū)域的程序(21)。本文中的“失效”數(shù)據(jù)是無用修改的或未修改的數(shù)據(jù),至少以前當(dāng)將其寫入高速緩存時可能是有用的數(shù)據(jù)?!扒宄焙w無效和覆寫兩方面。
文檔編號G06F12/08GK1728111SQ200510088230
公開日2006年2月1日 申請日期2005年7月29日 優(yōu)先權(quán)日2004年7月30日
發(fā)明者D·莫里斯, R·S·施賴伯 申請人:惠普開發(fā)有限公司