本發(fā)明通常涉及將信息預(yù)取到高速緩沖存儲器中,并且更特別地涉及確定連續(xù)加載訪問之間的最小跨距值和跨距方向以識別至少一個預(yù)取地址的跨距參考預(yù)取器。
背景技術(shù):
存儲器訪問延遲是降低處理性能和效率的重要原因。處理電路經(jīng)常經(jīng)由多層電路和關(guān)聯(lián)的訪問協(xié)議與主存儲器分開。例如,處理器可以連接至存儲該處理器所需的信息(諸如計算機系統(tǒng)要處理的指令和數(shù)據(jù)和其它信息等)的外部系統(tǒng)存儲器。由于信息經(jīng)常必須跨多級電路(諸如總線接口單元和/或存儲器控制器等)、并且外部裝置經(jīng)常按照較慢的系統(tǒng)時鐘進行工作,因此向外部系統(tǒng)存儲器的訪問可能相對較慢。處理器通常包括用于本地存儲從外部系統(tǒng)存儲器所擷取到的信息以供該處理器內(nèi)的處理電路進行更快訪問的至少一級高速緩沖存儲器。由于高速緩存器從物理上更近、具有更少的中間電路級、并且經(jīng)常按更快的時鐘速度進行工作,因此向內(nèi)部高速緩存器的訪問快得多。
預(yù)取是預(yù)先從主存儲器擷取信息塊并將該信息塊存儲到本地高速緩存器中、以在需要時供處理電路進行更快地訪問的常用技術(shù)。盡管高速緩沖存儲器可能明顯變快,但僅在高速緩存器及時地擷取到處理電路隨后所請求的信息的情況下,性能和效率才有所提高。未能擷取到目標信息或者擷取到過多的錯誤信息的預(yù)取算法可能不會明顯提高、并且甚至可能會降低整體性能和效率。
技術(shù)實現(xiàn)要素:
根據(jù)一個實施例的一種用于處理器的跨距參考預(yù)取器,包括訪問邏輯、跨距掩碼邏輯、計數(shù)邏輯、仲裁邏輯和預(yù)取單元。所述訪問邏輯檢測向存儲頁的高速緩存行的連續(xù)加載請求,確定所述連續(xù)加載請求中的各加載請求之間的跨距值并確定最小跨距值,并且更新用于對所述存儲頁中的已被訪問的各高速緩存行進行標識的訪問歷史向量。所述跨距掩碼邏輯基于所述最小跨距值來提供跨距掩碼向量。所述計數(shù)邏輯利用所述跨距掩碼向量來過濾所述訪問歷史向量,以確定正訪問計數(shù)和負訪問計數(shù)。所述仲裁邏輯在所述正訪問計數(shù)和所述負訪問計數(shù)中的任一個滿足觸發(fā)閾值的情況下觸發(fā)預(yù)取操作。所述仲裁邏輯還基于所述正訪問計數(shù)和所述負訪問計數(shù)的相對大小來指示存儲器訪問的方向。所述預(yù)取單元在被所述仲裁邏輯觸發(fā)的情況下使用預(yù)取地址來進行所述預(yù)取操作。所述預(yù)取單元通過在所述仲裁邏輯所指示的方向上將加載請求地址與所述最小跨距值相結(jié)合來確定所述預(yù)取地址。
根據(jù)一個實施例的一種處理器,包括高速緩沖存儲器、處理邏輯、訪問邏輯、跨距掩碼邏輯、計數(shù)邏輯、仲裁邏輯和預(yù)取器。所述處理邏輯提交用以訪問存儲頁的高速緩存行的多個加載請求。所述訪問邏輯接收所述加載請求,并且更新針對所述存儲頁的訪問向量,其中所述訪問邏輯確定連續(xù)加載請求之間的最小跨距值。所述跨距掩碼邏輯基于所述最小跨距值來提供掩碼向量。所述計數(shù)邏輯將所述掩碼向量與所述訪問向量相結(jié)合以提供訪問計數(shù)。所述仲裁邏輯在所述訪問計數(shù)達到預(yù)定計數(shù)閾值的情況下觸發(fā)預(yù)取操作。所述預(yù)取器使用通過將所述最小跨距值與所述多個加載請求中的最后一個加載請求的地址相結(jié)合所確定的預(yù)取地址來進行所述預(yù)取操作。
所述訪問邏輯可以包括參考表,所述參考表用于存儲所述存儲頁的頁地址、所述最小跨距值、用于對利用所述加載請求地址所訪問的高速緩存行進行標識的先前訪問值、以及所述訪問歷史向量。所述訪問邏輯可以包括加法器、比較器、解碼器和用以確定各跨距值的其它邏輯,從而確定并更新連續(xù)加載請求訪問之間的最小跨距值,并且更新所述訪問歷史向量。所述訪問歷史向量可以包括多個位,其中各個位與所述存儲頁的高速緩存行相對應(yīng)。所述計數(shù)邏輯可以包括用以區(qū)分正方向和負方向的移位寄存器等、以及用于將正訪問歷史值和負訪問歷史值與跨距掩碼向量相結(jié)合以確定正訪問計數(shù)和負訪問計數(shù)的布爾(Boolean)邏輯等。所述仲裁邏輯包括加法器和比較器等,以判斷是否滿足觸發(fā)閾值并判斷跨距的方向。在正訪問計數(shù)和負訪問計數(shù)的總和達到穩(wěn)定啟用閾值的情況下,仲裁邏輯還可以確定操作的穩(wěn)定模式。在操作的穩(wěn)定模式中,預(yù)取器多次相加最小跨距值以進行連續(xù)預(yù)取操作,而不會相對于實際加載訪問過于提前。在正訪問計數(shù)和負訪問計數(shù)的總和降為穩(wěn)定禁用閾值的情況下,仲裁邏輯還可以終止操作的穩(wěn)定模式。
根據(jù)一個實施例的一種用于將數(shù)據(jù)從存儲器預(yù)取到處理器中的方法,包括以下步驟:檢測向存儲頁的高速緩存行的連續(xù)加載請求;確定所述連續(xù)加載請求中的各加載請求之間的跨距值;確定最小跨距值;更新用于對所述存儲頁中的已被訪問的各高速緩存行進行標識的訪問歷史向量;基于所述最小跨距值來確定跨距掩碼向量;利用所述跨距掩碼向量來過濾所述訪問歷史向量,并且確定訪問計數(shù);以及在所述訪問計數(shù)達到預(yù)定計數(shù)閾值的情況下進行預(yù)取操作。
所述方法可以包括:針對各連續(xù)加載請求更新所存儲的先前訪問值;以及將下一訪問值與所存儲的先前訪問值進行比較。所述方法可以包括:針對各連續(xù)加載請求確定跨距值;將下一跨距值與當前所存儲的最小跨距值進行比較;以及在所述下一跨距值小于當前所存儲的最小跨距值的情況下,利用所述下一跨距值更新該最小跨距值。所述方法可以包括選擇多個跨距掩碼向量其中之一,其中所述多個跨距掩碼向量中的各跨距掩碼向量與多個可能跨距值中的相應(yīng)可能跨距值相對應(yīng)。
所述方法還可以包括:使所述訪問歷史向量在第一方向上移位,以提供正訪問歷史向量;使所述訪問歷史向量在相反的第二方向上移位,以提供負訪問歷史向量;利用所述跨距掩碼向量來過濾所述正訪問歷史向量以提供正計數(shù),并且利用所述跨距掩碼向量來過濾所述負訪問歷史向量以提供負計數(shù);在所述正計數(shù)和所述負計數(shù)中的任一個實現(xiàn)所述預(yù)定計數(shù)閾值的情況下,進行所述預(yù)取操作;以及基于所述正計數(shù)和所述負計數(shù)的比較來確定所述預(yù)取操作的方向。所述方法可以包括:將所述正計數(shù)和所述負計數(shù)相加,以確定總和計數(shù);將所述總和計數(shù)與穩(wěn)定啟用閾值進行比較;以及在所述總和計數(shù)達到所述穩(wěn)定啟用閾值的情況下,以穩(wěn)定模式進行工作。所述方法可以包括:重復(fù)地相加所述最小跨距值以確定連續(xù)預(yù)取地址,并且針對所述連續(xù)預(yù)取地址中的各預(yù)取地址進行所述預(yù)取操作。所述方法可以包括:將所述總和計數(shù)與穩(wěn)定禁用閾值進行比較;以及在所述總和計數(shù)降為所述穩(wěn)定禁用閾值的情況下,終止以所述穩(wěn)定模式進行工作。
附圖說明
將針對以下的說明和附圖來更好地理解本發(fā)明的益處、特征和優(yōu)點,其中:
圖1是包括包含有根據(jù)一個實施例所實現(xiàn)的跨距參考預(yù)取器的處理器的處理系統(tǒng)的簡化框圖;
圖2是根據(jù)一個實施例的圖1的簡化框圖;
圖3是根據(jù)一個實施例的圖2的跨距參考表和決策邏輯的更詳細框圖;
圖4是示出根據(jù)一個實施例的訪問歷史向量AHV的形式的簡化框圖;
圖5是根據(jù)一個實施例的圖2的更新邏輯的簡化框圖;
圖6是圖3的用于根據(jù)訪問歷史向量AHV和跨距掩碼向量SMV來確定計數(shù)值P和N的計數(shù)邏輯的更詳細框圖;
圖7是根據(jù)一個實施例的圖3的仲裁邏輯的簡化框圖;
圖8是示出根據(jù)一個實施例的圖3的跨距掩碼邏輯的表格圖;
圖9是示出根據(jù)一個實施例的圖3的計數(shù)邏輯的操作的圖形描述;
圖10是圖3的跨距參考表中的給定行的一個條目的圖,其示出針對同一頁的給定系列訪問如何更新字段;
圖11是示出根據(jù)一個實施例的圖2的更新邏輯的操作流程圖;
圖12是示出根據(jù)一個實施例的圖3的控制邏輯的操作流程圖;
圖13是示出根據(jù)一個實施例的圖3的仲裁邏輯的操作流程圖;以及
圖14是示出根據(jù)一個實施例的圖2的預(yù)取器的操作流程圖。
具體實施方式
本發(fā)明人已意識到針對處理器的更為高效且精確的存儲器預(yù)取器的需求。因此,本發(fā)明人開發(fā)了識別連續(xù)加載訪問之間的最小跨距值和跨距方向以識別至少一個預(yù)取地址的跨距參考預(yù)取器。如這里所述的存儲器預(yù)取器的跨距參考實現(xiàn)保持了用在亂序處理器中的特殊優(yōu)勢,其中在該亂序處理器中,可以按與原始應(yīng)用程序或軟件程序所規(guī)定的順序不同的順序?qū)⒓虞d指令提交至存儲器單元。
如這里使用的術(shù)語“處理器”是指包括微處理器、中央處理單元(CPU)、處理核、微控制器等的任何類型的處理單元。如這里使用的術(shù)語“處理器”還包括任何類型的處理器結(jié)構(gòu),諸如集成在芯片或集成電路(IC)上的處理單元(包括被包含在系統(tǒng)級芯片(SOC)等內(nèi)的處理單元)等。處理器的處理邏輯最大程度地利用內(nèi)部高速緩存器進行工作是有利的。
圖1是包括包含有根據(jù)一個實施例所實現(xiàn)的跨距參考預(yù)取器(SRP)112的處理器102的處理系統(tǒng)100的簡化框圖。處理器102連接至外部系統(tǒng)存儲器104,其中該外部系統(tǒng)存儲器104存儲供處理器102消耗的指令和數(shù)據(jù)。處理器102包括處理引擎106、高速緩沖存儲器108和總線接口單元109,其中該總線接口單元109經(jīng)由一個或多個總線111和113等與用于連接系統(tǒng)存儲器104的外部存儲器控制器110進行通信。在可選結(jié)構(gòu)中,存儲器控制器110可以被包含在處理器102中。處理引擎106可以以任何適當方式被配置成執(zhí)行軟件程序或應(yīng)用程序等。例如,處理器102的標準指令集架構(gòu)(ISA)可以是x86宏架構(gòu),其中在該x86宏架構(gòu)中,處理器102可以正確地執(zhí)行被設(shè)計為在x86處理器上執(zhí)行的應(yīng)用程序中的大部分。在獲得了應(yīng)用程序的預(yù)期結(jié)果的情況下,正確地執(zhí)行了該應(yīng)用程序。然而,本發(fā)明不限于x86架構(gòu),其中處理器102可以根據(jù)如本領(lǐng)域普通技術(shù)人員已知的任何可選ISA而定。處理引擎執(zhí)行被稱為宏指令的所選擇的ISA的指令,并且處理引擎106包括關(guān)聯(lián)的用戶可見寄存器組。
盡管未示出,但處理引擎106可以包括:提取單元,用于將宏指令取回到指令高速緩存器中;轉(zhuǎn)譯器,用于將宏指令轉(zhuǎn)換成處理器102的原生指令集的相應(yīng)微指令或“微操作(micro-ops)”;調(diào)度器等,用于對微指令的執(zhí)行進行調(diào)度;以及一個或多個執(zhí)行單元,用于執(zhí)行微指令。處理器102可以是亂序處理器,其中只要最終實現(xiàn)了相同結(jié)果,就可以不按原始程序順序執(zhí)行宏指令或微指令(以下簡稱為“指令”),以改善性能。執(zhí)行單元可以包括一個或多個整數(shù)執(zhí)行單元、一個或多個浮點(FP)或媒體執(zhí)行單元、包含一個或多個加載流水線和一個或多個存儲流水線的存儲子系統(tǒng)、等等。還可以包括諸如重排序緩沖器(ROB)、物理寄存器重命名單元、或確保指令按程序順序退出的相關(guān)硬件結(jié)構(gòu)等單元,從而實現(xiàn)根據(jù)原始程序指令的適當操作。
高速緩沖存儲器108包含或表示指令高速緩存器(instruction cache或icache)、數(shù)據(jù)高速緩存器(data cache或dcache)或不同高速緩存器類型的組合。指令高速緩存器可以存儲從系統(tǒng)存儲器104內(nèi)存儲的應(yīng)用程序中所擷取的宏指令。高速緩沖存儲器108還表示可以被包含在處理器102中的一個或多個高速緩存器級。例如,根據(jù)特定結(jié)構(gòu),高速緩沖存儲器108可以包括更小且更快的1級(L1)高速緩存器、略大的2級(L2)高速緩存器以及可能的附加高速緩存器級。L1高速緩存器可以被包含在處理引擎106的存儲器子系統(tǒng)內(nèi)。在一個實施例中,高速緩沖存儲器108至少包括處理器102的L2數(shù)據(jù)高速緩存器。
在工作中,處理引擎106執(zhí)行參考最終位于系統(tǒng)存儲器104中的數(shù)據(jù)值的、包括操作數(shù)等的指令。在一個實施例中,微指令包括提交至具有用以訪問在所定址的位置處所存儲的所請求數(shù)據(jù)的相應(yīng)地址的緩沖存儲器108的加載指令。可以定義許多不同類型的加載指令,但各加載指令在這里被簡稱為加載指令。如果所請求的數(shù)據(jù)存儲在高速緩沖存儲器108內(nèi),則從高速緩沖存儲器108擷取數(shù)據(jù)并將該數(shù)據(jù)提供至處理引擎106,而不必訪問系統(tǒng)存儲器104。向高速緩沖存儲器108的訪問與向系統(tǒng)存儲器104的訪問相比快得多,由此改善了性能。然而,如果所請求的數(shù)據(jù)不是存儲在高速緩沖存儲器108內(nèi),則高速緩沖存儲器108將該請求經(jīng)由總線接口單元109轉(zhuǎn)送至任何附加高速緩存器級(未示出)和/或轉(zhuǎn)送到存儲器控制器110。存儲器控制器110從系統(tǒng)存儲器104擷取所請求的數(shù)據(jù)并將該所請求的數(shù)據(jù)轉(zhuǎn)送至高速緩沖存儲器108以供存儲。一旦存儲在高速緩沖存儲器108中,則處理引擎106響應(yīng)于加載指令而可利用該數(shù)據(jù)。諸如通過執(zhí)行存儲指令等將數(shù)據(jù)存儲到系統(tǒng)存儲器104中按相反方向進行操作,但這里不進行進一步說明。
應(yīng)當理解,高速緩沖存儲器108在處理引擎106需要時存儲數(shù)據(jù)方面,改善了性能和效率。SRP 112進行工作,以檢測來自處理引擎106的加載指令、然后預(yù)期處理引擎106的未來加載請求。所預(yù)期的數(shù)據(jù)在被處理引擎106實際請求之前被預(yù)取到高速緩沖存儲器108中。如果SRP 112正確地預(yù)期了未來加載指令,則性能得以顯著改善。
圖2是根據(jù)一個實施例的SRP 112的簡化框圖。利用SRP 112的訪問邏輯206的更新邏輯202檢測來自處理引擎106的各加載指令。各加載指令包括如這里進一步所述可能是全(或完整)地址的相應(yīng)地址ADDR,其中ADDR的上部是頁地址PA。更新邏輯202使用頁地址PA來訪問并更新訪問邏輯206的跨距參考表(SRT)204。如果在SRT 204中沒有找到頁地址PA,則利用相應(yīng)頁的新條目來更新SRT 204,并且操作完成。如果在SRT 204中找到了頁地址PA,則首先更新相應(yīng)的頁條目,然后更新邏輯202向決策邏輯208設(shè)置(assert)決策信號DEC,其中該決策邏輯208訪問來自SRT 204中的利用PA(由更新邏輯202提供)定址的相應(yīng)條目的信息以作出預(yù)取決策。如果決定進行預(yù)取操作,則決策邏輯208向預(yù)取器210設(shè)置信號TRIGGER(觸發(fā)),并且還設(shè)置方向信號DIR。更新邏輯202還利用加載信號LD表示各加載指令,并且將當前加載指令的地址ADDR提供至預(yù)取器210。如這里進一步所述,預(yù)取器210使用ADDR來針對一個或多個預(yù)取操作中的各預(yù)取操作確定預(yù)取地址。決策邏輯208還讀取與ADDR相加或從ADDR中減去的STRIDE(跨距)值,以確定預(yù)取地址。DIR信號表示加上還是減去STRIDE值。
在一個實施例中,DIR信號是表示正或負方向的二進制類型信號等。在一個實施例中,正方向表示不斷增加的存儲器地址,其中向ADDR加上STRIDE值,而負方向表示不斷減少的存儲器地址,其中從ADDR中減去STRIDE值。這樣,STRIDE值表示連續(xù)的加載訪問之間的相對偏移,并且DIR信號表示連續(xù)的訪問在存儲器中是正在向上還是向下移動。將DIR信號提供回至更新邏輯202,其中如這里進一步所述,在還設(shè)置了TRIGGER的情況下,該更新邏輯202更新SRT 204中的相應(yīng)條目。
在決策邏輯208從SRT 204中在由值SIGN(符號)表示的方向上使用STRIDE檢測到大量連續(xù)的加載訪問的情況下,決策邏輯208向預(yù)取器210設(shè)置信號STABLE(穩(wěn)定)。在決策邏輯208設(shè)置了STABLE的情況下,預(yù)取器210使用STRIDE值和SIGN值來進行多個連續(xù)預(yù)取操作。如果SIGN表示正方向,則向當前加載地址多次加上STRIDE以確定正方向上的多個預(yù)取地址。否則,如果SIGN表示負方向,則從當前加載地址中多次減去STRIDE以確定負方向上的多個預(yù)取地址。操作的穩(wěn)定模式持續(xù),直到不再設(shè)置STABLE信號為止,其中在這種情況下,操作返回至通過TRIGGER信號的設(shè)置所表示的正常觸發(fā)模式。注意,在操作的穩(wěn)定模式中,盡管預(yù)取器210可能忽視TRIGGER信號的設(shè)置,訪問邏輯206和決策邏輯208也繼續(xù)正常進行工作。
圖3是根據(jù)一個實施例的SRT 204和決策邏輯208的更詳細框圖。SRT 204可以是全相聯(lián)或組相聯(lián)的。圖示的SRT 204針對多行條目中的各行條目包括八個字段(列),其中各條目存儲與存儲器104的頁相關(guān)聯(lián)的相應(yīng)值。這些字段包括物理頁地址(PPA)字段、穩(wěn)定字段(STABLE)、表示連續(xù)的存儲器訪問之間的最小偏移的跨距字段(STRIDE)、表示穩(wěn)定模式期間的存儲器訪問方向的符號字段(SIGN)、提供正方向上的計數(shù)的正字段(POS)、提供負方向上的計數(shù)的負字段(NEG)、提供表示所訪問的最后一個高速緩存行的部分地址的先前訪問字段(PREVIOUS ACCESS)、以及表示隨時間的經(jīng)過而已訪問了頁的哪些高速緩存行的訪問歷史字段(ACCESS HISTORY)。在第一次訪問系統(tǒng)存儲器104中的物理頁的情況下,針對該頁分配新的頁條目以追蹤向該頁的附加訪問。如果SRT 204未滿,則分配下一可用的未使用行并且利用初始值對該行進行初始化。如果SRT 204已滿,則選擇當前條目其中之一作為被具有新的頁地址的新條目替換的犧牲者(victim),并且利用初始值替換該條目行中的各字段。根據(jù)例如最近最少使用(LRU)替換策略等的任何適當?shù)奶鎿Q策略來選擇SRT 204中的被替換的犧牲者。
PPA字段存儲能夠足以唯一地標識頁的頁地址的高位(表示為PA1、PA2等)。如這里進一步所述,將存儲器104的各頁細分為高速緩存行(或塊),并且各高速緩存行存儲多個字節(jié)的數(shù)據(jù)。在設(shè)置了表示針對該頁已調(diào)用了操作的穩(wěn)定模式的情況下,穩(wěn)定字段存儲被設(shè)定為真(例如,邏輯“1”)的至少一位(表示為STB1、STB2等)??缇嘧侄未鎯哂斜硎鞠鄬τ诋斍绊摰刂返母咚倬彺嫘衅频母咚倬彺嫘袑傩缘臒o符號值(表示為STR1、STR2等),其中該高速緩存行偏移表示諸如在加載訪問針對每個高速高速緩存行、每隔一個高速緩存行、每隔兩個高速緩存行等的情況下的存儲器訪問模式。POS字段和NEG字段存儲正計數(shù)值和負計數(shù)值(分別表示為P1、P2等和N1、N2等),其中這些正計數(shù)值和負計數(shù)值表示諸如正方向(不斷增加的存儲器地址)或負方向(不斷減少的存儲器地址)等的存儲器訪問模式的普遍方向。SIGN字段可以是表示頁的相應(yīng)POS字段和NEG字段中的較大字段的單個位(表示為S1、S2等)。在POS和NEG相等的情況下,符號值表示正方向(其中,正方向更為常見,因此被視為相對于負方向占主導(dǎo))。先前訪問字段存儲具有高速緩存行屬性并且標識最后頁訪問的頁內(nèi)的特定高速緩存行的值(表示為PRA1、PRA2等)。訪問歷史字段存儲位數(shù)等于存儲器的頁的高速緩存行的數(shù)量的訪問歷史向量(AHV)(單獨表示為AHV1、AHV2等),并且用于追蹤頁內(nèi)的高速緩存行訪問。
各字段的大小取決于物理頁大小和高速緩存行(或塊)大小。在一個實施例中,系統(tǒng)存儲器104的頁大小可以是4千字節(jié)(KB或4096字節(jié))、其高速緩存行大小可以是64字節(jié)(B)、并且其物理地址可以是48位或ADDR[47:0]。在這種情況下,PPA是36位或ADDR[47:12](是唯一標識各物理頁的頁地址的高36位),先前訪問字段是6位或ADDR[11:6](足夠唯一標識給定頁內(nèi)的64個高速緩存行中的各行),并且訪問歷史字段是(每個高速緩存行1位)64位。盡管跨距字段可以是6位,但作為代替,選擇跨距字段具有4位以將要檢測的最大跨距限制為15。在一個實施例中,如果跨距大于15,則到檢測到該跨距時,預(yù)取地址可能跨越頁邊界。本結(jié)構(gòu)用于檢測頁內(nèi)的跨距、而非跨越頁邊界的跨距。POS字段和NEG字段各自也為4位。穩(wěn)定字段和符號字段各自為1位。應(yīng)當理解,字段針對不同的結(jié)構(gòu)、特別是針對不同的頁地址長度、頁大小和緩存行大小可以具有不同的大小。
PPA=PA0的條目表示在第一次訪問具有頁地址PA0的頁時的初始值。初始穩(wěn)定值是0b(其中,末尾所添加的“b”表示二進制值),這表示操作的穩(wěn)定模式最初為假。初始跨距值是作為針對4位值的最大可能跨距的1111b。針對向同一頁的各附加訪問確定新的跨距值,并且如果新的跨距值小于先前跨距值,則利用較小的跨距值來更新跨距值。這樣,SRT 204保持追蹤各頁的最可能是實際跨距值的最小跨距。在亂序處理器中,加載訪問可能是以模糊了實際跨距值的亂序方式執(zhí)行的。然而,確定真跨距或?qū)嶋H跨距不大于任何特定加載訪問的任何個體跨距值。這樣,存儲最小跨距偏移作為各頁的跨距值。POS計數(shù)值和NEG計數(shù)值各自初始被設(shè)定為0000b,并且符號位是最初表示正方向的0b。
最初的訪問歷史向量AHV的64位中的1位被設(shè)定為1,以表示哪個高速緩存行被當前加載訪問命中。在例示實施例中,由于迄今為止僅進行了一次訪問,因此將第61位設(shè)定為邏輯“1”,并且將其余各位設(shè)定為邏輯“0”。先前訪問值是采用二進制格式的、等于十進制數(shù)61的111101b。如這里進一步所述,PF0條目的值中的多個值隨著各新訪問而改變。例如,假定下一加載訪問是頁0的第59個高速緩存行。計算出新跨距值作為高速緩存行的數(shù)量方面的差,即2(61-59=2)。將頁PF0的STRIDE字段更新為表示跨距2的0010b。先前訪問字段改變?yōu)楸硎咀詈笤L問了頁PF0的高速緩存行59的111011b,并且由于此時已訪問了第61個高速緩存行和第59個高速緩存行,因此將訪問歷史向量更新為00010100…0b。除非如這里進一步所述、更新其它字段,否則針對向頁PF0的各新加載訪問以這種方式持續(xù)進行操作。
決策邏輯208包括控制邏輯302、跨距掩碼邏輯304、計數(shù)邏輯306和仲裁邏輯308。控制邏輯302通常控制決策邏輯208中的其它邏輯塊的定時和啟動。計數(shù)邏輯306包括正移位寄存器310和負移位寄存器312、正與(AND)邏輯314和負與(AND)邏輯316、正1計數(shù)邏輯318和負1計數(shù)邏輯320。如前面所述,響應(yīng)新加載請求,更新邏輯202使用從訪問中的頁的物理頁地址ADDR中所擷取的頁地址PA來更新SRT 204中的條目,然后設(shè)置DEC信號以啟動決策??刂七壿?02檢測到所設(shè)置的DEC信號,訪問SRT 204中的與PA相對應(yīng)的條目的字段,然后向移位寄存器310和312設(shè)置加載(L)指示和移位(S)指示。移位寄存器310和312從SRT 204加載相應(yīng)的AHV向量,然后如這里進一步所述,使所加載的值移位了基于所訪問的高速緩存行的量。正移位寄存器310使所加載的AHV在與正方向相對應(yīng)的一個方向上移位并且輸出正訪問歷史值(PH),并且負移位寄存器312使所加載的AHV在與負方向相對應(yīng)的相反方向上移位并且輸出負訪問歷史值(NH)。如這里進一步所述,各情況下的移位數(shù)量取決于當前所訪問的高速緩存行的位置。將PH值提供至正與邏輯314的相應(yīng)輸入,并且將NH值提供至負與邏輯316的相應(yīng)輸入。
控制塊302向跨距掩碼邏輯304設(shè)置過濾指示F,其中該過濾指示F訪問SRT 204中的與頁地址PA相對應(yīng)的跨距值,并且生成相應(yīng)的跨距掩碼向量(SMV)、或者將該跨距掩碼向量(SMV)提供或選擇至正與邏輯314和負與邏輯316的相應(yīng)輸入。正與邏輯314和負與邏輯316各自在歷史值PH和NH與SMV之間進行逐位布爾與邏輯函數(shù),并且將這些結(jié)果分別輸出至正1計數(shù)邏輯318和負1計數(shù)邏輯320的相應(yīng)輸入。正1計數(shù)邏輯318對正與邏輯314的輸出所提供的邏輯“1”的數(shù)量進行計數(shù)并輸出正計數(shù)P,并且負1計數(shù)邏輯320對負與邏輯316的輸出所提供的邏輯“0”的數(shù)量進行計數(shù)并輸出負計數(shù)N。
然后,控制塊302向仲裁邏輯308設(shè)置仲裁指示ARB。仲裁邏輯308包括或訪問多個閾值TTH、SETH和SDTH以控制跨距判斷操作。這些閾值中的任一個或多個可以是固定的或可編程的。在一個實施例中,各閾值具有在啟動順序期間所設(shè)定的、隨后可以由處理器102經(jīng)由內(nèi)部配置寄存器等改變的默認值。在可編程的情況下,閾值可以由用戶進行編程。TTH是判斷何時要設(shè)置TRIGGER信號的針對P計數(shù)和N計數(shù)的觸發(fā)閾值。在由控制邏輯302提示的情況下,如果P或N達到TTH,則仲裁邏輯308設(shè)置TRIGGER信號。連同TRIGGER一起設(shè)置DIR信號以表示所檢測到的跨距的方向,并且DIR信號是基于P計數(shù)值和N計數(shù)值中的較大計數(shù)值的。如果P=N,則由于判斷為正的跨距更為常見因而占主導(dǎo)、因此判斷為方向為正。因而,如果P≥N,則DIR是表示正方向的“0”,否則在N>P的情況下,DIR是表示負方向的“1”。SETH是判斷操作的穩(wěn)定模式何時有效的穩(wěn)定啟用閾值。在P+N≥SETH的情況下,仲裁邏輯308設(shè)置STABLE信號以啟動操作的穩(wěn)定模式。SDTH是判斷操作的穩(wěn)定模式何時無效以返回至正常觸發(fā)操作的穩(wěn)定禁用閾值。在P+N≤SDTH的情況下,仲裁邏輯308取消設(shè)置(de-assert)或取消STABLE信號以終止操作的穩(wěn)定模式。
在一個實施例中,TTH具有諸如2等的相對較低的默認值,其中在P或N達到TTH時,設(shè)置TRIGGER。在一個實施例中,SETH的默認值為7,使得在P+N≥7的情況下,設(shè)置STABLE。在一個實施例中,SDTH的默認值為4,使得在P+N≤4的情況下,在操作的穩(wěn)定模式期間,取消設(shè)置STABLE。然而,如上所述,可以將默認值修改為不同的默認值,并且可以針對不同的結(jié)構(gòu)對不同的閾值進行編程。
圖4是示出根據(jù)一個實施例的訪問歷史向量AHV的形式的簡化框圖。將系統(tǒng)存儲器104劃分為一系列的Q+1頁P0~PQ,其中Q是任何適當?shù)恼麛?shù)。頁數(shù)和各頁的大小取決于特定操作參數(shù)。如前面所述,常見的頁大小為4KB。在402中以分解圖示出頁地址PFX處的仲裁頁PX,其中該仲裁頁PX進一步細分為Z+1個高速緩存行CL0~CLZ,其中Z是任何適當?shù)恼麛?shù)。在頁大小為4KB的一個實施例中,可能存在64個高速緩存行(Z=63),其中各高速緩存行包括64字節(jié)。然而,應(yīng)當理解,可以使用不同的頁和高速緩存行大小。示出與頁PX 402相對應(yīng)的訪問歷史向量AHV_X 404。訪問歷史向量AHV_X 404針對各頁PX402的各個高速緩存行包括1位。訪問歷史向量AHV_X 404的各位最初被編程為表示尚未被訪問的邏輯“0”。
響應(yīng)于來自處理引擎106的加載指令,將已被訪問的幾個高速緩存行表示為“HIT(命中)”。對于已被訪問的并利用HIT指示進行了標記的各高速緩存行,利用更新邏輯202將訪問歷史向量AHV_X 404中的相應(yīng)位設(shè)定為邏輯“1”。應(yīng)當理解,訪問歷史向量AHV中的邏輯“1”表示已被訪問了至少一次的高速緩存行。邏輯“1”的總數(shù)表示頁已被命中了至少該總數(shù)多的次數(shù),盡管可能已不只一次訪問了高速緩存行中的任一個或多個高速緩存行。如這里進一步所述,使用SRT 204和決策邏輯208來檢測跨距訪問模式和相應(yīng)的方向。
圖5是根據(jù)一個實施例的更新邏輯202的簡化框圖。在頂部示出當前加載指令訪問的全地址ADDR,其中該全地址ADDR可被細分為頁地址PA、高速緩存行地址CLA和字節(jié)地址BA。全地址的高位標識正在訪問的頁,高速緩存行地址CLA標識所標識的頁內(nèi)的正在訪問的高速緩存行,并且字節(jié)地址BA標識所標識的高速緩存行內(nèi)的正在定址或參考的特定字節(jié)。將PA應(yīng)用于比較器502的一個輸入,其中該比較器502將PA與SRT 204中的各個頁值PA1~PAN進行比較。如果不存在匹配的條目,則調(diào)用添加/替換邏輯504以替換現(xiàn)有條目或使用新的PA向SRT 204添加新條目。將新條目插入空白或未使用條目中、或者根據(jù)適用的替換策略替換現(xiàn)有條目。如前面所述的示例條目PA0所示,將條目中的除先前訪問字段和訪問歷史字段以外的各個字節(jié)設(shè)定為預(yù)定初始值。如果存在匹配的條目,則如這里所述,利用更新匹配條目邏輯505來更新先前訪問字段和訪問歷史字段。
在利用更新匹配條目邏輯505正在更新現(xiàn)有條目的情況下,利用加法器506從CLA中減去相應(yīng)的先前訪問字段中的表示為PRA的先前地址值,并且差是508所示的偏移值OFF。OFF值表示頁內(nèi)的連續(xù)訪問之間的高速緩存行的數(shù)量。利用比較器510將相應(yīng)的跨距字段中所存儲的當前跨距值STR與OFF進行比較,并且如“MIN SELECT”所示,選擇這兩者中的較小一個作為更新后的STR。因而,如果OFF小于STR,則如虛線512所示,OFF變?yōu)樾碌目缇嘀礢TR。然而,如果STR≤OFF,則STR保持不變。應(yīng)當理解,通過連續(xù)的更新,STR變?yōu)樽鳛槎鄠€連續(xù)訪問之間的最小差的最小跨距值。對于新的更新后的條目,如514所示,將來自全地址ADDR的CLA作為先前訪問值PRA存儲到相應(yīng)頁條目的先前訪問字段中。
CLA還被提供至解碼器516,其中該解碼器516輸出用于標識加載訪問當前正在訪問的高速緩存行的當前訪問向量(CAV)。CAV的形式類似于相應(yīng)頁條目的訪問歷史字段中所存儲的當前訪問歷史值A(chǔ)HV,其中除表示當前正在訪問的高速緩存行的一個邏輯“1”位以外,CAV全部具有邏輯“0”。來自解碼器516的CAV由或(OR)邏輯518以逐位方式進行邏輯或,并且將結(jié)果返回存儲到訪問歷史字段的更新后的AHV中。
盡管在圖5中未示出,但更新邏輯202還更新SRT 204的POS字段、NEG字段和STABLE字段。如果設(shè)置了TRIGGER,則更新邏輯202在DIR是邏輯“0”的情況下使POS增加、或者在DIR是邏輯“1”的情況下更新NEG。更新邏輯202更新相應(yīng)的符號字段的SIGN值,以反映POS值和NEG值中的較大值、或者在POS和NEG相等的情況下反映正方向。POS值和NEG值鏈接至跨距值,使得每次針對給定條目更新跨距值時,將相應(yīng)的POS值和NEG值重置回為初始值(即,0000b)。在針對給定頁設(shè)置了STABLE的情況下,更新邏輯202還將STABLE位設(shè)定在相應(yīng)的頁條目中。
圖6是用于根據(jù)訪問歷史向量AHV和跨距掩碼向量SMV確定計數(shù)值P和N的計數(shù)邏輯306的更詳細框圖。示出CAL所標識的當前訪問位置,從而標識AHV內(nèi)的用于標識當前正在訪問的高速緩存行的位。在第一步驟中,控制邏輯302向移位寄存器310和312設(shè)置加載指示L。移位寄存器310和312都通過加載AHV的當前值來進行響應(yīng)。
在第二步驟中,控制邏輯302向移位控制邏輯602設(shè)置移位指示S,其中該移位指示S使用全地址中的CAL值以針對移位寄存器310和312各自確定要進行的移位的數(shù)量。移位寄存器310使所存儲的AHV的副本左移,直到CAL所標識的位被移出到移位寄存器310的左側(cè)外為止。移位控制邏輯602在移位操作期間將邏輯“0”移位到移位寄存器310的右側(cè)(或者邏輯“0”在右側(cè)被硬線連接)。以類似方式,移位寄存器312使所存儲的AHV的副本右移,直到CAL所標識的位被移出到移位寄存器312的右側(cè)外為止。移位控制邏輯602在移位操作期間將邏輯“0”移位到移位寄存器312的左側(cè)(或者邏輯“0”在左側(cè)被硬線連接)。
值得注意的是,移位寄存器310和312可以與訪問歷史字段物理并聯(lián)連接,使得可以并行地將AHV的各位加載到移位寄存器中。一旦加載,則進行移位操作,以使正訪問模式和負訪問模式隔離。可選地,AHV可被同時或順次移位到移位寄存器310和312中。在后面實施例中,移位控制邏輯602可被配置為將針對移位寄存器310和312各自的加載和移位操作組合為一個移位操作(全體或針對各移位寄存器),以節(jié)約時鐘周期。
在第三步驟中,控制邏輯302向跨距掩碼邏輯304設(shè)置過濾指示F,其中該過濾指示F從SRT 204中擷取相應(yīng)的跨距值STR并輸出相應(yīng)的跨距掩碼向量SMV。在一個實施例中,跨距掩碼邏輯304是查找表等,其中在該查找表中,使用跨距值STR作為用以訪問相應(yīng)SMV的地址。在替代實施例中,跨距掩碼邏輯304可以計算SMV、或者使用適當?shù)霓D(zhuǎn)換邏輯等來對STR進行轉(zhuǎn)換。
示出與邏輯314作為一系列的2輸入與門,其中各2輸入與門具有接收移位寄存器310的相應(yīng)位的一個輸入和接收SMV的相應(yīng)位的另一輸入。示出SMV作為從跨距掩碼邏輯304輸出的一系列的64位S63、S62、……、S0。對于正計數(shù)邏輯,對SMV進行反向,使得SMV的位S0由第一與門606與移位寄存器310的最左位進行邏輯與,并且該輸出被提供至正1計數(shù)邏輯318的第一輸入。由第二與門608將SMV的下一位S1與從移位寄存器310的左側(cè)起的第二位進行邏輯與,并且該輸出被提供至正1計數(shù)邏輯318的第二輸入。針對所有位進行逐位與操作,直到移位寄存器310的最右位為止,其中由另一與門610將該最右位與SMV的S63進行邏輯與,并且該輸出被提供至正1計數(shù)邏輯318的最后一個輸入。
除針對負計數(shù)邏輯、SMV沒有反向以外,與邏輯316以相似方式被配置為一系列的2輸入與門。在這種情況下,將SMV的位S63與移位寄存器312最左位進行邏輯與,直到將SMV的位S0與移位寄存器312的最右位進行邏輯與。這些結(jié)果被提供至負1計數(shù)邏輯320的相應(yīng)輸入。
在第四步驟中,控制邏輯302向計數(shù)邏輯318和320設(shè)置CNT指示。正1計數(shù)邏輯318對作為移位寄存器310中的移位值和反向的SMV之間的逐位與操作的結(jié)果的邏輯“1”的數(shù)量進行計數(shù),以提供P計數(shù)。負1計數(shù)邏輯320對作為移位寄存器312中的移位值和SMV之間的逐位與操作的結(jié)果的邏輯“1”的數(shù)量進行計數(shù),以提供N計數(shù)。
在第五步驟中,控制邏輯302向仲裁邏輯308設(shè)置ARB指示,以判斷是否設(shè)置TRIGGER信號、DIR信號和/或STABLE信號。
圖7是根據(jù)一個實施例的仲裁邏輯308的簡化框圖。將P計數(shù)提供至比較器702的一個輸入,其中該比較器702在其它輸入處接收TTH,并且在輸出處提供表示P≥TTH的信號。將N計數(shù)提供至比較器704的一個輸入,其中該比較器704在其它輸入處接收TTH,并且在輸出處提供表示N≥TTH的信號。將比較器702和704的輸出提供至或邏輯706的各個輸入,其中該或邏輯706響應(yīng)于ARB指示而在輸出處設(shè)置TRIGGER信號。這樣,在P≥TTH的情況下或者在N≥TTH的情況下,設(shè)置了TRIGGER。
還將P和N提供至另一比較器708的各個輸入,該比較器708響應(yīng)于ARB指示而在輸出處提供表示P<N的信號,其中比較器708的輸出還可以是DIR信號。DIR對于正方向是邏輯“0”,并且對于負方向是邏輯“1”。因此,如果P<N,則DIR是表示負方向的邏輯“1”。否則,DIR是表示正方向的邏輯“0”。
還將P和N提供至加法器710的各個輸入,其中該加法器710響應(yīng)ARB指示,將P和N相加以生成SUM值或者SUM=P+N。將SUM提供至比較器712的一個輸入,該比較器712在其它輸入處接收SETH,其中比較器712在其輸出處提供穩(wěn)定啟用信號SS,該穩(wěn)定啟用信號在SUM≥SETH的情況下變高。將SUM提供到另一比較器714的一個輸入,該比較器714在其它輸入處接收SDTH,其中比較器714提供穩(wěn)定禁用信號RS,該穩(wěn)定禁用信號在SUM≤SDTH的情況下變高。將SS提供至置位復(fù)位(SR)鎖存器716的置位(S)輸入,將RS提供至SR鎖存器716的復(fù)位(R)輸入,并且在RS鎖存器716的Q輸出處設(shè)置STABLE信號。在操作中,STABLE在P+N≥SETH的情況下被設(shè)置得高(啟用穩(wěn)定操作),并且在P+N≤SDTH的情況下被復(fù)位回低(禁用穩(wěn)定操作)。
圖8是示出根據(jù)一個實施例的跨距掩碼邏輯304的表格圖。在這樣情況下,跨距掩碼邏輯304可以被配置為包含如下查找表的存儲器,其中該查找表在輸入處接收跨距值并且在輸出處提供相應(yīng)的跨距掩碼向量SMV。在例示實施例中,跨距值是在1(0001b)~15(1111b)的范圍內(nèi)4位數(shù),用于選擇邏輯1和邏輯0的總共多達64位的相應(yīng)重復(fù)模式??缇嘀当硎咎幚硪?06所進行的各個連續(xù)存儲器訪問的最小高速緩存行偏移。
在跨距值為1(0001b)的情況下,SMV全部為1(111,…,1b),從而表示連續(xù)地加載訪問各高速緩存行,而沒有跳過任何高速緩存行。在亂序處理器中,實際的加載訪問在操作中可能跳過一個或多個高速緩存行,但在兩次連續(xù)的加載訪問是針對頁中的鄰接高速緩存行的情況下,跨距值變?yōu)?(最小跨距),從而表示實際加載操作是針對各高速緩存行的可能性。在跨距值為2(0010b)的情況下,SMV的每隔一個位置是邏輯1、或10101,…,0b。在跨距值為3(0011b)的情況下,SMV的每隔兩個位置是邏輯1、或1001001,…,0b。該模式針對每個連續(xù)跨距值重復(fù),使得在跨距值是15(1111b)的情況下,SMV的每隔15個位置是邏輯1、或1000000000000001,…,0b。
圖9是示出根據(jù)一個實施例的計數(shù)邏輯306的操作的圖形描述。在頂部示出具有表示給定頁的高速緩存行的加載訪問的一系列邏輯1和0的訪問歷史向量AHV。低地址在AHV的右側(cè)。如圖所示,加載訪問針對從低地址開始的高速緩存行中的每隔一個緩存行,并在頁的正方向上增加,使得跨距值為2。在從最右位置起的第12個高速緩存行示出表示為CAL的當前訪問位置。盡管先前加載訪問是在第14個高速緩存行和第16個高速緩存行發(fā)生的,但考慮到亂序操作,這是有可能的。響應(yīng)于來自控制邏輯302的加載指示,將AHV復(fù)制到移位寄存器310和312中,這以縮寫形式示出。響應(yīng)于來自控制邏輯302的移位指示,移位寄存器310中的位發(fā)生左移,其中邏輯0從右側(cè)移入,直到CAL處的位從移位寄存器310的左側(cè)移出為止。類似地,移位寄存器312中的位發(fā)生右移,其中邏輯0從左側(cè)移入,直到CAL處的位從移位寄存器312的右側(cè)移出為止。
如902所示,選擇跨距值為2的SMV值,即如圖8所示的SMV=10101,...,0b,除非針對正方向、SMV值發(fā)生反向而使得S63的MSB在最右位置外。進行逐位邏輯與操作的結(jié)果如904所示??刂七壿?02設(shè)置計數(shù)指示CNT,并且正1計數(shù)邏輯318對904處所示的邏輯“1”的數(shù)量進行計數(shù),這樣得到906所示的正方向計數(shù)5。
以類似方式,如908所示,選擇跨距值為2的SMV值,即SMV=10101,...,0b。在這種情況下,值沒有反向,使得S63的MSB在最左位置。進行逐位邏輯與操作的結(jié)果如910所示??刂七壿?02設(shè)置計數(shù)指示CNT,并且負1計數(shù)邏輯320對910所示的邏輯“1”的數(shù)量進行計數(shù),這樣得到912所示的負方向計數(shù)2。
圖9示出計數(shù)邏輯306實現(xiàn)兩個主要功能。第一個功能是用以使通過移位操作針對當前訪問值CAL所進行的正方向和負方向上的訪問隔離。第一方向上的移位使正方向上的訪問隔離,并且相反方向上的移位使負方向上的訪問隔離。第二個功能是用以利用基于多次訪問的最小跨距的SMV來過濾移位后的訪問值。通常,過濾掉與根據(jù)最小跨距值的跨距模式不匹配的訪問,從而僅留下與跨距訪問模式相匹配的訪問。然后,對如此隔離并過濾后的值進行計數(shù),以判斷是否識別出跨距訪問模式,如果識別出了跨距訪問模式,則判斷所識別出的跨距模式的相應(yīng)方向。
返回參考圖7,對于TTH=2的P=5和N=2,P≥TTH和N≥TTH這兩者都為真,使得或邏輯706設(shè)置了TRIGGER信號。比較器708判斷為方向為正,使得DIR=0b。如果SETH為7,則加法器710所判斷出的SUM值至少為SETH,使得SR鎖存器716將STABLE設(shè)置為高,以啟動操作的穩(wěn)定模式。
圖10是SRT 204中的給定行的一個條目的示意圖,其示出針對向同一頁的給定系列的訪問如何更新字段。將第一個加載訪問的全ADDR以簡化十六進制格式示出為“0X4000”,其中該“0X4000”對被標識為相應(yīng)頁地址“0X4”的頁的第一個高速緩存行進行定址。在1002示出條目的字段中的初始值。在1004和1006分別示出向同一頁0X4的地址0X4100和0X4080的連續(xù)訪問。由于訪問第一頁,因此初始條目1002的先前訪問字段被示出為000000b,并且示出最右位被設(shè)定為邏輯“1”的訪問歷史字段,其中該邏輯“1”表示訪問了頁的第一個高速緩存行。1004所示的第二個加載訪問是針對高速緩存行偏移為4的第五個高速緩存行的,使得將先前訪問字段更新為000100b,將訪問歷史字段更新為0,…,0010001b,并且將跨距值更新為0100b(偏移4)。1006所示的第三個加載訪問是針對高速緩存行偏移為2的第三個緩存行,使得將先前訪問字段更新為000010b,將訪問歷史字段更新為0,…,0010101b,并且跨距值更新為0010b(偏移2)。應(yīng)注意的是,利用被設(shè)置為表示正方向的0b的DIR來更新TRIGGER。POS字段和NEG字段自隨著跨距值的各變化進行復(fù)位以來,各自保持為0000b。假定跨距值實際為2,則連續(xù)的訪問繼續(xù)以相似的方式更新字段,并且使POS增加以表示正方向。一旦檢測到跨距相同的足夠數(shù)量的連續(xù)加載訪問,則設(shè)置STABLE信號。
圖11是示出根據(jù)一個實施例的更新邏輯202的操作的流程圖。更新邏輯202在第一方塊1102中檢測來自處理引擎106的指令,并且在下一方塊1104中詢問該指令是否是訪問存儲器位置的加載指令。如果不是,則操作循環(huán)回至方塊1102,并且操作保持在方塊1102和1104之間循環(huán),直到檢測到加載指令為止。在實際實現(xiàn)中,評價各指令的一位或多位以檢測加載指令。在檢測到加載指令的情況下,操作進入方塊1106,其中在方塊1106中,使用從加載指令的地址ADDR所擷取到的頁地址PA來訪問SRT 204。如圖5所示,PA包括ADDR的用于標識正在訪問的頁的高位,并且比較器502將所提供的PA與SRT204中的各個頁地址進行比較。如果沒有找到PA的匹配條目,則如在下一方塊1108中所判斷出的,加載指令正在訪問新的頁。如果沒有找到匹配條目,則操作進入方塊1110,其中在該方塊1110中,如前面針對加法/替換邏輯504所述,將新的條目添加到SRT 204,并且操作返回至方塊1102以檢測任何后續(xù)的加載指令。如圖3所示的具有頁地址PA0的條目所示,利用初始值填充新條目的字段。
相反,如果如方塊1108中所判斷出的是找到了匹配,則操作進入方塊1112以更新匹配條目。如圖5所示,將地址ADDR的高速緩存行地址CLA部分與匹配條目的當前先前訪問值PRA進行比較,以確定向頁的當前訪問和上次訪問之間的高速緩存行偏移OFF。如果OFF小于匹配條目的當前跨距值STR,則如虛線512所示,利用OFF更新跨距值。否則,條目的STR值保持不變。然后,如514所示,使用ADDR的CLA來替換先前訪問字段的PRA值。此外,通過設(shè)定與當前正在訪問的高速緩存行相關(guān)聯(lián)的位來更新訪問歷史向量AHV。
一旦在方塊1112中更新了條目,則操作進入方塊1114,其中在該方塊1114中,更新邏輯202向決策邏輯208設(shè)置DEC以進行計數(shù),并且進一步?jīng)Q定是否設(shè)置TRIGGER以進行預(yù)取操作。此外,將加載信號LD和ADDR提供至預(yù)取器210。根據(jù)操作的模式以及是否設(shè)置了TRIGGER,預(yù)取器210使用ADDR來計算一個或多個預(yù)取地址。在下一方塊1116中,更新邏輯202檢測是否設(shè)置了TRIGGER,并且如果設(shè)置了TRIGGER,則更新匹配條目的POS字段、NEG字段和SIGN字段。特別地,評價DIR值并且使POS或NEG增加,并且可以基于更新后的POS值和NEG值來更新匹配條目的SIGN值。在下一方塊1118中,如果檢測到?jīng)Q策邏輯208所設(shè)置的、表示操作的穩(wěn)定模式的STABLE信號,則更新邏輯202對匹配條目的穩(wěn)定字段進行設(shè)定。然后,操作返回至方塊1102以檢測任何后續(xù)的加載指令。
圖12是示出根據(jù)一個實施例的決策邏輯208的控制邏輯302的操作的流程圖。參考圖6所示的邏輯操作。操作在方塊1202中循環(huán),直到檢測到更新邏輯202所設(shè)置的決策信號DEC為止。在設(shè)置了DEC的情況下,操作進入方塊1204,其中在該方塊1204中,控制邏輯302設(shè)置L指示,以向移位寄存器310和312加載與頁地址PA相對應(yīng)的條目的AHV。在下一方塊1206,控制邏輯302設(shè)置S指示,以基于當前訪問位置CAL使移位寄存器310和312各自分別使AHV的加載值左移和右移。然后,操作進入方塊1208,其中在該方塊1208中,控制邏輯302向跨距掩碼邏輯304設(shè)置F指示,以基于相應(yīng)的跨距值選擇SMV。將SMV提供至正與邏輯314和負與邏輯316以有效地過濾發(fā)生移位的歷史值,從而將過濾后的值分別提供至正1計數(shù)邏輯318和負1計數(shù)邏輯320。然后,操作進入方塊1210,其中在該方塊1210中,控制邏輯302向正1計數(shù)邏輯318和負1計數(shù)邏輯320設(shè)置CNT指示,以分別生成正計數(shù)值P和負計數(shù)值N,其中該正計數(shù)值P和負計數(shù)值N被提供至仲裁邏輯308。然后,操作進入方塊1212,其中在該方塊1212中,控制邏輯302向仲裁邏輯308設(shè)置ARB指示以評價P和N,從而如前面所述進行預(yù)取決策。然后,操作循環(huán)回至方塊1202,以檢測DEC的任何后續(xù)設(shè)置,并且重復(fù)進行操作。
圖13是示出根據(jù)一個實施例的決策邏輯208的仲裁邏輯308的操作的流程圖。參考圖7所示的邏輯操作。操作在方塊1302中循環(huán),直到控制邏輯302檢測到ARB指示為止。在提供ARB的情況下,操作進入方塊1304,其中在該方塊1304中,如果正計數(shù)P和負計數(shù)N中的任一個至少為TTH,則設(shè)置TRIGGER信號。在方塊1306中,在負計數(shù)N大于正計數(shù)P的情況下,DIR被設(shè)置為邏輯“1”,否則DIR為邏輯“0”。在下一方塊1308中,如果P和N的總和至少為SETH,則設(shè)置STABLE信號。在下一方塊1310中,如果P和N的總和降至SDTH以下,則取消STABLE信號。操作返回至方塊1302以檢測下一ARB指示,并且重復(fù)進行操作。
圖14是示出根據(jù)一個實施例的預(yù)取器210的操作的流程圖。在第一方塊1402中,詢問是否設(shè)置了STABLE信號。如果沒有設(shè)置STABLE信號,則操作進入方塊1404以詢問是否設(shè)置了TRIGGER信號。如果沒有設(shè)置TRIGGER信號,則操作循環(huán)回至塊1402,并且在STABLE和TRIGGER未被設(shè)置的情況下,操作在方塊1402和1404之間循環(huán)。如果設(shè)置了TRIGGER而沒有設(shè)置STABLE,則操作進入方塊1406,其中在該方塊1406中,使用ADDR值、STRIDE值和DIR值來計算預(yù)取地址。DIR值判斷是將STRIDE與ADDR相加還是從ADDR中減去STRIDE來確定預(yù)取地址。在下一方塊1408中,預(yù)取器210通過將來自系統(tǒng)存儲器104的高速緩存行加載到高速緩沖存儲器108中,來使用所計算出的預(yù)取地址進行預(yù)取操作。這樣,處理引擎106尚未請求的、但根據(jù)所檢測到的跨距模式而有可能請求的高速緩存行地址被預(yù)加載到高速緩沖存儲器108中。如果被處理引擎106請求,則與系統(tǒng)存儲器104相比,從高速緩沖存儲器108中更快地擷取到該預(yù)加載的高速緩存行。然后,操作循環(huán)回至方塊1402。每次設(shè)置了TRIGGER而沒有設(shè)置STABLE時,將來自系統(tǒng)存儲器104的高速緩存行預(yù)取到高速緩沖存儲器108中以提高性能。
如果如在方塊1402中所檢測到的、設(shè)置了STABLE,則操作進入方塊1410以詢問是否設(shè)置了LD信號。盡管設(shè)置了STABE,也僅響應(yīng)于處理引擎106的加載請求來進行穩(wěn)定操作期間的預(yù)取。如果沒有設(shè)置LD,則操作循環(huán)回至方塊1402,并且操作在1402和1410之間循環(huán),直到設(shè)置了LD或沒有設(shè)置STABLE為止。應(yīng)注意的是,在第一次設(shè)置STABLE時,有可能還設(shè)置了LD。在如方塊1410中所檢測到的、在設(shè)置了LD的情況下,操作進入方塊1412,其中在該方塊1412中,使用ADDR、STRIDE和SIGN來計算接下來的“X”個預(yù)取地址。SIGN表示跨距操作的方向,使得將STRIDE與ADDR相加X次或者從ADDR減去STRIDE X次,以確定接下來的X個預(yù)取地址。數(shù)字“X”是正整數(shù),并且可以是默認值或者可以是以與TTH值、SETH值和SDTH值類似的方式可編程的。
在一個實施例中,X的默認值為3。例如,假定SIGN表示正方向并且X=3,則將STRIDE與ADDR相加以確定第一個預(yù)取地址,將STRIDE與第一個預(yù)取地址相加以確定第二個預(yù)取地址,然后將STRIDE與第二個預(yù)取地址相加以確定第三個預(yù)取地址。當然,以類似方式X次減去STRIDE,以確定表示負方向的SIGN的該負方向上的X個預(yù)取地址。
一旦計算出預(yù)取地址,則操作進入方塊1414,以詢問預(yù)取相對于處理引擎106的實際加載請求是否提前了“Y”次。數(shù)字“Y”是大于X的正整數(shù),并且可以是默認值或者可以是與TTH值、SETH值和SDTH值類似的方式可編程的。在一個實施例中,Y與X乘以適當?shù)谋稊?shù)有關(guān),諸如Y=2X等。應(yīng)當理解,穩(wěn)定操作可能是積極的,因而相對于處理引擎106所提交的實際加載請求太過提前的預(yù)取操作可能并不有利。這樣,Y值比較提供了防止預(yù)取操作太過提前的機制。當然,可以根據(jù)特定實現(xiàn)來調(diào)整Y,并且在有需要的情況下可以使Y變大。如果操作的穩(wěn)定模式期間的預(yù)取提前了Y次預(yù)取以上,則操作返回至方塊1402,并且操作在操作的穩(wěn)定模式期間循環(huán),直到再次設(shè)置LD為止。操作從方塊1414循環(huán)返回,直到預(yù)取操作沒有提前Y次以上的預(yù)取操作為止。
如果如方塊1414中所判斷出的、穩(wěn)定模式期間的預(yù)取操作沒有提前Y次,則操作進入方塊1416,其中在該方塊1416中,使用所計算出的下一預(yù)取地址來進行預(yù)取操作。然后,操作進入方塊1418,以判斷是否進行了使用所計算出的X個預(yù)取地址的X次預(yù)取。如果沒有,則操作循環(huán)回至方塊1414,以進行多達X次預(yù)取,只要沒有提前Y次即可。操作在方塊1414、1416和1418之間循環(huán),直到X次預(yù)取操作為止或者直到提前了Y次為止。一旦完成了X次預(yù)取,則操作返回至方塊1402并且重復(fù)進行操作。在操作的穩(wěn)定模式中,處理引擎106尚未請求的、但根據(jù)所檢測到的被視為穩(wěn)定的跨距模式而有可能請求的多達X個高速緩存行地址被預(yù)加載到高速緩沖存儲器108中。如果被處理引擎106請求,則從高速緩沖存儲器108中更快地擷取到預(yù)加載的高速緩存行,而不必訪問系統(tǒng)存儲器104。在操作的穩(wěn)定模式中,將來自系統(tǒng)存儲器104的多個高速緩存行預(yù)取到高速緩沖存儲器108中以顯著提高性能。
已呈現(xiàn)了前述說明,以使得本領(lǐng)域普通技術(shù)人員能夠如在特定應(yīng)用及其要求的上下文內(nèi)所提供的那樣實行和使用本發(fā)明。盡管已參考本發(fā)明的特定優(yōu)選版本相當詳細地說明了本發(fā)明,但還可進行并考慮其它版本和變化。針對優(yōu)選實施例的各種變形對于本領(lǐng)域技術(shù)人員而言將是顯而易見的,并且這里所定義的一般原理還可應(yīng)用于其它實施例。例如,可以以包括邏輯裝置或電路等的任何適當方式實現(xiàn)這里所述的電路。
本領(lǐng)域技術(shù)人員應(yīng)當理解,在沒有背離本發(fā)明的精神和范圍的情況下,可以容易地使用所公開的概念和具體實施例作為用于設(shè)計或修改用于執(zhí)行本發(fā)明的相同目的的其它結(jié)構(gòu)的基礎(chǔ)。因此,本發(fā)明并不意圖局限于這里所示和所述的特定實施例,而是應(yīng)當符合與這里所公開的原理和新穎特征一致的最寬范圍。
相關(guān)申請的交叉引用
本申請要求2015年12月14日遞交的美國臨時申請62/266,855的優(yōu)先權(quán),在此通過引用包含其全部內(nèi)容以用于所有的目的和用途。