專利名稱:預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)預(yù)取技術(shù),尤其涉及一種預(yù)執(zhí)行(Pre-execution)指導(dǎo)的數(shù)據(jù)預(yù)取方法及系統(tǒng)。
背景技術(shù):
隨著處理器和存儲器性能差距的不斷擴(kuò)大,訪存延時對處理器性能的影響日益嚴(yán)重,已經(jīng)成為制約處理器性能提升的主要瓶頸。雖然高速緩存(Cache)的使用可以有效地填補(bǔ)處理器與存儲器之間的性能鴻溝,但是高速緩存設(shè)計往往采用按需數(shù)據(jù)取回策略,無法有效處理應(yīng)用程序中復(fù)雜多樣的訪存地址模式。隨著應(yīng)用程序工作集的不斷擴(kuò)大,即使采用大容量片上緩存也可能難以滿足應(yīng)用程序的數(shù)據(jù)訪問需求。因此,如何有效降低或隱藏訪存延時,是高性能處理器設(shè)計的關(guān)鍵問題之一。數(shù)據(jù)預(yù)取技術(shù)是一種已經(jīng)被廣泛應(yīng)用的訪存延時包容技術(shù),它在處理器真正需要某數(shù)據(jù)之前就預(yù)測其訪存地址并提前發(fā)出請求,而不需要等到發(fā)生緩存失效后再發(fā)起主存訪問,從而達(dá)到將訪存延時隱藏的效果。預(yù)取的實現(xiàn)主要可以分為軟件預(yù)取和硬件預(yù)取兩種。軟件預(yù)取通常由程序員手動或編譯器自動在程序中插入專門的預(yù)取指令來觸發(fā)預(yù)取。軟件預(yù)取指令不僅會占用額外的處理器執(zhí)行周期,而且會增加代碼體積。此外,軟件預(yù)取往往借助對程序靜態(tài)訪存特性的剖視來插入預(yù)取指令,因而無法對程序運行時刻的動態(tài)訪存特性加以利用,并且,軟件預(yù)取無法加速各種以二進(jìn)制可執(zhí)行文件形式存在的程序。硬件預(yù)取通常由硬件預(yù)取器在運行時監(jiān)測程序執(zhí)行過程中可重復(fù)的訪存地址模式并自動發(fā)起預(yù)取請求。硬件預(yù)取能夠捕獲并利用程序運行時刻的動態(tài)訪存特性,從而進(jìn)行準(zhǔn)確和及時的預(yù)取。硬件預(yù)取還可以避免由預(yù)取指令帶來的執(zhí)行周期和代碼體積的開銷,并且不受程序是否可重新編譯的限制。傳統(tǒng)的硬件預(yù)取技術(shù)可主要分為基于相關(guān)性的預(yù)取(Correlation-based Prefetching)和跨距預(yù)取(Stride Prefetching)兩類?;谙嚓P(guān)性的預(yù)取發(fā)掘并記錄程序執(zhí)行過程中特定的相關(guān)性規(guī)律和事件,并在監(jiān)測到這些相關(guān)性規(guī)律和事件重復(fù)發(fā)生時觸發(fā)相應(yīng)的預(yù)取請求。該技術(shù)需要使用大容量(通常為兆比特(MB)級)的存儲結(jié)構(gòu)對相關(guān)性歷史信息及相應(yīng)的預(yù)取地址進(jìn)行記錄,這會造成不容忽視的復(fù)雜度和硬件開銷,使其很難被應(yīng)用到實際的處理器中。與基于相關(guān)性的預(yù)取相比,跨距預(yù)取是一種復(fù)雜度和硬件開銷較低的預(yù)取技術(shù), 目前已被廣泛應(yīng)用于英特爾antel)奔騰(Pentium)4和IBM Power6等商用處理器中??缇囝A(yù)取技術(shù)主要基于訪存的空間局部性規(guī)律進(jìn)行數(shù)據(jù)預(yù)取,主要適用于規(guī)則的訪存模式。預(yù)執(zhí)行技術(shù)也是一種簡單有效的訪存延時包容技術(shù)。為了避免流水線由于長延時的緩存失效(比如二級緩存(L2Cache)失效)而停頓,預(yù)執(zhí)行技術(shù)利用處理器的空閑周期預(yù)先執(zhí)行失效訪存指令的后續(xù)指令,通過對程序中存儲級并行的充分發(fā)掘以及對訪存帶寬資源的有效利用,達(dá)到將多個主存訪問的延時相重疊的效果。通過對發(fā)生L2Cache失效指令的后續(xù)指令的預(yù)先執(zhí)行,預(yù)執(zhí)行技術(shù)能夠?qū)θ我庠L存模式進(jìn)行精確的數(shù)據(jù)預(yù)取。本發(fā)明的發(fā)明人經(jīng)分析后發(fā)現(xiàn)與預(yù)執(zhí)行相比,跨距預(yù)取的優(yōu)勢主要體現(xiàn)在兩個方面。首先,跨距預(yù)取可以在任意時刻對符合跨距訪存模式的地址進(jìn)行預(yù)取,而預(yù)執(zhí)行只在L2Cache失效引發(fā)處理器進(jìn)入預(yù)執(zhí)行模式后才進(jìn)行預(yù)取。其次,預(yù)執(zhí)行發(fā)起預(yù)取的提前時間不夠長,可能導(dǎo)致在處理器需要某數(shù)據(jù)時,對該數(shù)據(jù)的預(yù)取請求尚未完成,而跨距預(yù)取能夠較早地發(fā)起預(yù)取請求,從而保證預(yù)取數(shù)據(jù)在處理器需要之前及時返回。與跨距預(yù)取相比,預(yù)執(zhí)行的優(yōu)勢主要體現(xiàn)在兩個方面。首先,預(yù)執(zhí)行能夠通過對真實指令片段的提前執(zhí)行進(jìn)行精確的預(yù)取,而跨距預(yù)取則是使用預(yù)測的訪存地址進(jìn)行預(yù)取。其次,預(yù)執(zhí)行能夠?qū)Ψ且?guī)則的訪存模式進(jìn)行預(yù)取,而跨距預(yù)取只能對規(guī)則的訪存模式進(jìn)行預(yù)取。由以上分析可以看出,跨距預(yù)取與預(yù)執(zhí)行有著各自的特點和優(yōu)勢,因此,可以考慮將兩者的優(yōu)勢進(jìn)行有效結(jié)合,使各自都能發(fā)揮更大效用,從而進(jìn)一步改善處理器的性能。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是需要提供一種預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取技術(shù),克服現(xiàn)有技術(shù)沒有很好地將預(yù)執(zhí)行和跨距預(yù)取這兩種數(shù)據(jù)預(yù)取技術(shù)融合的不足。為了解決上述技術(shù)問題,本發(fā)明提供了一種預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取方法,該方法包括跨距預(yù)取器監(jiān)測二級緩存失效訪存序列,并在捕獲到跨距訪存模式時自動觸發(fā)預(yù)取請求;在監(jiān)測到二級緩存訪問發(fā)生失效時,處理器對當(dāng)前的寄存器狀態(tài)進(jìn)行備份,轉(zhuǎn)換到預(yù)執(zhí)行模式;在預(yù)執(zhí)行模式下,該處理器繼續(xù)執(zhí)行發(fā)生二級緩存失效的指令的后續(xù)指令,對非規(guī)則的訪存模式進(jìn)行精確的預(yù)取,獲得預(yù)執(zhí)行結(jié)果及其有效狀態(tài)保存到指令與結(jié)果緩沖器中,并從捕獲的真實訪存信息中提取出有用信息指導(dǎo)跨距預(yù)取器及早地發(fā)出該預(yù)取請求;當(dāng)引發(fā)預(yù)執(zhí)行的二級緩存失效指令完成主存訪問后,該處理器清空流水線,恢復(fù)備份的寄存器狀態(tài),從引發(fā)預(yù)執(zhí)行的訪存指令開始繼續(xù)執(zhí)行。優(yōu)選地,該跨距預(yù)取器監(jiān)測該二級緩存失效訪存序列及捕獲該跨距訪存模式的步驟,包括該跨距預(yù)取器向前或向后進(jìn)行預(yù)取,并使用存儲區(qū)域劃分方法來劃分流。優(yōu)選地,該跨距預(yù)取器監(jiān)測到同一個流中連續(xù)兩次二級緩存失效符合該跨距訪存模式時,初次發(fā)起該預(yù)取請求。優(yōu)選地,該跨距預(yù)取器將預(yù)取數(shù)據(jù)存放在該二級緩存中。優(yōu)選地,當(dāng)主要L2失效發(fā)生時,該處理器為該主要L2失效分配一空閑的失效狀態(tài)處理寄存器,并初始化該失效狀態(tài)處理寄存器的過濾位;當(dāng)次要L2失效發(fā)生時,一更新過
5濾器讀出該失效行對應(yīng)的失效狀態(tài)處理寄存器中的過濾位并判斷引發(fā)該次要L2失效的原因;對于由預(yù)執(zhí)行引發(fā)的該次要L2失效,過濾掉對跨距預(yù)取器的更新;對于由跨距預(yù)取器引發(fā)的該次要L2失效,更新跨距預(yù)取器及該過濾位;其中,需訪問的行已經(jīng)由跨距預(yù)取器或預(yù)執(zhí)行指令發(fā)起主存訪問且尚未完成的二級緩存失效稱為該次要L2失效,其余二級緩存失效為該主要L2失效。優(yōu)選地,該處理器繼續(xù)執(zhí)行發(fā)生二級緩存失效的指令的后續(xù)指令時,不更新體系結(jié)構(gòu)狀態(tài)。優(yōu)選地,該處理器從引發(fā)預(yù)執(zhí)行的訪存指令開始繼續(xù)執(zhí)行的步驟,包括該處理器從引發(fā)預(yù)執(zhí)行的訪存指令開始,將保存在該指令與結(jié)果緩沖器中的預(yù)執(zhí)行結(jié)果合并到體系結(jié)構(gòu)狀態(tài),將計算結(jié)果無效的預(yù)執(zhí)行指令重新發(fā)射到流水線中執(zhí)行并提交執(zhí)行結(jié)果。本發(fā)明還提供了一種預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取系統(tǒng),包括跨距預(yù)取器,用于監(jiān)測二級緩存失效訪存序列,并在捕獲到跨距訪存模式時自動觸發(fā)預(yù)取請求;處理器,用于監(jiān)測到二級緩存訪問發(fā)生失效時,對當(dāng)前的寄存器狀態(tài)進(jìn)行備份,轉(zhuǎn)換到預(yù)執(zhí)行模式;在預(yù)執(zhí)行模式下,用于繼續(xù)執(zhí)行發(fā)生二級緩存失效的指令的后續(xù)指令, 對非規(guī)則的訪存模式進(jìn)行精確的預(yù)取,獲得預(yù)執(zhí)行結(jié)果及其有效狀態(tài)保存到指令與結(jié)果緩沖器中,并從捕獲的真實訪存信息中提取出有用信息指導(dǎo)跨距預(yù)取器及早地發(fā)出該預(yù)取請求;還用于當(dāng)引發(fā)預(yù)執(zhí)行的二級緩存失效指令完成主存訪問后,清空流水線,恢復(fù)備份的寄存器狀態(tài),從引發(fā)預(yù)執(zhí)行的訪存指令開始繼續(xù)執(zhí)行。優(yōu)選地,該跨距預(yù)取器在監(jiān)測該二級緩存失效訪存序列及捕獲該跨距訪存模式時,用于向前或向后進(jìn)行預(yù)取,并使用存儲區(qū)域劃分方法來劃分流。優(yōu)選地,該跨距預(yù)取器用于監(jiān)測到同一個流中連續(xù)兩次二級緩存失效符合該跨距訪存模式時,初次發(fā)起該預(yù)取請求。優(yōu)選地,該跨距預(yù)取器用于將預(yù)取數(shù)據(jù)存放在該二級緩存中。優(yōu)選地,更新過濾器,用于當(dāng)次要L2失效發(fā)生時,讀出該次要L2失效行對應(yīng)的失效狀態(tài)處理寄存器中的過濾位并判斷引發(fā)該次要L2失效的原因;對于由預(yù)執(zhí)行引發(fā)的該次要L2失效,用于過濾掉對跨距預(yù)取器的更新;對于由跨距預(yù)取器引發(fā)的該次要L2失效, 用于更新跨距預(yù)取器及該過濾位;其中,該處理器用于主要L2失效發(fā)生時,為該主要L2失效分配一空閑的失效狀態(tài)處理寄存器并初始化該失效狀態(tài)處理寄存器的過濾位;需訪問的行已經(jīng)由跨距預(yù)取器或預(yù)執(zhí)行指令發(fā)起主存訪問且尚未完成的二級緩存失效稱為該次要L2失效,其余二級緩存失效為該主要L2失效。優(yōu)選地,該處理器用于繼續(xù)執(zhí)行發(fā)生二級緩存失效的指令的后續(xù)指令時,不更新體系結(jié)構(gòu)狀態(tài)。優(yōu)選地,該處理器從引發(fā)預(yù)執(zhí)行的訪存指令開始繼續(xù)執(zhí)行時,用于從引發(fā)預(yù)執(zhí)行的訪存指令開始,將保存在該指令與結(jié)果緩沖器中的預(yù)執(zhí)行結(jié)果合并到體系結(jié)構(gòu)狀態(tài),以及將計算結(jié)果無效的預(yù)執(zhí)行指令重新發(fā)射到流水線中執(zhí)行并提交執(zhí)行結(jié)果。與現(xiàn)有技術(shù)相比,本發(fā)明提供的技術(shù)方案,使用預(yù)執(zhí)行(I^e-execution)和跨距預(yù)取(Stride Prefetching)分別處理不同的訪存模式,使用預(yù)執(zhí)行期間的訪存信息指導(dǎo)跨距預(yù)取器(Stride Prefetcher)的預(yù)取過程和使用更新過濾器(Update Filter)對預(yù)執(zhí)行的指導(dǎo)過程進(jìn)行優(yōu)化。在正常模式下,處理器使用跨距預(yù)取器對規(guī)則的訪存模式進(jìn)行預(yù)取;當(dāng)發(fā)生L2Cache失效時,處理器進(jìn)入到預(yù)執(zhí)行模式,在預(yù)執(zhí)行模式下預(yù)先執(zhí)行后續(xù)指令以對非規(guī)則的訪存模式進(jìn)行精確的預(yù)取,利用預(yù)執(zhí)行過程中提前捕獲到的真實訪存信息來指導(dǎo)跨距預(yù)取器的預(yù)取過程,從而有效提升處理器的訪存延時包容能力。本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。
附圖用來提供對本發(fā)明技術(shù)方案的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實施例一起用于解釋本發(fā)明的技術(shù)方案,并不構(gòu)成對本發(fā)明技術(shù)方案的限制。在附圖中圖1所示為本實施例的預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取方法的流程示意圖;圖2是本發(fā)明技術(shù)方案與現(xiàn)有的跨距預(yù)取和預(yù)執(zhí)行的性能分析示意圖;圖3是本發(fā)明兩種kcondary L2Miss對跨距預(yù)取器的更新產(chǎn)生的效果示意圖;圖4是本發(fā)明采用預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取機(jī)制的處理器狀態(tài)轉(zhuǎn)換示意圖;圖5是本發(fā)明帶有更新過濾器的跨距預(yù)取器結(jié)構(gòu)示意圖;圖6是本發(fā)明更新過濾器的工作流程示意圖;圖7是本發(fā)明采用預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取機(jī)制的處理器結(jié)構(gòu)示意圖。
具體實施例方式以下將結(jié)合附圖及實施例來詳細(xì)說明本發(fā)明的實施方式,借此對本發(fā)明如何應(yīng)用技術(shù)手段來解決技術(shù)問題,并達(dá)成技術(shù)效果的實現(xiàn)過程能充分理解并據(jù)以實施。首先,如果不沖突,本發(fā)明實施例以及實施例中的各個特征在不相沖突前提下的相互結(jié)合,均在本發(fā)明的保護(hù)范圍之內(nèi)。另外,在附圖的流程圖示出的步驟可以在諸如一組計算機(jī)可執(zhí)行指令的計算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。實施例一、預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取方法圖1所示為本實施例的預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取機(jī)制的工作原理及主要流程。步驟S110,在初始時刻,處理器處于正常執(zhí)行模式(與預(yù)執(zhí)行模式相區(qū)別,表示沒有使用本發(fā)明方法時處理器正常執(zhí)行并提交指令的模式),正常執(zhí)行并提交指令。步驟S120,跨距預(yù)取器負(fù)責(zé)監(jiān)測L2Cache失效訪存序列,并在捕獲到跨距訪存模式時自動觸發(fā)預(yù)取請求。步驟S130,當(dāng)監(jiān)測到L2Cache訪問發(fā)生失效時,處理器對當(dāng)前的寄存器狀態(tài)進(jìn)行備份(Checkpoint),然后立即轉(zhuǎn)換到預(yù)執(zhí)行模式。步驟S140,處理器運行于預(yù)執(zhí)行模式,繼續(xù)執(zhí)行發(fā)生L2Cache失效的指令 (L2Cache訪問發(fā)生失效所對應(yīng)的指令)的后續(xù)指令,對非規(guī)則的訪存模式進(jìn)行精確的預(yù)取,將預(yù)執(zhí)行指令產(chǎn)生的預(yù)執(zhí)行結(jié)果及其有效狀態(tài)保存到指令與結(jié)果緩沖器(Instruction and Result Buffer, IRB)中,并從捕獲的真實訪存信息中提取出有用信息指導(dǎo)跨距預(yù)取器及早地發(fā)出該預(yù)取請求;但是并不更新體系結(jié)構(gòu)狀態(tài)(一般指令提交時才更新體系結(jié)構(gòu)狀態(tài),以保存執(zhí)行結(jié)果或改變處理器狀態(tài),推測式執(zhí)行或預(yù)執(zhí)行時并不更新體系結(jié)構(gòu)狀態(tài),會單獨使用一些部件保存中間結(jié)果)。本發(fā)明提供一個存儲數(shù)據(jù)高速緩存(Store Cache),用于保存存儲(More)指令的存儲數(shù)據(jù),并將其前遞給后續(xù)的載入(Load)指令訪問和使用。對與發(fā)生L2Cache失效指令數(shù)據(jù)無關(guān)的指令所進(jìn)行的預(yù)執(zhí)行,可以產(chǎn)生精確的數(shù)據(jù)預(yù)取和有效的計算結(jié)果;與發(fā)生L2Cache失效指令數(shù)據(jù)相關(guān)的指令則被直接移出流水線,并將其目標(biāo)寄存器標(biāo)記為無效 (INV)。在預(yù)執(zhí)行過程中,處理器將預(yù)執(zhí)行指令產(chǎn)生的預(yù)執(zhí)行結(jié)果及其有效狀態(tài)保存到指令與結(jié)果緩沖器(Instruction and Result Buffer,ΙΙΦ)中,以加快指令正常執(zhí)行的速度。 同時,預(yù)執(zhí)行過程中的真實訪存信息被用來指導(dǎo)跨距預(yù)取器的預(yù)取過程。本發(fā)明還提供了一個更新過濾器,從捕獲的真實訪存信息中提取出有用信息(其余信息可以稱之為有害信息),其中,有用信息用于指導(dǎo)跨距預(yù)取器及早地發(fā)出預(yù)取請求, 其余的有害信息則直接過濾掉。步驟S150,當(dāng)引發(fā)預(yù)執(zhí)行的L2Cache失效指令完成主存訪問后,處理器清空流水線,恢復(fù)備份的寄存器狀態(tài),并轉(zhuǎn)換到一合并結(jié)果模式。步驟S160,在合并結(jié)果模式下,處理器從引發(fā)預(yù)執(zhí)行的訪存指令(即引發(fā)預(yù)執(zhí)行的L2Cache失效指令)開始繼續(xù)執(zhí)行,包括將保存在IRB中的有效的預(yù)執(zhí)行結(jié)果直接合并到體系結(jié)構(gòu)狀態(tài),將計算結(jié)果無效的預(yù)執(zhí)行指令重新發(fā)射到流水線中執(zhí)行并提交相應(yīng)的執(zhí)行結(jié)果。在此期間,如果監(jiān)測到L2Cache訪問發(fā)生失效,處理器將再次轉(zhuǎn)換到預(yù)執(zhí)行模式。步驟S170,當(dāng)所有預(yù)執(zhí)行的指令都完成提交后,處理器返回正常執(zhí)行模式??缇囝A(yù)取器監(jiān)測L2Cache失效序列和捕獲該跨距訪存模式時,可以向前或向后這兩個方向進(jìn)行預(yù)取,使用存儲區(qū)域劃分方法來劃分流,每個流負(fù)責(zé)預(yù)取4KB或者其他數(shù)據(jù)量的存儲區(qū)域。當(dāng)監(jiān)測到同一個流中連續(xù)兩次L2Cache失效符合跨距訪存模式時,初次發(fā)起對后續(xù)地址的預(yù)取請求。對于每一個流,初次發(fā)起的預(yù)取請求將相對于本次失效訪存地址向前或向后預(yù)取2個連續(xù)的L2Cache行(本實施例的預(yù)取距離為2,其他實施例中也可以是其他的預(yù)取距離);以后,每當(dāng)一個已預(yù)取的L2Cache行被處理器消耗時,跨距預(yù)取器繼續(xù)向前或向后預(yù)取1個L2Cache行,從而維持預(yù)取距離(Prefetch Distance)為2。為了減少面積開銷及額外的數(shù)據(jù)一致性維護(hù)代價,并避免對一級緩存(LlCache) 造成污染,跨距預(yù)取器將預(yù)取數(shù)據(jù)直接存放在L2Cache中??缇囝A(yù)取與預(yù)執(zhí)行均能夠在程序?qū)嶋H需要某數(shù)據(jù)之前,就提前向主存發(fā)起訪問請求。在程序執(zhí)行的過程中,如果有訪存指令發(fā)生L2Cache失效,并且需訪問的行已經(jīng)由跨距預(yù)取器或預(yù)執(zhí)行指令發(fā)起主存訪問且尚未完成,則將該L2Cache失效稱為次要L2失效(Secondary L2Miss),將其它的 L2Cache 失效稱為主要 L2 失效(Primary L2Miss)。而根據(jù)需訪問的行是由跨距預(yù)取器還是由預(yù)執(zhí)行指令提前發(fā)起主存訪問,可將義⑶??!叔巧L2Miss劃分為跨距預(yù)取器引發(fā)的kcondary L2Miss (可以稱之為第一類 Secondary L2Miss)和預(yù)執(zhí)行引發(fā)的kcondary L2Miss (可以稱之為第二類kcondary L2Miss)這兩類。上述兩類kcondary L2Miss在指導(dǎo)跨距預(yù)取器捕獲正確訪存模式方面具有不同的影響。如果義⑶?。∈錨 L2Miss是由跨距預(yù)取器引發(fā),表明實際發(fā)生的訪存模式符合跨距預(yù)取器的預(yù)期和預(yù)取行為,因此,使用其信息更新跨距預(yù)取器以繼續(xù)觸發(fā)對后續(xù)數(shù)據(jù)的預(yù)取,有利于提高預(yù)取的準(zhǔn)確率從而提高處理器性能。如果義⑶??!叔^ L2MiSS是預(yù)執(zhí)行所引發(fā),表明之前已經(jīng)有相同地址的訪存指令發(fā)生L2Cache失效(Primary L2Miss)且更新過跨距預(yù)取器,如果此時再次更新跨距預(yù)取器,將有可能對跨距預(yù)取器的訪存模式捕獲過程造成負(fù)面影響,從而降低數(shù)據(jù)預(yù)取的準(zhǔn)確率。本發(fā)明提供的更新過濾器,可以有效識別并去除預(yù)執(zhí)行引發(fā)WkcondaryI^Miss 對跨距預(yù)取器的更新,從而有效提高預(yù)取的準(zhǔn)確率。更新過濾器可以通過在L2Cache的每個失效狀態(tài)處理寄存器(Miss Status Handling Register, MSHR)中添加一位的過濾位實現(xiàn)。當(dāng)一個L2Cache失效發(fā)生時,處理器將該失效地址與MSHR中的地址進(jìn)行全相聯(lián)比較。若存在地址相同的MSHR,則表明該失效為kcondary L2Miss,否則該失效為I^rimary L2Miss。當(dāng)I^rimary L2Miss發(fā)生時,處理器為其分配一個空閑的MSHR,并且初始化相應(yīng)的過濾位如果該I^rimary L2Miss是由跨距預(yù)取器的預(yù)取請求引發(fā)的,則其過濾位被初始化為0 ;否則,其過濾位被初始化為1。之后,ikcondary L2Miss發(fā)生時,更新過濾器將該失效行對應(yīng)的MSHR中的過濾位讀出并對引發(fā)該kcondary L2Miss的原因進(jìn)行檢查和判斷 若過濾位為1,則表明該義⑶!!叔^ L2Miss是由預(yù)執(zhí)行引發(fā)的,所以將其對跨距預(yù)取器的更新過濾掉;如果過濾位為0,則表明該義⑶??!叔^ L2Miss是由跨距預(yù)取器引發(fā)的,允許其更新跨距預(yù)取器以及早發(fā)出預(yù)取請求,同時,將相應(yīng)MSHR的過濾位設(shè)置為1,以避免后續(xù)該行的kcondary L2Miss再次更新跨距預(yù)取器。當(dāng)對L2Cache失效行的主存訪問完成時,其對應(yīng)的過濾位隨MSHR —起被釋放。與跨距預(yù)取和預(yù)執(zhí)行相比,本發(fā)明技術(shù)方案提出的預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取對預(yù)取效果的改善主要體現(xiàn)在預(yù)取覆蓋率、預(yù)取及時性和預(yù)取準(zhǔn)確率三個方面。第一,跨距預(yù)取可以一直對規(guī)則的訪存模式進(jìn)行預(yù)取,預(yù)執(zhí)行可以在L2Cache失效引發(fā)處理器進(jìn)入預(yù)執(zhí)行模式后對非規(guī)則的訪存模式進(jìn)行預(yù)取,這樣就可以結(jié)合跨距預(yù)取與預(yù)執(zhí)行在捕獲訪存模式方面的優(yōu)勢,提高預(yù)取的覆蓋率。第二,在預(yù)執(zhí)行期間的真實訪存信息的指導(dǎo)下,跨距預(yù)取還可以對預(yù)執(zhí)行和跨距預(yù)取均能夠產(chǎn)生的地址更早地發(fā)起預(yù)取請求,改善預(yù)取的及時性。第三,更新過濾器通過有效去除預(yù)執(zhí)行指導(dǎo)過程中對跨距預(yù)取器的有害更新,能夠提高預(yù)取的準(zhǔn)確率。圖2展示了本發(fā)明相比于跨距預(yù)取和預(yù)執(zhí)行的性能優(yōu)勢分析,具體如下訪存指令序列在按序執(zhí)行處理器中執(zhí)行情況如圖2中的情形(a)所示,當(dāng)處理器在執(zhí)行訪存指令A(yù)、B、C、D和E時均發(fā)生L2Cache失效,流水線停頓并等待失效處理完成。 訪存指令A(yù)、B、D和E的行地址是連續(xù)的,分別為L、L+UL+2和L+3。訪存指令C的行地址為S??缇囝A(yù)取的優(yōu)化效果如圖2中的情形(b)所示,當(dāng)訪存指令A(yù)和B導(dǎo)致連續(xù)的 L2Cache行,即第L行和第L+1行均發(fā)生失效時,跨距預(yù)取器捕獲到跨距訪存模式,于是發(fā)出對第L+2行和第L+3行的預(yù)取請求。因此,在執(zhí)行訪存指令D和E時將發(fā)生L2Cache命中。 但是,由于行S不符合跨距訪存模式,執(zhí)行訪存指令C時仍會發(fā)生L2Cache失效。預(yù)執(zhí)行的優(yōu)化效果如圖2中的情形(C)所示,在訪存指令A(yù)進(jìn)行主存訪問的過程中,處理器預(yù)先執(zhí)行訪存指令B、C和D(在圖中用b’、c’和d’表示),并提前對訪存地址 L+1、S和L+2發(fā)起主存訪問。當(dāng)處理器返回正常執(zhí)行時,訪存指令B和C將發(fā)生L2Cache 命中。正常執(zhí)行階段會復(fù)用預(yù)執(zhí)行產(chǎn)生的有效計算結(jié)果,使得訪存指令C和D之間的執(zhí)行間隔變短。因此,在訪存指令D執(zhí)行時,對地址L+2的預(yù)取請求尚未完成,導(dǎo)致其仍然發(fā)生 L2Cache失效。此外,預(yù)執(zhí)行期間未能覆蓋到訪存指令E,使得執(zhí)行訪存指令E時仍然會發(fā)生L2Cache失效。本發(fā)明技術(shù)方案的優(yōu)化效果如圖2中的情形(d)所示,在訪存指令A(yù)進(jìn)行主存訪問的過程中,處理器預(yù)先執(zhí)行訪存指令B和C(在圖中用b’和C’表示),并提前對訪存地址 L+1和S發(fā)起主存訪問。在對訪存指令B的預(yù)執(zhí)行(b’)發(fā)生L2Cache失效時,跨距預(yù)取器捕獲到跨距訪存模式(第L行和第L+1行均發(fā)生失效),于是發(fā)出對第L+2行和第L+3行的預(yù)取請求。這不僅能夠產(chǎn)生對訪存指令E的預(yù)取(第L+3行),而且能夠更早地發(fā)起對訪存指令D的預(yù)取(第L+2行,早于對訪存指令D的預(yù)執(zhí)行,在圖中用d’表示)。當(dāng)處理器返回正常執(zhí)行時,訪存指令B、C、D和E均發(fā)生L2Cache命中,使得本發(fā)明獲得比跨距預(yù)取和預(yù)執(zhí)行更好的優(yōu)化效果??梢钥闯?,本發(fā)明改善了預(yù)取的覆蓋率和及時性。圖3展示了兩種kcondary L2Miss對跨距預(yù)取器的更新產(chǎn)生的不同效果,具體說明如下訪存指令①發(fā)生L2Cache失效并導(dǎo)致處理器轉(zhuǎn)換到預(yù)執(zhí)行模式。在預(yù)執(zhí)行模式, 訪存指令②至⑥均發(fā)生L2Cache失效。預(yù)執(zhí)行的具體過程如下。在監(jiān)測到訪存指令①和②均發(fā)生失效(第L和L+1行)時,跨距預(yù)取器捕獲到跨距訪存模式,并發(fā)出對第L+2行和第L+3行的預(yù)取。接下來,訪存指令③(第L行)和訪存指令⑤(第L+1行)均發(fā)生了 kcondary L2Miss,且兩者均由預(yù)執(zhí)行所引發(fā)。類似地,訪存指令④(第L+2行)和訪存指令⑥(第L+3行)也都發(fā)生了 kcondary L2Miss,但是由跨距預(yù)取器所引發(fā)。上述失效訪存序列對跨距預(yù)取器的預(yù)取準(zhǔn)確率的影響分析如下。如果所有義⑶?。∈迩蒐2Miss均更新跨距預(yù)取器,當(dāng)跨距預(yù)取器監(jiān)測到訪存失效③ 時,將由于模式匹配失敗而停止對后續(xù)數(shù)據(jù)的預(yù)取,然后重新設(shè)置預(yù)取模式并返回到訓(xùn)練階段。訪存指令④和⑤的執(zhí)行使得連續(xù)的L+2和L+1行均發(fā)生失效,此時,新的預(yù)取模式訓(xùn)練完成并觸發(fā)對第L和L-I行的預(yù)取(此例中為無用的預(yù)取)。如果禁止預(yù)執(zhí)行引發(fā)的 Secondary L2Miss (即訪存失效③和⑤)對跨距預(yù)取器進(jìn)行更新,而只使用跨距預(yù)取器引 Smkcondary L2Miss (即訪存失效④和⑥)更新跨距預(yù)取器,則不僅可以避免訪存失效 ③對預(yù)取模式的破壞以及后續(xù)對第L和L-I行的無用預(yù)取,而且當(dāng)跨距預(yù)取器監(jiān)測到訪存失效④時,將由于模式匹配成功而繼續(xù)發(fā)出對第L+4行的預(yù)取請求,從而為訪存指令⑦進(jìn)行了正確的數(shù)據(jù)預(yù)取。這樣,當(dāng)訪存指令⑦執(zhí)行時,其訪存延時能夠完全消除或部分隱藏。根據(jù)上述分析,對于跨距預(yù)取器引發(fā)的kcondary L2Miss,如果使用其信息對跨距預(yù)取器進(jìn)行更新和訓(xùn)練,將有利于提高預(yù)取的準(zhǔn)確率,從而將更多程序執(zhí)行所需的數(shù)據(jù)提前從主存中取回。而對于預(yù)執(zhí)行引發(fā)的kc0ndaryL2MiSS,如果使用其信息對跨距預(yù)取器進(jìn)行更新和訓(xùn)練,將有可能會破壞預(yù)取跨距預(yù)取器對正確訪存模式的捕獲。為了使跨距預(yù)取器的預(yù)取效果在預(yù)執(zhí)行處理器中得到充分發(fā)揮,本發(fā)明設(shè)計了更新過濾器,可以在運行時刻有效識別并過濾預(yù)執(zhí)行引發(fā)的kcondary L2Miss,從而避免其對跨距預(yù)取器的破壞性更新與訓(xùn)練,改善預(yù)取的準(zhǔn)確率。圖4為采用預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取機(jī)制的處理器狀態(tài)轉(zhuǎn)換示意圖,具體的處理器執(zhí)行過程如下在初始時刻,處理器處于正常執(zhí)行模式??缇囝A(yù)取器負(fù)責(zé)監(jiān)測L2Cache失效訪存序列,并在捕獲到跨距訪存模式時自動觸發(fā)預(yù)取請求。當(dāng)監(jiān)測到L2Cache訪問發(fā)生失效時, 處理器對當(dāng)前的寄存器狀態(tài)進(jìn)行備份,然后立即轉(zhuǎn)換到預(yù)執(zhí)行模式。在預(yù)執(zhí)行模式,處理器繼續(xù)執(zhí)行發(fā)生L2Cache失效指令的后續(xù)指令,但是并不更新體系結(jié)構(gòu)狀態(tài)。數(shù)據(jù)無關(guān)的指令的預(yù)執(zhí)行,不僅可以進(jìn)行精確的數(shù)據(jù)預(yù)取,而且能夠產(chǎn)生有效的計算結(jié)果。同時,預(yù)執(zhí)行過程中的真實訪存信息被用來指導(dǎo)跨距預(yù)取器的預(yù)取過程。 更新過濾器將捕獲的真實訪存信息劃分成有用信息和有害信息。其中,有用信息被用于指導(dǎo)跨距預(yù)取器及早地發(fā)出預(yù)取請求,有害信息則被直接過濾掉。當(dāng)引發(fā)預(yù)執(zhí)行的L2Cache 失效指令完成主存訪問后,處理器清空流水線,恢復(fù)備份的寄存器狀態(tài),并轉(zhuǎn)換到合并結(jié)果模式。在合并結(jié)果模式,處理器從引發(fā)預(yù)執(zhí)行的訪存指令開始重新執(zhí)行并提交相應(yīng)的執(zhí)行結(jié)果。保存在IRB中的有效的預(yù)執(zhí)行結(jié)果被直接合并到體系結(jié)構(gòu)狀態(tài);結(jié)果無效的預(yù)執(zhí)行指令被重新發(fā)射到流水線中執(zhí)行。在此期間,如果再次監(jiān)測到L2Cache訪問發(fā)生失效,處理器將再次轉(zhuǎn)換到預(yù)執(zhí)行模式。當(dāng)所有預(yù)執(zhí)行的指令都完成提交后,處理器返回正常執(zhí)行模式。圖5展示了帶有更新過濾器的跨距預(yù)取器結(jié)構(gòu)示意圖,詳細(xì)描述如下更新過濾器會對L2Cache失效信息進(jìn)行篩選和過濾,只使用有用信息更新跨距預(yù)取器,無用的信息則被直接過濾掉??缇囝A(yù)取器的硬件結(jié)構(gòu)主要由Mream Table及其他相關(guān)邏輯組成。MreamTable 為8表項全相聯(lián)結(jié)構(gòu),采用偽最近最少使用(LRU)替換算法,每個表項包含以下六個域Tag域物理地址的高20位,用于標(biāo)識流的預(yù)取存儲區(qū)域,使用20位表示每個流的預(yù)取存儲區(qū)域為4KB(本發(fā)明實施例將存儲區(qū)域大小設(shè)置為4KB,其他實施例也適用于其它存儲區(qū)域大小);Valid域用于標(biāo)識流是否有效;Direction域用于標(biāo)識流的預(yù)取方向,0表示向后預(yù)取,1表示向前預(yù)??;Stride域用于標(biāo)識該流中訪存地址的跨距;Last Index域用于記錄最近一次發(fā)生失效的L2Cache行的索引;State域用于標(biāo)識流當(dāng)前所處的階段,可以是訓(xùn)練階段或預(yù)取階段。其他邏輯主要包括流命中判斷邏輯、模式匹配判斷邏輯和預(yù)取地址生成邏輯這三部分。流命中判斷邏輯使用L2Cache訪問地址的Tag對Mream Table進(jìn)行相聯(lián)查找,若存在Tag域與其相匹配的表項則表明發(fā)生流命中。當(dāng)發(fā)生流命中時,模式匹配判斷邏輯根據(jù)命中表項Direction域,使用Mride域的數(shù)值與L2Cache訪問地址的hdex和Last Index 的差值進(jìn)行比較,若相等則表明模式匹配成功,否則表明模式匹配不成功。在發(fā)生流命中且模式匹配成功時,預(yù)取地址生成邏輯根據(jù)L2Cache訪問地址的Tag和hdex、預(yù)取距離(本發(fā)明實施例設(shè)置為幻以及命中表項Direction域和Mride域的數(shù)值,計算得到預(yù)取地址。圖6展示了更新過濾器的工作流程示意圖,其詳細(xì)的工作流程如下當(dāng)一個L2Cache失效發(fā)生時,處理器將該失效地址與MSHR中的地址進(jìn)行全相聯(lián)比較。若存在地址相同的MSHR,則表明該失效為kcondary L2Miss,否則該失效為I^rimary L2Miss。當(dāng)I^rimary L2Miss發(fā)生時,處理器為其分配一個空閑的MSHR,并且初始化相應(yīng)的過濾位如果該I^rimary L2Miss是由跨距預(yù)取器的預(yù)取請求引發(fā)的,則其過濾位被初始化為0;否則,其過濾位被初始化為1。之后,ikcondary L2Miss發(fā)生時,更新過濾器將該失效行對應(yīng)的MSHR中的過濾位讀出并進(jìn)行檢查若過濾位為1,則表明該義⑶?。∫瞊 L2Miss是由預(yù)執(zhí)行引發(fā)的,所以將其對跨距預(yù)取器的更新過濾掉;如果過濾位為0,則表明該kcondary L2Miss是由跨距預(yù)取器引發(fā)的,允許其更新跨距預(yù)取器以及早發(fā)出預(yù)取請求,同時,將相應(yīng)MSHR的過濾位設(shè)置為1,以避免后續(xù)該行的kcondary L2Miss再次更新跨距預(yù)取器。圖7展示了采用預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取機(jī)制的處理器結(jié)構(gòu)示意圖,新增加的結(jié)構(gòu)詳細(xì)描述如下Checkpoint用于在處理器進(jìn)入預(yù)執(zhí)行模式時備份體系結(jié)構(gòu)寄存器堆;INV用于在預(yù)執(zhí)行模式標(biāo)識無效的寄存器;Store Cache用于在預(yù)執(zhí)行模式保存More指令的存儲數(shù)據(jù),并將其前遞給后續(xù)的Load指令訪問和使用;指令與結(jié)果緩沖器(IRB)用于保存預(yù)執(zhí)行指令的計算結(jié)果及其有效狀態(tài);跨距預(yù)取器(Stride Prefetcher)用于對L2Cache訪問中規(guī)則的訪存模式進(jìn)行預(yù)??;更新過濾器(Update Filter)用于對L2Cache失效信息進(jìn)行篩選,過濾掉有害信息,只使用有用信息更新跨距預(yù)取器。實施例二、一種預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取系統(tǒng)本實施例的數(shù)據(jù)預(yù)取系統(tǒng),主要包括跨距預(yù)取器,用于監(jiān)測二級緩存失效訪存序列,并在捕獲到跨距訪存模式時自動觸發(fā)預(yù)取請求;處理器,用于監(jiān)測到二級緩存訪問發(fā)生失效時,對當(dāng)前的寄存器狀態(tài)進(jìn)行備份,轉(zhuǎn)換到預(yù)執(zhí)行模式;在預(yù)執(zhí)行模式下,用于繼續(xù)執(zhí)行發(fā)生二級緩存失效的指令的后續(xù)指令, 對非規(guī)則的訪存模式進(jìn)行精確的預(yù)取,獲得預(yù)執(zhí)行結(jié)果及其有效狀態(tài)保存到指令與結(jié)果緩沖器中,并從捕獲的真實訪存信息中提取出有用信息指導(dǎo)跨距預(yù)取器及早地發(fā)出該預(yù)取請求;還用于當(dāng)引發(fā)預(yù)執(zhí)行的二級緩存失效指令完成主存訪問后,清空流水線,恢復(fù)備份的寄存器狀態(tài),從引發(fā)預(yù)執(zhí)行的訪存指令開始繼續(xù)執(zhí)行。其中,該跨距預(yù)取器在監(jiān)測該二級緩存失效訪存序列及捕獲該跨距訪存模式時,
12用于向前或向后進(jìn)行預(yù)取,并使用存儲區(qū)域劃分方法來劃分流。其中,該跨距預(yù)取器用于監(jiān)測到同一個流中連續(xù)兩次二級緩存失效符合該跨距訪存模式時,初次發(fā)起該預(yù)取請求。其中,該跨距預(yù)取器用于將預(yù)取數(shù)據(jù)存放在該二級緩存中。其中,該系統(tǒng)還可以包括更新過濾器,用于當(dāng)次要L2失效發(fā)生時,讀出該次要L2失效行對應(yīng)的失效狀態(tài)處理寄存器中的過濾位并判斷引發(fā)該次要L2失效的原因;對于由預(yù)執(zhí)行引發(fā)的該次要L2失效,用于過濾掉對跨距預(yù)取器的更新;對于由跨距預(yù)取器引發(fā)的該次要L2失效,用于更新跨距預(yù)取器及該過濾位;其中,該處理器用于主要L2失效發(fā)生時,為該主要L2失效分配一空閑的失效狀態(tài)處理寄存器并初始化該失效狀態(tài)處理寄存器的過濾位;需訪問的行已經(jīng)由跨距預(yù)取器或預(yù)執(zhí)行指令發(fā)起主存訪問且尚未完成的二級緩存失效稱為該次要L2失效,其余二級緩存失效為該主要L2失效。其中,該處理器用于繼續(xù)執(zhí)行發(fā)生二級緩存失效的指令的后續(xù)指令時,不更新體系結(jié)構(gòu)狀態(tài)。其中,該處理器從引發(fā)預(yù)執(zhí)行的訪存指令開始繼續(xù)執(zhí)行時,用于從引發(fā)預(yù)執(zhí)行的訪存指令開始,將保存在該指令與結(jié)果緩沖器中的預(yù)執(zhí)行結(jié)果合并到體系結(jié)構(gòu)狀態(tài),以及將計算結(jié)果無效的預(yù)執(zhí)行指令重新發(fā)射到流水線中執(zhí)行并提交相應(yīng)的執(zhí)行結(jié)果。本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明所提供的系統(tǒng)類的實施例中各組成部分,以及方法類的實施例中各步驟,可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。雖然本發(fā)明所揭露的實施方式如上,但所述的內(nèi)容只是為了便于理解本發(fā)明而采用的實施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬技術(shù)領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實施的形式上及細(xì)節(jié)上作任何的修改與變化, 但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書所界定的范圍為準(zhǔn)。
權(quán)利要求
1.一種預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取方法,該方法包括跨距預(yù)取器監(jiān)測二級緩存失效訪存序列,并在捕獲到跨距訪存模式時自動觸發(fā)預(yù)取請求;在監(jiān)測到二級緩存訪問發(fā)生失效時,處理器對當(dāng)前的寄存器狀態(tài)進(jìn)行備份,轉(zhuǎn)換到預(yù)執(zhí)行模式;在預(yù)執(zhí)行模式下,該處理器繼續(xù)執(zhí)行發(fā)生二級緩存失效的指令的后續(xù)指令,對非規(guī)則的訪存模式進(jìn)行精確的預(yù)取,獲得預(yù)執(zhí)行結(jié)果及其有效狀態(tài)保存到指令與結(jié)果緩沖器中, 并從捕獲的真實訪存信息中提取出有用信息指導(dǎo)跨距預(yù)取器及早地發(fā)出該預(yù)取請求;當(dāng)引發(fā)預(yù)執(zhí)行的二級緩存失效指令完成主存訪問后,該處理器清空流水線,恢復(fù)備份的寄存器狀態(tài),從引發(fā)預(yù)執(zhí)行的訪存指令開始繼續(xù)執(zhí)行。
2.根據(jù)權(quán)利要求1所述的方法,其中,該跨距預(yù)取器監(jiān)測該二級緩存失效訪存序列及捕獲該跨距訪存模式的步驟,包括該跨距預(yù)取器向前或向后進(jìn)行預(yù)取,并使用存儲區(qū)域劃分方法來劃分流。
3.根據(jù)權(quán)利要求2所述的方法,其中該跨距預(yù)取器監(jiān)測到同一個流中連續(xù)兩次二級緩存失效符合該跨距訪存模式時,初次發(fā)起該預(yù)取請求。
4.根據(jù)權(quán)利要求1所述的方法,其中該跨距預(yù)取器將預(yù)取數(shù)據(jù)存放在該二級緩存中。
5.根據(jù)權(quán)利要求1所述的方法,其中當(dāng)主要L2失效發(fā)生時,該處理器為該主要L2失效分配一空閑的失效狀態(tài)處理寄存器, 并初始化該失效狀態(tài)處理寄存器的過濾位;當(dāng)次要L2失效發(fā)生時,一更新過濾器讀出該失效行對應(yīng)的失效狀態(tài)處理寄存器中的過濾位并判斷引發(fā)該次要L2失效的原因;對于由預(yù)執(zhí)行引發(fā)的該次要L2失效,過濾掉對跨距預(yù)取器的更新;對于由跨距預(yù)取器引發(fā)的該次要L2失效,更新跨距預(yù)取器及該過濾位;其中,需訪問的行已經(jīng)由跨距預(yù)取器或預(yù)執(zhí)行指令發(fā)起主存訪問且尚未完成的二級緩存失效稱為該次要L2失效,其余二級緩存失效為該主要L2失效。
6.根據(jù)權(quán)利要求1所述的方法,其中該處理器繼續(xù)執(zhí)行發(fā)生二級緩存失效的指令的后續(xù)指令時,不更新體系結(jié)構(gòu)狀態(tài)。
7.根據(jù)權(quán)利要求1所述的方法,其中,該處理器從引發(fā)預(yù)執(zhí)行的訪存指令開始繼續(xù)執(zhí)行的步驟,包括該處理器從引發(fā)預(yù)執(zhí)行的訪存指令開始,將保存在該指令與結(jié)果緩沖器中的預(yù)執(zhí)行結(jié)果合并到體系結(jié)構(gòu)狀態(tài),將計算結(jié)果無效的預(yù)執(zhí)行指令重新發(fā)射到流水線中執(zhí)行并提交執(zhí)行結(jié)果。
8.一種預(yù)執(zhí)行指導(dǎo)的數(shù)據(jù)預(yù)取系統(tǒng),包括跨距預(yù)取器,用于監(jiān)測二級緩存失效訪存序列,并在捕獲到跨距訪存模式時自動觸發(fā)預(yù)取請求;處理器,用于監(jiān)測到二級緩存訪問發(fā)生失效時,對當(dāng)前的寄存器狀態(tài)進(jìn)行備份,轉(zhuǎn)換到預(yù)執(zhí)行模式;在預(yù)執(zhí)行模式下,用于繼續(xù)執(zhí)行發(fā)生二級緩存失效的指令的后續(xù)指令,對非規(guī)則的訪存模式進(jìn)行精確的預(yù)取,獲得預(yù)執(zhí)行結(jié)果及其有效狀態(tài)保存到指令與結(jié)果緩沖器中,并從捕獲的真實訪存信息中提取出有用信息指導(dǎo)跨距預(yù)取器及早地發(fā)出該預(yù)取請求; 還用于當(dāng)引發(fā)預(yù)執(zhí)行的二級緩存失效指令完成主存訪問后,清空流水線,恢復(fù)備份的寄存器狀態(tài),從引發(fā)預(yù)執(zhí)行的訪存指令開始繼續(xù)執(zhí)行。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其中該跨距預(yù)取器在監(jiān)測該二級緩存失效訪存序列及捕獲該跨距訪存模式時,用于向前或向后進(jìn)行預(yù)取,并使用存儲區(qū)域劃分方法來劃分流。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其中該跨距預(yù)取器用于監(jiān)測到同一個流中連續(xù)兩次二級緩存失效符合該跨距訪存模式時, 初次發(fā)起該預(yù)取請求。
11.根據(jù)權(quán)利要求8所述的系統(tǒng),其中該跨距預(yù)取器用于將預(yù)取數(shù)據(jù)存放在該二級緩存中。
12.根據(jù)權(quán)利要求8所述的系統(tǒng),包括更新過濾器,用于當(dāng)次要L2失效發(fā)生時,讀出該次要L2失效行對應(yīng)的失效狀態(tài)處理寄存器中的過濾位并判斷引發(fā)該次要L2失效的原因;對于由預(yù)執(zhí)行引發(fā)的該次要L2失效,用于過濾掉對跨距預(yù)取器的更新;對于由跨距預(yù)取器引發(fā)的該次要L2失效,用于更新跨距預(yù)取器及該過濾位;其中,該處理器用于主要L2失效發(fā)生時,為該主要L2失效分配一空閑的失效狀態(tài)處理寄存器并初始化該失效狀態(tài)處理寄存器的過濾位;需訪問的行已經(jīng)由跨距預(yù)取器或預(yù)執(zhí)行指令發(fā)起主存訪問且尚未完成的二級緩存失效稱為該次要L2失效,其余二級緩存失效為該主要L2失效。
13.根據(jù)權(quán)利要求8所述的系統(tǒng),其中該處理器用于繼續(xù)執(zhí)行發(fā)生二級緩存失效的指令的后續(xù)指令時,不更新體系結(jié)構(gòu)狀態(tài)。
14.根據(jù)權(quán)利要求8所述的系統(tǒng),其中該處理器從引發(fā)預(yù)執(zhí)行的訪存指令開始繼續(xù)執(zhí)行時,用于從引發(fā)預(yù)執(zhí)行的訪存指令開始,將保存在該指令與結(jié)果緩沖器中的預(yù)執(zhí)行結(jié)果合并到體系結(jié)構(gòu)狀態(tài),以及將計算結(jié)果無效的預(yù)執(zhí)行指令重新發(fā)射到流水線中執(zhí)行并提交執(zhí)行結(jié)果。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)預(yù)取方法及系統(tǒng),克服現(xiàn)有技術(shù)未很好地將預(yù)執(zhí)行和跨距預(yù)取融合的不足。該方法包括跨距預(yù)取器監(jiān)測二級緩存失效訪存序列,在捕獲到跨距訪存模式時觸發(fā)預(yù)取請求;監(jiān)測到二級緩存訪問發(fā)生失效時,處理器對當(dāng)前寄存器狀態(tài)進(jìn)行備份,轉(zhuǎn)換到預(yù)執(zhí)行模式,執(zhí)行發(fā)生二級緩存失效的指令的后續(xù)指令,對非規(guī)則的訪存模式進(jìn)行精確預(yù)取,獲得預(yù)執(zhí)行結(jié)果及其有效狀態(tài)保存到緩沖器中,并從捕獲的真實訪存信息中提取出有用信息指導(dǎo)跨距預(yù)取器及早發(fā)出預(yù)取請求;引發(fā)預(yù)執(zhí)行的二級緩存失效指令完成主存訪問后,處理器清空流水線,恢復(fù)備份的寄存器狀態(tài),從引發(fā)預(yù)執(zhí)行的訪存指令開始繼續(xù)執(zhí)行。本發(fā)明有效提升處理器的訪存延時包容能力。
文檔編號G06F9/38GK102156633SQ201110096900
公開日2011年8月17日 申請日期2011年4月18日 優(yōu)先權(quán)日2011年4月18日
發(fā)明者佟冬, 黨向磊, 王克義, 王簫音, 程旭, 陸俊林 申請人:北京北大眾志微系統(tǒng)科技有限責(zé)任公司