專(zhuān)利名稱::硬件觸發(fā)的數(shù)據(jù)高速緩存行預(yù)分配的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計(jì)算機(jī)系統(tǒng),并且更具體地,涉及高速緩存存儲(chǔ)器,在該高速緩存存儲(chǔ)器中,存儲(chǔ)操作生成針對(duì)高速緩存行預(yù)分配的硬件請(qǐng)求。
背景技術(shù):
:計(jì)算機(jī)程序和數(shù)據(jù)存儲(chǔ)在存儲(chǔ)器中。不幸地是,最大最廉價(jià)的存儲(chǔ)器具有最慢的存取時(shí)間??梢栽诓粚?dǎo)致處理器等待的情況下進(jìn)行存取的極高速的存儲(chǔ)器是昂貴的、易失的、小的并且需要非常接近處理器。所以傳統(tǒng)上,數(shù)據(jù)和程序在存取速度分級(jí)結(jié)構(gòu)中的存儲(chǔ)器類(lèi)型之間移動(dòng),以適應(yīng)時(shí)而沖突的多種需要。一旦從盤(pán)上或者在線進(jìn)行了下載,就在計(jì)算機(jī)的主存儲(chǔ)器中保持工作程序和數(shù)據(jù),該主存儲(chǔ)器典型地包括隨機(jī)存取存儲(chǔ)器(RAM)半導(dǎo)體集成電路。高性能系統(tǒng)(特別是現(xiàn)代微處理器)嘗試將部分主存儲(chǔ)器變?yōu)楦咚?高速緩存"存儲(chǔ)器。如果處理器執(zhí)行它下一個(gè)指令所需的程序和數(shù)據(jù)可以在高速緩存存儲(chǔ)器中找到,則執(zhí)行速度將增加,這是由于不必經(jīng)受對(duì)主存儲(chǔ)器的存取延遲。在常規(guī)系統(tǒng)中,應(yīng)當(dāng)把主存儲(chǔ)器中的什么數(shù)據(jù)和程序復(fù)制到高速緩存存儲(chǔ)器以及何時(shí)將高速緩存存儲(chǔ)器中的更新寫(xiě)回主存儲(chǔ)器不是那么容易就能正確地管理的。所以當(dāng)存在高速緩存"未命中"時(shí)性能就受影響。計(jì)算機(jī)架構(gòu)以及運(yùn)行時(shí)采用的程序分支很大程度上控制著通過(guò)高速緩存存儲(chǔ)器實(shí)施能夠受益多少。所以需要能夠更有效地處理運(yùn)行時(shí)行為的高速緩存系統(tǒng)和方法。
發(fā)明內(nèi)容在示例實(shí)施例中,計(jì)算機(jī)系統(tǒng)包括由回寫(xiě)式(copy-back)緩沖器和預(yù)分配請(qǐng)求棧支持的數(shù)據(jù)高速緩存。可編程觸發(fā)機(jī)制檢查所述處理器對(duì)所述數(shù)據(jù)高速緩存進(jìn)行的每一個(gè)存儲(chǔ)操作,以查看是否應(yīng)當(dāng)預(yù)分配下一高速緩存行。如果所述存儲(chǔ)操作的存儲(chǔ)地址發(fā)生在由起始(START)和終止(END)可編程寄存器定義的范圍內(nèi),則請(qǐng)求下一高速緩存行用于預(yù)分配,該高速緩存行包括由可編程步幅(STRIDE)寄存器定義的范圍內(nèi)的存儲(chǔ)地址。由所述預(yù)分配請(qǐng)求棧來(lái)組織和調(diào)度大量的預(yù)分配請(qǐng)求,并且所述預(yù)分配請(qǐng)求將依次允許通過(guò)所述回寫(xiě)式緩沖器來(lái)處理正在被替代的高速緩存行。到所述處理器在所述下一高速緩存行中開(kāi)始進(jìn)行所述存儲(chǔ)操作為止,己經(jīng)預(yù)分配了這個(gè)高速緩存行并且將存在高速緩存命中,從而避免了停滯周期。本發(fā)明的優(yōu)點(diǎn)是可以實(shí)現(xiàn)顯著的處理器性能增強(qiáng)。本發(fā)明的另一個(gè)優(yōu)點(diǎn)是,提供了一種高速緩存方案,具有對(duì)于處理器來(lái)說(shuō)的最小運(yùn)行時(shí)開(kāi)銷(xiāo)。本發(fā)明的又一個(gè)優(yōu)點(diǎn)是,提供了一種高速緩存系統(tǒng),其中高速緩存參數(shù)是可編程的。上述
發(fā)明內(nèi)容并非意在表示本發(fā)明的每一個(gè)公開(kāi)的實(shí)施例或者每一個(gè)方面。下面的附圖和詳細(xì)描述中提供了其它方面和示例實(shí)施例。考慮到以下結(jié)合附圖的本發(fā)明的不同實(shí)施例的詳細(xì)描述,可以更全面地理解本發(fā)明,附圖中圖1示出了本發(fā)明的實(shí)施例中的高速緩存存儲(chǔ)器系統(tǒng)的功能框圖2示出了一時(shí)序圖,比較了當(dāng)沒(méi)有預(yù)分配恰當(dāng)?shù)母咚倬彺嫘袝r(shí)針對(duì)高速緩存未命中的存儲(chǔ)操作以及如本發(fā)明中所示當(dāng)預(yù)分配了恰當(dāng)?shù)母咚倬彺嫘袝r(shí)的存儲(chǔ)操作;圖3示出了處理器和主存儲(chǔ)器的功能框圖,該框圖包括本發(fā)明的實(shí)施例中使用的回寫(xiě)式緩沖器和針對(duì)預(yù)分配請(qǐng)求的FIFO;以及圖4示出了本發(fā)明的一方法實(shí)施例,該方法用于在處理器對(duì)數(shù)據(jù)高速緩存進(jìn)行存儲(chǔ)操作期間針對(duì)下一高速緩存行發(fā)出預(yù)分配請(qǐng)求。具體實(shí)施例方式盡管本發(fā)明適于各種修改和備選形式,但在附圖中已作為示例示出了本發(fā)明的細(xì)節(jié)并將詳細(xì)描述這些細(xì)節(jié)。然而,應(yīng)當(dāng)理解的是,其意圖不在于將本發(fā)明限于所描述的具體實(shí)施例。相反,其意圖在于覆蓋落入由所附權(quán)利要求所限定的本發(fā)明精神和范圍內(nèi)的所有修改、等同替代方式和備選方式。圖1示出了本發(fā)明的實(shí)施例中的用于4千兆字節(jié)(2A32)存儲(chǔ)空間102的高速緩存存儲(chǔ)器系統(tǒng)100。處理器使用32比特存儲(chǔ)地址總線104對(duì)這樣的地址空間進(jìn)行程序和數(shù)據(jù)存取,所述地址總線可以對(duì)存儲(chǔ)器的每一個(gè)字節(jié)單獨(dú)地進(jìn)行尋址。為了高速緩存的目的,將存儲(chǔ)地址總線104本身劃分為標(biāo)簽(tag)106(比特31:16)、設(shè)置地址108(比特15:5)以及字節(jié)索引IIO(比特4:0)。高速緩存數(shù)據(jù)存儲(chǔ)器112具有由每行32字節(jié)的2"1行"高速緩存行"組織而成的64K字節(jié)的存儲(chǔ)容高速緩存存儲(chǔ)器112的每一行具有來(lái)自存儲(chǔ)空間102的32字節(jié)的連續(xù)存儲(chǔ)器的高速緩存行114,并且該高速緩存行114由設(shè)置地址108(比特15:5)所選擇。使用字節(jié)選擇器116,字節(jié)索引IIO(比特4:0)可選擇高速緩存行114中的每一個(gè)獨(dú)立字節(jié)。在存儲(chǔ)器分級(jí)結(jié)構(gòu)中的高速緩存存儲(chǔ)器112和其它存儲(chǔ)器結(jié)構(gòu)之間傳輸32字節(jié)寬的高速緩存行114。.使用高速緩存標(biāo)簽-有效-臟標(biāo)志(tag-valid-dirty)存儲(chǔ)器120來(lái)存儲(chǔ)與當(dāng)前駐留在高速緩存數(shù)據(jù)存儲(chǔ)器112中的數(shù)據(jù)的2A11個(gè)高速緩存行114相關(guān)的信息。由于僅可以將主存儲(chǔ)器102中的32字節(jié)塊形式的64K字節(jié)的數(shù)據(jù)復(fù)制到高速緩存數(shù)據(jù)存儲(chǔ)器112中,因此駐留的數(shù)據(jù)由它們的標(biāo)簽地址106所標(biāo)識(shí)。如果標(biāo)簽比較器122發(fā)現(xiàn)在標(biāo)簽-有效-臟標(biāo)志存儲(chǔ)器120中的標(biāo)簽124與處理器發(fā)出的當(dāng)前標(biāo)簽106匹配,則報(bào)告"命中"并且可以從高速緩存數(shù)據(jù)存儲(chǔ)器112供應(yīng)處理器數(shù)據(jù)存取。有效比特126指示,在相關(guān)聯(lián)的高速緩存行114被另一行所替代的情況下,是需要將相關(guān)聯(lián)的高速緩存行114寫(xiě)回還是清除,并且有效比特126被用于驗(yàn)證標(biāo)簽比較器122。在高速緩存行替換期間而不是高速緩存數(shù)據(jù)取回期間使用臟比特128。32比特的字節(jié)有效塊130用它的每一個(gè)比特指示相應(yīng)32字節(jié)高速緩存行114中的相應(yīng)獨(dú)立字節(jié)的有效性和存在性。如果處理器加載操作在高速緩存中"命中",則高速緩存數(shù)據(jù)存儲(chǔ)器l12立刻向處理器提供所請(qǐng)求的數(shù)據(jù)字節(jié)。但是如果如標(biāo)簽比較器122所通告的處理器加載操作"未命中",則直接取回包括所請(qǐng)求的數(shù)據(jù)字節(jié)在內(nèi)的主存儲(chǔ)器中的相應(yīng)32字節(jié)的行,但是這樣做沒(méi)有高速緩存命中時(shí)那么快。當(dāng)主存儲(chǔ)器102響應(yīng)時(shí)這樣的存取對(duì)處理器施加了停滯周期。所取回的32字節(jié)寬的數(shù)據(jù)行可以用于替代例如最近沒(méi)有使用或者不經(jīng)常使用的高速緩存行1M。如果如更新比特128所示,被替代的高速緩存行是臟的,則將塊130中指示為有效的字節(jié)清除到主存儲(chǔ)器102中。無(wú)論何時(shí)當(dāng)處理器存儲(chǔ)操作在高速緩存中"命中"時(shí),就將相應(yīng)數(shù)據(jù)字節(jié)重寫(xiě)至高速緩存數(shù)據(jù)存儲(chǔ)器112中,并且設(shè)置與字節(jié)有效比特相關(guān)聯(lián)的字節(jié)有效塊130中的相應(yīng)字節(jié)有效比特。這32個(gè)比特指示需要使用高速緩存數(shù)據(jù)存儲(chǔ)器112中的相應(yīng)字節(jié)來(lái)更新主存儲(chǔ)器102中的過(guò)期數(shù)據(jù)。但是如果處理器存儲(chǔ)操作在高速緩存中"未命中",需要向高速緩存分配相關(guān)聯(lián)的32字節(jié)寬的一行數(shù)據(jù)。對(duì)高速緩存行114打上標(biāo)簽并且將塊130中的全部字節(jié)有效比特設(shè)置為"0",意味著無(wú)效。由于稍后將使用高速緩存存儲(chǔ)器來(lái)覆蓋相應(yīng)的字節(jié),因此不從主存儲(chǔ)器102中取回任意數(shù)據(jù)。不論何時(shí)當(dāng)被替換行114是臟的,則其有效字節(jié)將是被清除到主存儲(chǔ)器102中的有效字節(jié)。這樣的策略被稱作"寫(xiě)入-分配"未命中策略。高速緩存"未命中"產(chǎn)生了處理器停滯周期,并且可以實(shí)質(zhì)上降低處理器性能。所以在本發(fā)明的實(shí)施例中最小化高速緩存未命中的數(shù)量以及相關(guān)聯(lián)的停滯周期。預(yù)取(pre-fetching)可以通過(guò)預(yù)測(cè)在不久之后將使用主存儲(chǔ)器102中的哪些數(shù)據(jù)字節(jié)和行來(lái)減少加載未命中的數(shù)量。在處理器實(shí)際需要數(shù)據(jù)之前,從主存儲(chǔ)器向高速緩存數(shù)據(jù)存儲(chǔ)器112中取入預(yù)測(cè)的行。一旦處理器執(zhí)行該加載操作,就將在高速緩存中找到所述數(shù)據(jù)字節(jié),消除了否則將由"未命中"所引起的停滯周期。用寫(xiě)入-分配未命中策略來(lái)最小化存儲(chǔ)"未命中"和相關(guān)聯(lián)的停滯周期。如寫(xiě)入-獲取未命中策略中那樣,"分配"而不是從主存儲(chǔ)器中獲取高速緩存行114。實(shí)際上沒(méi)有從主存儲(chǔ)器傳輸任何數(shù)據(jù),所以分配策略機(jī)制是快速的并且不會(huì)由于等待主存儲(chǔ)器存取而被減慢。盡管如此,當(dāng)分配的高速緩存行替代"臟"高速緩存行時(shí),當(dāng)將臟行114中的有效字節(jié)清除到主存儲(chǔ)器102中時(shí)可能出現(xiàn)停滯周期。當(dāng)存儲(chǔ)操作清除被替代的高速緩存行114并且分配新的高速緩存行114時(shí),處理器執(zhí)行將通常會(huì)停滯。所以包括高速緩存和主存儲(chǔ)器之間的單一回寫(xiě)式或者清除緩沖器,以在后臺(tái)進(jìn)行回寫(xiě)操作。但是如果在短時(shí)間段內(nèi)發(fā)生一系列清除,則回寫(xiě)式緩沖器可能變成瓶頸,這是由于較慢的主存儲(chǔ)器跟不上高速緩存行的清除速率。如果發(fā)生這種情況,則較晚的清除可能引起停滯周期,等待回寫(xiě)式緩沖器完成較早的任務(wù)。不可能避免清除,所以本發(fā)明的備選實(shí)施例盡早進(jìn)行它們的清除以避免引起處理器停滯周期。預(yù)取有助于加載操作并且預(yù)分配可以有助于存儲(chǔ)操作。在處理器存儲(chǔ)操作存取高速緩存之前,預(yù)分配分配了高速緩存行,并且當(dāng)需要時(shí)清除被替換的行。作為結(jié)果,到處理器執(zhí)行存儲(chǔ)操作為止,己經(jīng)在高速緩存中分配了高速緩存行。如果在存儲(chǔ)操作之前足夠早地完成了這樣的預(yù)分配,則與清除相關(guān)聯(lián)的主存儲(chǔ)器存取周期對(duì)于處理器來(lái)說(shuō)是完全隱藏的。如果回寫(xiě)式緩沖器不可用,則被替換行的每一個(gè)清除可能引起停滯周期。可以使用預(yù)分配來(lái)減少擁擠現(xiàn)象。它可以在時(shí)間上將可能的成本較高的事件與存儲(chǔ)操作需要高速緩存行的時(shí)刻區(qū)分開(kāi)。僅當(dāng)對(duì)所要求的高速緩存行預(yù)分配地不夠快的時(shí)候,相應(yīng)的存儲(chǔ)操作才會(huì)引起處理器停滯。圖2比較了常規(guī)無(wú)預(yù)分配序列202和本發(fā)明的預(yù)分配序列204的處理器時(shí)序。處理器存儲(chǔ)操作206導(dǎo)致了高速緩存未命中。步驟208要求在回寫(xiě)式緩沖器中放入正在被替換的高速緩存行。然后,步驟210可以分配用于存儲(chǔ)操作的高速緩存行。但是,將遇到處理器停滯周期212。然后步驟214完成該存儲(chǔ)操作。本發(fā)明的預(yù)分配序列204位于相同時(shí)標(biāo)上,并且在相同點(diǎn)嘗試處理器存儲(chǔ)操作。但是,本發(fā)明的實(shí)施例在存儲(chǔ)操作請(qǐng)求之前在后臺(tái)運(yùn)行,以查看高速緩存命中將會(huì)發(fā)生從而避免了處理器停滯周期。由硬件或者軟件生成的預(yù)分配請(qǐng)求216引起步驟218,以將被替換的高速緩存行放入回寫(xiě)式緩沖器。步驟220預(yù)分配新的高速緩存行。當(dāng)處理器開(kāi)始進(jìn)行存儲(chǔ)操作222時(shí),獲得高速緩存命中并且不招致停滯周期224。從而避免了從步驟224至相應(yīng)的步驟214的時(shí)間段。在存儲(chǔ)之前足夠早的預(yù)分配可以顯著地減少潛在停滯周期的數(shù)量。如果需要在短時(shí)間段內(nèi)完成一系列清除,可以有充足的時(shí)間僅使用單個(gè)回寫(xiě)式緩沖器來(lái)分散清除并且準(zhǔn)備好下一個(gè)存儲(chǔ)操作。如圖3所示,可以使用專(zhuān)用的先入先出(FIFO)結(jié)構(gòu)來(lái)保存用于未完成的預(yù)分配請(qǐng)求的一系列地址。通過(guò)將REGION一STRIDE設(shè)置為數(shù)據(jù)高速緩存行的大小(=32),可以使用基于區(qū)域的預(yù)分配來(lái)實(shí)施下一順序高速緩存行預(yù)分配。FIFO或者某個(gè)其它存儲(chǔ)器結(jié)構(gòu)保持一系列地址,在所述一系列地址上進(jìn)行預(yù)分配。使用硬件觸發(fā)機(jī)制來(lái)觸發(fā)預(yù)分配請(qǐng)求。圖3示出了本發(fā)明的計(jì)算機(jī)系統(tǒng)實(shí)施例,并且在此處用總體附圖標(biāo)記300來(lái)指代本發(fā)明的計(jì)算機(jī)系統(tǒng)。計(jì)算機(jī)系統(tǒng)300包括處理器302和主存儲(chǔ)器304、指令高速緩存306、以及數(shù)據(jù)高速緩存308。通過(guò)指令高速緩存306逐條指令地提供312指令行310。處理器302的加載和存儲(chǔ)數(shù)據(jù)操作314由數(shù)據(jù)高速緩存308所支持。例如,如圖1所示,將數(shù)據(jù)行316高速緩存至數(shù)據(jù)高速緩存308。存儲(chǔ)將僅更新數(shù)據(jù)高速緩存。僅當(dāng)將臟數(shù)據(jù)從高速緩存中清除出去的時(shí)候,回寫(xiě)式緩沖器320才用于稍后的高速緩存行替換322。處理器302對(duì)數(shù)據(jù)高速緩存308的任意存儲(chǔ)操作將生成用于高速緩存行預(yù)分配觸發(fā)器326的高速緩存行標(biāo)簽324。將起始(START)、終止(END)和步幅(STRIDE)預(yù)分配觸發(fā)參數(shù)328寫(xiě)入相應(yīng)的寄存器中,以同高速緩存行標(biāo)簽324進(jìn)行比較。適當(dāng)時(shí),將下一高速緩存行請(qǐng)求轉(zhuǎn)發(fā)至預(yù)分配請(qǐng)求棧,例如FIFO寄存器332。當(dāng)在后臺(tái)處理器302脫機(jī)提供服務(wù)時(shí),較早和較晚的請(qǐng)求可能同時(shí)等待處理。僅僅為了存儲(chǔ)預(yù)分配不請(qǐng)求任何替換高速緩存行324。如果處理器需要用于加載操作的替換高速緩存行324,將從主存儲(chǔ)器304中進(jìn)行獲取??梢杂娠@式的軟件控制336來(lái)啟動(dòng)或者觸發(fā)預(yù)分配。由軟件程序員或者由編譯器工具鏈插入的分配(ALLOCATE)操作可以用于在將數(shù)據(jù)存儲(chǔ)至高速緩存行之前分配該高速緩存行。但是分配(ALLOCATE)操作可能增加代碼尺寸,并且耗盡處理器發(fā)出帶寬。當(dāng)發(fā)出分配(ALLOCATE)操作時(shí),由于不能發(fā)出另一個(gè)操作因此喪失了執(zhí)行有用指令的機(jī)會(huì)。在軟件編譯時(shí),有時(shí)不可能精確預(yù)測(cè)在處理器代碼中插入分配(ALLOCATE)操作的最佳位置,這是由于處理器的運(yùn)行時(shí)行為引入了不確定性。由于依賴于存儲(chǔ)器子系統(tǒng)延遲、分支未命中預(yù)測(cè)等招致的實(shí)際停滯周期,編譯時(shí)和運(yùn)行時(shí)的行為是不同的。預(yù)定的分配(ALLOCATE)操作的效率僅在運(yùn)行期間才是明顯的。因此本發(fā)明的實(shí)施例在運(yùn)行時(shí)用處理器硬件來(lái)觸發(fā)預(yù)分配,而不是專(zhuān)門(mén)在編譯時(shí)用軟件操作來(lái)觸發(fā)。為了說(shuō)明這樣的硬件觸發(fā)預(yù)分配是多么的有利,表I建議了將1024個(gè)數(shù)據(jù)字節(jié)從一個(gè)位置(src)復(fù)制到另一個(gè)位置(dst)的C+十子例程。表i示例程序copy1(char*src,char*dst)for(inti=0;i<1024;i++)*(dst+i)=*(src+i);j_在本發(fā)明的下一順序高速緩存行預(yù)分配實(shí)施例中,包括硬件觸發(fā)器,使得不論何時(shí)當(dāng)處理器向地址A存儲(chǔ)時(shí),處理器確定"地址A+32"是否也在高速緩存中。如果不在,則觸發(fā)針對(duì)"地址A+32"的預(yù)分配請(qǐng)求。例如,如果當(dāng)表I的指令代碼開(kāi)始時(shí)高速緩存是空的,則對(duì)dst(i^)的存儲(chǔ)將在高速緩存中未命中,所以它將分配針對(duì)地址dst的高速緩存行并且它將觸發(fā)針對(duì)"地址dst+32"的高速緩存行的預(yù)分配。到代碼向dst+32(i=32)存儲(chǔ)為止,已經(jīng)在高速緩存中預(yù)分配了該行,并且該存儲(chǔ)將在高速緩存中命中。對(duì)dst+32的存儲(chǔ)將觸發(fā)針對(duì)地址dst+64的高速緩存行的預(yù)分配。到代碼向dst+64(i=64)存儲(chǔ)為止,已經(jīng)在高速緩存中預(yù)分配了該行,并且該存儲(chǔ)將在高速緩存中命中。對(duì)dst+64的存儲(chǔ)將觸發(fā)針對(duì)地址dst+96的高速緩存行的預(yù)分配,并且以此類(lèi)推。所以在對(duì)第一目的位置dst的初始存儲(chǔ)未命中之后,將不會(huì)遇到其它的未命中。這種預(yù)分配提前分配了dst結(jié)構(gòu)的行。代碼執(zhí)行的速度/運(yùn)行時(shí)行為決定了預(yù)分配的速度。這類(lèi)似于針對(duì)向數(shù)據(jù)高速緩存加載或者來(lái)自指令高速緩存的指令執(zhí)行的傳統(tǒng)的下一順序高速緩存行預(yù)取。在表I中的"copyl"的存儲(chǔ)模式的順序特性對(duì)于很多應(yīng)用來(lái)說(shuō)是典型的。但是不是所有應(yīng)用都具有順序存儲(chǔ)模式。僅依賴于順序存儲(chǔ)模式的觸發(fā)不可能提供大的性能改進(jìn)。可以例如用REGION—STRIDE使步幅成為可編程的,而不是提前預(yù)分配固定步幅的32字節(jié)高速緩存行??梢岳缬肦EGION一START和REGION—END使預(yù)分配存儲(chǔ)器區(qū)域成為可編程的。考慮從一個(gè)位置(src)復(fù)制1024個(gè)數(shù)據(jù)字節(jié)的2維結(jié)構(gòu)到另一個(gè)位置(dst)的表II中的"copy2"子例程。表ncopy2(char*src,char*dst)for(intj=0;j<64;j++)〃64"行"for(inti=0;i<16;i++)〃每"行"16個(gè)字節(jié)*(dst+(j*512)+i)=*(src+(j*512)+i);i_這樣一來(lái),從較大的512字節(jié)寬的二維結(jié)構(gòu)復(fù)制了較小的64*16字節(jié)的二維子結(jié)構(gòu)。如表m所示,設(shè)置可編程預(yù)分配屬性REGION_STRIDE、REGION—START和REGION—END,使得針對(duì)目的地址"dst"的預(yù)分配成為可能。表III<table>tableseeoriginaldocumentpage13</column></row><table>采用這樣的設(shè)置,對(duì)行的存儲(chǔ)將觸發(fā)針對(duì)下一行的預(yù)分配。換言之,對(duì)包含在區(qū)域中的地址A的存儲(chǔ)(REGION_START<=A<=REGION—END)將觸發(fā)針對(duì)地址A+512(REGION—STRIDE=512)的預(yù)分配。在執(zhí)行示例代碼"copy2"之前,將用圖3描述的軟件參與限制為對(duì)三個(gè)屬性的一次設(shè)置。與基于全軟件的方案不同,主應(yīng)用代碼本身不受影響,在所述基于全軟件的方案中,每一個(gè)獨(dú)立的分配是由顯式的分配(ALLOCATE)操作觸發(fā)的,該顯式分配操作也消耗了發(fā)出帶寬。圖4示出了本發(fā)明的方法實(shí)施例,并且在本文中用總體附圖標(biāo)記400來(lái)指代本發(fā)明的方法。方法400截獲處理器加載/存儲(chǔ)操作402并且步驟404測(cè)試它是否是存儲(chǔ)操作。如果是,檢查406確定該存儲(chǔ)是否在REGION一START和REGION—END之間的地址范圍中。如果是,步驟408觸發(fā)針對(duì)與地址A加上REGION一STRIDE相適合的高速緩存行的預(yù)分配請(qǐng)求410。步驟416還可能已經(jīng)接收了較早的請(qǐng)求412和較晚的請(qǐng)求414。該步驟416組織并且向數(shù)據(jù)高速緩存提供高速緩存行418。預(yù)分配請(qǐng)求410、412、414以及高速緩存行418和420不需要等待回寫(xiě)式緩沖器422接收被清除的高速緩存行424并將高速緩存行426沖入主存儲(chǔ)器。在預(yù)分配416可以預(yù)分配高速緩存行之前,必須將當(dāng)前高速緩存行位置中的任意臟數(shù)據(jù)清除到回寫(xiě)式緩沖器中。就此而言,當(dāng)回寫(xiě)式緩沖器不可用時(shí),預(yù)分配不需要等待回寫(xiě)式緩沖器。盡管如此,由于提前分配了行,這不會(huì)導(dǎo)致處理器停滯周期,而僅僅是預(yù)分配的延遲。本發(fā)明的實(shí)施例通過(guò)在處理器存儲(chǔ)操作之前作出這樣的請(qǐng)求分散了高速緩存行分配請(qǐng)求。將對(duì)于關(guān)鍵資源(比如回寫(xiě)式行緩沖器)的需求分散在更多的時(shí)間上,從而降低了導(dǎo)致停滯周期的可能。避免停滯周期導(dǎo)致了更好的整體處理器性能。本發(fā)明可以用于任意類(lèi)型的數(shù)據(jù)高速緩存,而不一定必須是處理器高速緩存??梢允褂镁哂胁煌椒亩鄠€(gè)預(yù)分配區(qū)域??梢栽O(shè)計(jì)出不同的硬件預(yù)分配觸發(fā)器。對(duì)于存儲(chǔ)器結(jié)構(gòu)的反向遍歷可以支持負(fù)的區(qū)域步幅。本發(fā)明的專(zhuān)利侵權(quán)檢測(cè)方法取決于該預(yù)分配觸發(fā)器將需要某種最小程度的軟件參與這一事實(shí)。在硬件觸發(fā)器的示例中,軟件將通過(guò)REGION—STRIDE、REGION—START和REGION—END寄存器的任意設(shè)置來(lái)呈現(xiàn)自己??梢栽趹岩蓪?zhuān)利侵權(quán)的設(shè)備上運(yùn)行的代碼中輕易地找到這樣的信息,或者可能在設(shè)備用戶手冊(cè)中描述這樣的寄存器。盡管已參照多個(gè)具體示例實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,但本領(lǐng)域的技術(shù)人員要認(rèn)識(shí)到,在不背離權(quán)利要求書(shū)中所闡述的本發(fā)明精神和范圍的前提下,可以對(duì)本發(fā)明作出許多改變。權(quán)利要求1、一種用于提高處理器性能的方法,包括檢查由處理器對(duì)數(shù)據(jù)高速緩存執(zhí)行的存儲(chǔ)操作的存儲(chǔ)地址;查看所述數(shù)據(jù)高速緩存中已經(jīng)針對(duì)所述存儲(chǔ)地址加步幅值被分配了的高速緩存行;以及如果還沒(méi)有被預(yù)分配,則針對(duì)所述高速緩存行發(fā)出預(yù)分配請(qǐng)求;其中,在對(duì)所述數(shù)據(jù)高速緩存的存儲(chǔ)操作期間,所述處理器避免了當(dāng)存在高速緩存未命中時(shí)引起的停滯周期。2、根據(jù)權(quán)利要求l所述的方法,還包括用預(yù)分配請(qǐng)求棧來(lái)累積并且調(diào)度預(yù)分配請(qǐng)求。3、根據(jù)權(quán)利要求l所述的方法,還包括測(cè)試所述處理器對(duì)所述數(shù)據(jù)高速緩存執(zhí)行的所述存儲(chǔ)操作的所述存儲(chǔ)地址是否被包括在由可編程起始和終止寄存器定義的范圍中,如果是,則允許所述預(yù)分配請(qǐng)求。4、根據(jù)權(quán)利要求l所述的方法,還包括使用回寫(xiě)式緩沖器來(lái)處理正在從所述數(shù)據(jù)高速緩存中清除的高速緩存行。5、根據(jù)權(quán)利要求l所述的方法,還包括如果還沒(méi)有被預(yù)分配,則執(zhí)行分配軟件命令,所述分配軟件命令將把預(yù)分配請(qǐng)求注入所述高速緩存行。6、一種用于提高處理器性能的方法,包括檢查由處理器對(duì)數(shù)據(jù)高速緩存執(zhí)行的存儲(chǔ)操作的存儲(chǔ)地址;查看所述數(shù)據(jù)高速緩存中已經(jīng)針對(duì)所述存儲(chǔ)地址加步幅值被分配了的高速緩存行;如果還沒(méi)有被預(yù)分配,則針對(duì)所述高速緩存行發(fā)出預(yù)分配請(qǐng)求;用預(yù)分配請(qǐng)求棧來(lái)累積和調(diào)度預(yù)分配請(qǐng)求;測(cè)試所述處理器對(duì)所述數(shù)據(jù)高速緩存執(zhí)行的所述存儲(chǔ)操作的所述存儲(chǔ)地址是否被包括在由可編程起始和終止寄存器定義的范圍中,如果是,則允許這樣的預(yù)分配請(qǐng)求;使用回寫(xiě)式緩沖器來(lái)處理正在從所述數(shù)據(jù)高速緩存中清除的高速緩存行;以及執(zhí)行分配軟件命令以將預(yù)分配請(qǐng)求注入所述預(yù)分配請(qǐng)求棧;其中,在對(duì)所述數(shù)據(jù)高速緩存的存儲(chǔ)操作期間,所述處理器避免了當(dāng)存在高速緩存未命中時(shí)引起的停滯周期。7、一種用于提高處理器性能的設(shè)備,包括用于檢査由處理器對(duì)數(shù)據(jù)高速緩存執(zhí)行的存儲(chǔ)操作的存儲(chǔ)地址的裝置;用于查看所述數(shù)據(jù)高速緩存中已經(jīng)針對(duì)所述存儲(chǔ)地址加步距值被分配了的高速緩存行的裝置;以及用于在還沒(méi)有被預(yù)分配的情況下針對(duì)所述高速緩存行發(fā)出預(yù)分配請(qǐng)求的裝置;其中,在對(duì)所述數(shù)據(jù)高速緩存的存儲(chǔ)操作期間,所述處理器避免了當(dāng)存在高速緩存未命中時(shí)引起的停滯周期。8、根據(jù)權(quán)利要求l所述的設(shè)備,還包括預(yù)分配請(qǐng)求棧,用于累積并且調(diào)度預(yù)分配請(qǐng)求;以及回寫(xiě)式緩沖器,用于處理正在從所述數(shù)據(jù)高速緩存中清除的高速緩存行。9、根據(jù)權(quán)利要求l所述的方法,還包括用于測(cè)試所述處理器對(duì)所述數(shù)據(jù)高速緩存執(zhí)行的所述存儲(chǔ)操作的所述存儲(chǔ)地址是否被包括在由可編程起始和終止寄存器定義的范圍中,并且如果是,則允許所述預(yù)分配請(qǐng)求的裝置。10、一種用于檢測(cè)侵權(quán)的商業(yè)方法,包括針對(duì)region—stride、region—start和region—end的寄存器等效物,檢査潛在侵權(quán)者的軟件程序,意在控制高速緩存存儲(chǔ)處理器操作中的預(yù)分配請(qǐng)求。11、一種用于檢測(cè)侵權(quán)的商業(yè)方法,包括針對(duì)region—stride、region—start和region—end的寄存器等效物,檢查潛在侵權(quán)者的用戶手冊(cè)出版物,意在控制高速緩存存儲(chǔ)處理器操作中的預(yù)分配請(qǐng)求。12、一種計(jì)算機(jī)系統(tǒng),包括數(shù)據(jù)高速緩存,位于處理器和主存儲(chǔ)器之間并且由回寫(xiě)式緩沖器所支持;預(yù)分配請(qǐng)求棧,用于累積和調(diào)度預(yù)分配請(qǐng)求,使得每一個(gè)預(yù)分配將依次等待所述回寫(xiě)式緩沖器完成它的處理,所述處理是用預(yù)分配的高速緩存行替代所述數(shù)據(jù)高速緩存中的高速緩存行;可編程觸發(fā)機(jī)制,用于檢査所述處理器對(duì)所述數(shù)據(jù)高速緩存執(zhí)行的每一個(gè)存儲(chǔ)操作,以査看是否應(yīng)當(dāng)預(yù)分配下一高速緩存行,如果是,則向所述預(yù)分配請(qǐng)求棧發(fā)送相應(yīng)的請(qǐng)求。13、根據(jù)權(quán)利要求12所述的計(jì)算機(jī)系統(tǒng),還包括可編程寄存器,用于保持參數(shù),所述參數(shù)是確定是否應(yīng)當(dāng)預(yù)分配下一高速緩存行所需的參數(shù)。14、根據(jù)權(quán)利要求13所述的計(jì)算機(jī)系統(tǒng),其中所述可編程寄存器使得如果存儲(chǔ)操作的存儲(chǔ)地址發(fā)生在由起始和終止可編程寄存器定義的范圍內(nèi),則將請(qǐng)求預(yù)分配下一高速緩存行,所述下一高速緩存行包括由可編程步幅寄存器定義的范圍中的存儲(chǔ)地址;其中,當(dāng)所述處理器確實(shí)在所述下一高速緩存行中執(zhí)行所述存儲(chǔ)操作時(shí),已經(jīng)預(yù)分配了所述高速緩存行并且將存在高速緩存命中,因而避免了停滯周期。全文摘要計(jì)算機(jī)系統(tǒng)包括由回寫(xiě)式緩沖器支持的數(shù)據(jù)高速緩存和預(yù)分配請(qǐng)求棧??删幊逃|發(fā)機(jī)制檢查所述處理器對(duì)所述數(shù)據(jù)高速緩存執(zhí)行的每一個(gè)存儲(chǔ)操作,以查看是否應(yīng)當(dāng)預(yù)分配下一高速緩存行。如果所述存儲(chǔ)操作的存儲(chǔ)地址發(fā)生在由起始和終止可編程寄存器定義的范圍內(nèi),則請(qǐng)求下一高速緩存行用于預(yù)分配,該高速緩存行包括由可編程步幅寄存器定義的范圍中的存儲(chǔ)地址。由所述預(yù)分配請(qǐng)求棧來(lái)組織和調(diào)度大量的預(yù)分配請(qǐng)求,并且所述預(yù)分配請(qǐng)求將依次允許通過(guò)所述回寫(xiě)式緩沖器來(lái)處理正在被替代的高速緩存行。到所述處理器在所述下一高速緩存行中開(kāi)始進(jìn)行所述存儲(chǔ)操作為止,已經(jīng)預(yù)分配了這個(gè)高速緩存行并且將存在高速緩存命中,從而避免了停滯周期。文檔編號(hào)G06F12/08GK101589373SQ200880002944公開(kāi)日2009年11月25日申請(qǐng)日期2008年1月24日優(yōu)先權(quán)日2007年1月25日發(fā)明者讓-威廉·范德韋爾特申請(qǐng)人:Nxp股份有限公司