專利名稱:預(yù)取由轉(zhuǎn)移歷史引導(dǎo)的指令/數(shù)據(jù)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明描述了有條件地從存儲器中預(yù)取指令和數(shù)據(jù)的一種方式。特別是公開了一種方法和設(shè)備,通過用轉(zhuǎn)移預(yù)測信息,有選擇地發(fā)布預(yù)取來改進高速緩存性能。
當(dāng)前計算機系統(tǒng)技術(shù)的狀況是處理器速度的提高比主存儲器速度提高要快得多。這種處理器速度和主存儲器速度的不匹配,現(xiàn)在正被處理器和主存儲器之間越來越大的隨機存取“緩沖區(qū)”或“高速緩存”所遮掩。
數(shù)據(jù)在計算機系統(tǒng)的存儲層中被典型地傳遞。在這體系中最上面是處理器,最下面是I/O存儲設(shè)備。處理器與一個或者多個高速緩存(隨機存取緩沖區(qū))相連接。一類高速緩存是指令高速緩存,用來以最小延遲為處理器提供指令。另一類高速緩存是高速緩沖區(qū),用來保留即將可能用到的數(shù)據(jù)。
兩類高速緩存可以被連接到其它高速緩存或者存儲器層中的主存儲器。當(dāng)一個程序被執(zhí)行時,處理器取出并執(zhí)行來自主存儲器(或者一個指令高速緩存)中的程序指令。這樣使得處理器請求一個高速緩存入口或者修改或者重寫高速緩存入口及主存儲器部分。
圖1顯示了根據(jù)現(xiàn)有技術(shù)的數(shù)據(jù)處理系統(tǒng)100。這個數(shù)據(jù)處理系統(tǒng)100有一個高速緩存,它可只由單個高速緩存單元或者多個高速緩存單元組成。這個高速緩存可以被分為數(shù)據(jù)高速緩存145和指令高速緩存110,這樣指令和數(shù)據(jù)可以以最小的延遲同時提供給數(shù)據(jù)處理系統(tǒng)100。數(shù)據(jù)處理系統(tǒng)100還包含存儲數(shù)據(jù)和指令的主存儲器150、允許指令高速緩存110和數(shù)據(jù)高速緩存145與主存儲器150通信的存儲器系統(tǒng)接口105、檢索執(zhí)行程序指令的取指單元115。數(shù)據(jù)處理器系統(tǒng)中還包含一個解碼和調(diào)度單元120,它用來解譯由取指單元115所檢索的指令,并把解譯信息同一個或者多個執(zhí)行單元相連,及包含轉(zhuǎn)移單元125,功能單元130和存儲器單元140的很多執(zhí)行單元,用來解譯信息并執(zhí)行指令。轉(zhuǎn)移單元125負責(zé)執(zhí)行程序轉(zhuǎn)移,根據(jù)程序執(zhí)行修改程序計數(shù)器計算。通用功能單元130表示一個或者多個執(zhí)行單元,這些單元能根據(jù)要求對不同類型的數(shù)據(jù)實施如加法、減法、乘法、除法、移位和浮點運算操作。典型地,一個處理器將有多個執(zhí)行單元來改進性能。在這個說明中,所有的轉(zhuǎn)移都被送到轉(zhuǎn)移單元125。所有其它指令都送到通用功能單元130。所選擇的這個配置具有簡明性,并顯示出清楚的設(shè)計。很明顯,許多其他執(zhí)行單元的配置被使用了通用的或者特殊目的的計算器件。與每一個執(zhí)行單元相關(guān)的是一個執(zhí)行隊列(沒有表示出)。這個執(zhí)行隊列保存等待執(zhí)行的解碼指令。存儲器單元140負責(zé)計算被解碼指令指定的存儲器地址。寄存器堆135也被包含在數(shù)據(jù)處理系統(tǒng)100中,用來暫時保存數(shù)據(jù)。當(dāng)然,除寄存器堆135外,其它存儲結(jié)構(gòu)也可以被用來代替,如那些被用做處理推測執(zhí)行和明確中斷執(zhí)行的存儲結(jié)構(gòu)。樣例寄存器堆135被描述為可被使用的存儲結(jié)構(gòu)的例。
當(dāng)一個程序被執(zhí)行時,程序計數(shù)器或者序列預(yù)算機制把指令地址和取指令115連接。取指令115依次把指令地址和指令高速緩存110相連,如果和指令地址相對應(yīng)的指令已經(jīng)存在于指令高速緩存110中,指令高速緩存返回這個指令到取指令115。否則,指令高速緩存110送這個指令地址到存儲器系統(tǒng)接口105。存儲器系統(tǒng)接口105在主存儲器150中定位這個指令地址,并檢索該地址中存儲的指令。然后,該指令被送到指令高速緩存110,最后從此返回取指令115。當(dāng)該指令到達取指令115時,如果在解碼和調(diào)度單元120中具有可以用來存放這種指令的緩沖區(qū)空間,則該指令被送到解碼和調(diào)度單元120。然后該解碼和調(diào)度單元120從被送來的指令中譯碼信息,并確定每一個指令和相關(guān)的譯碼信息是否被放在一個執(zhí)行單元的執(zhí)行隊列中。相稱的執(zhí)行單元接受該指令和來自譯碼和調(diào)度單元120的任何被譯碼的信息,然后應(yīng)用譯碼信息存取寄存器堆135中數(shù)據(jù)值來執(zhí)行指令。當(dāng)指令被執(zhí)行后,結(jié)果被寫入寄存器堆135。
除了計算存儲器地址的通用功能外,存儲器單元140負責(zé)執(zhí)行兩種特殊類型的指令加載和存儲。
加載指令是請求在寄存器堆135中被檢索和存儲特別的數(shù)據(jù)。存儲器單元140通過向數(shù)據(jù)高速緩存發(fā)送一個請求而執(zhí)行一個加載指令。如果這個數(shù)據(jù)在數(shù)據(jù)高速緩存145并且有效,則數(shù)據(jù)高速緩存把該數(shù)據(jù)返回給存儲單元。如果這個數(shù)據(jù)沒有在數(shù)據(jù)高速緩存145中或者無效,則根據(jù)加載指令指示,經(jīng)主存儲器接口105,數(shù)據(jù)高速緩存145存取主存儲器150中特別數(shù)據(jù)的存儲地址。該數(shù)據(jù)從主存儲器150被返回到數(shù)據(jù)高速緩存145,從此被最后返回到存儲器單元140。存儲器單元140存儲該數(shù)據(jù)到寄存器堆135中,并可能傳遞該數(shù)據(jù)到其他功能單元130或者轉(zhuǎn)移單元125。存儲指令是把數(shù)據(jù)寫入主存儲器150中一個特殊存儲地址的請求。為了存儲,一個請求被存儲單元140發(fā)送到數(shù)據(jù)高速緩存145,指定一個數(shù)據(jù)存儲地址和特殊的數(shù)據(jù)來寫入到那個數(shù)據(jù)存儲地址。如果和指定的數(shù)據(jù)存儲地址相對應(yīng)的數(shù)據(jù)在數(shù)據(jù)高速緩存中被定位,并且有合適的存取許可,則該數(shù)據(jù)被用由存儲器單元140指定的特殊數(shù)據(jù)復(fù)寫。然后數(shù)據(jù)高速緩存145通過存儲系統(tǒng)接口105存取主存儲器中的特殊的存儲地址,并把該數(shù)據(jù)寫入該地址。
高速緩存的核心是一個數(shù)據(jù)高速緩存145,一個指令高速緩存110,或者是一個組合的高速緩存,該高速緩存在執(zhí)行一個程序時被重復(fù)查詢存在或者不存在數(shù)據(jù)。特別是數(shù)據(jù)高速緩存145被存儲單元140查詢,并不考慮是否存儲單元140執(zhí)行一個加載或者存儲指令。與此相似的,指令高速緩存110被取指令115重復(fù)查詢來獲取一個特殊的指令。
一個高速緩存有許多“塊”,分別存儲各種指令和數(shù)據(jù)值。在高速緩存中的塊被分成一個或者多個叫做“同余類(congruence classes)”的塊組。根據(jù)預(yù)先設(shè)置的變換函數(shù),對于任一給定的存儲塊有唯一的同余類,在高速緩存中,每一個塊可以被影射。在一個同余類中塊的數(shù)量被叫做該高速緩存的結(jié)合性,例如,2-路設(shè)置連接意思是對于任何給定的存儲塊,高速緩存中有兩個塊,存儲塊可以被影射入;然而,在下一級存儲器中,幾個不同的塊可以被影射到任何給定同余類。
圖例的高速緩存線(塊)包含一個地址標記域、一個狀態(tài)位域、一個包含性位域、和一個存儲實際指令或者數(shù)據(jù)的值域。狀態(tài)位域和包含位域被用來保持高速緩存在一個多處理器數(shù)據(jù)處理系統(tǒng)中的結(jié)合性。地址標記是相應(yīng)存儲塊的全地址的一個子集。用地址標記域中的一個標記比較輸入地址的匹配,指示一個高速緩存的“命中”。在另一方面,如果請求的標記不存在于高速緩存,或者該標記存在于高速緩存中,但有一個錯誤的“存取許可”,則一個高速緩存“未命中”發(fā)生。如果當(dāng)請求時數(shù)據(jù)正在被數(shù)據(jù)處理系統(tǒng)中的另一個數(shù)據(jù)處理器讀或者寫,則數(shù)據(jù)可能有錯誤的存取許可。在高速緩存中所有地址標記的集合和狀態(tài)位和包含域被稱作為目錄,且所有值域的集合是高速緩存入口陣列。
如果一個高速緩存發(fā)生未命中,所請求的數(shù)據(jù)從主存儲器被檢索并插入到高速緩存中,該數(shù)據(jù)可替代其他被存放在高速緩存中的數(shù)據(jù)。有關(guān)從主存儲器中取數(shù)據(jù)的延遲通常遠大于數(shù)據(jù)已存在于高速緩存中情況,因為主存儲器沒有高速緩存的高速度存取的能力。與存儲器數(shù)據(jù)存取相關(guān)的延遲通常被叫做“存取等待時間”或者“等待時間”。在所有的情況下,高速緩存的大小是限定的。當(dāng)高速緩存已滿,因確定那一個數(shù)據(jù)應(yīng)該用高速緩存。當(dāng)一個同余類中所有的塊都已滿,并且高速緩存接收到請求影射到同余類的存儲位置時,該高速緩存必須“驅(qū)逐”當(dāng)前同余類中的一個塊。高速緩存通過一個算法選擇一個要被驅(qū)逐的塊(例如,近來最少使用的(LRU),隨機,假-LRU等)。如果被選擇的塊中的數(shù)據(jù)被修改,這些數(shù)據(jù)被寫到可以是其他高速緩存(如最初情況或者板上高速緩存)存儲器層的下一級。根據(jù)包含原理,層中下面的層面將已有一個塊可以存儲被寫入的修改數(shù)據(jù)。但是,如果所選擇塊中的數(shù)據(jù)沒有被修改,該塊只是簡單的被重寫。這個從層中的一個層面去掉一個塊的過程被叫做“驅(qū)逐”。在這個過程結(jié)束時,高速緩存不再保留一個被驅(qū)逐塊的付本。
由于到一個存儲器或者高速緩存層中下一個層面的等待時間通常比存取高速緩存的時間要顯著的長,許多技術(shù)被提出以隱藏或者減少這個等待時間。預(yù)取指就是這樣一個技術(shù)。預(yù)取指機制試圖預(yù)測存儲器中那一些部分將被程序使用,并在處理器正常請求它們之前,將其取到高速緩存中。如果該預(yù)取機制成功,那么存儲器的一行足夠前和及時地被送入高速緩存,從而避免了由高速緩存未命中而造成的任何處理失速。
預(yù)取技術(shù)分屬于兩類即基于硬件和基于軟件?;谲浖A(yù)取技術(shù)包含在程序中插入一個預(yù)指令。例如,在1991年4月的編程語言和操作系統(tǒng)體系結(jié)構(gòu)支持第四次國際會議會刊中,Callahan等的文章“Software Prefetch”,(pp40-52),描述了在指令集中加一條新指令來實現(xiàn)預(yù)取。同樣,IBM/6000和PowerPC處理器有一個指令,Data-Cache-Block-Touch(dcbt)指令(通常稱為touch指令)預(yù)取存儲器中的一行到高速緩存中。編譯器(或者程序員)可以在真正用到該數(shù)據(jù)前插入這些預(yù)取指令到程序中,確保當(dāng)程序中后面的指令被執(zhí)行時存儲器的行將在高速緩存中。touch指令可以被用來預(yù)取指令和數(shù)據(jù)。例如,touch指令可以被插入到程序中,在即將到來的轉(zhuǎn)移之前,預(yù)取位于轉(zhuǎn)移目標上的指令。同樣,一個touch指令可以被放置在加載指令之前,來預(yù)取數(shù)據(jù)到高速緩存中。
基于硬件預(yù)取技術(shù)基于以前的模式,來預(yù)測將來存儲器的存取模式。這些技術(shù)不須改變現(xiàn)存的程序,所以無須對程序員或者編譯器的干涉。如在1992年10月的編程語言和操作系統(tǒng)體系結(jié)構(gòu)支持第五次國際會議會刊中,Chen和Bear的文章“Reducing Memory Latency viaNon-blocking and Preferching Catches”(pp51-61)中提出了一個詳細的方法稱為“Lookahead Data Prefetching””。該技術(shù)要求對傳統(tǒng)的數(shù)據(jù)高速緩存有一個支持單元。該支持單元是基于預(yù)測指令流的執(zhí)行和參考加載/存儲指令中相關(guān)的操作數(shù)。后者及他們的參考模式,被保存在一個參考預(yù)測表(RPT)中,該表被組織成一個有規(guī)則的高速緩存。RPT中的入口由指令地址、上次存取產(chǎn)生的操作碼地址、用來編碼有限狀態(tài)機的兩個狀態(tài)位組成,狀態(tài)機用來記錄存取模式和確定隨后的預(yù)取是否被擊活或者禁止。該RPT由先前的程序計數(shù)器(LA-PC),先于常規(guī)程序計數(shù)器被存取。該LA-PC用動態(tài)預(yù)測器幫助,以PC相同方式增加和保持。該LA-PC/RPT組合被用來檢查RPT中常規(guī)數(shù)據(jù)存取和產(chǎn)生預(yù)取請求。該預(yù)取數(shù)據(jù)塊將被放入數(shù)據(jù)高速緩存中。支持單元并沒有在關(guān)鍵的路徑上。這種方式除增加總線通信量外并沒有增加循環(huán)時間和數(shù)據(jù)存取等待時間。這項技術(shù)成功工作的關(guān)鍵是程序計數(shù)器和LA-PC之間的距離,以至被預(yù)取的數(shù)據(jù)正好在需要它之前到達。不正確的轉(zhuǎn)移預(yù)測限制了距離以防其增長太大。
為增加預(yù)取數(shù)據(jù)和用到該數(shù)據(jù)時之間的時間,在High PerformanceComputing,Lecture Notes in Computer Science V.1336,1997中(pp51-70),Veidenbaum在他的文章“Instruction Cache PrefetchingUsing Multilevel Branch Prediction”提出一種方法。在這個方法中,轉(zhuǎn)移指令的目標是用多層轉(zhuǎn)移預(yù)測器(具備在同一時間預(yù)測多于一個轉(zhuǎn)移的能力)來預(yù)取。該預(yù)測器由轉(zhuǎn)移歷史寄存器(BHR)、預(yù)測表(PT)、和一個相關(guān)的控制邏輯組成。BHR包含一個程序計數(shù)器、目標地址和當(dāng)前發(fā)生/未發(fā)生前面K個轉(zhuǎn)移加當(dāng)前轉(zhuǎn)移的歷史。該發(fā)生/未發(fā)生歷史以一位被存儲,并在每次轉(zhuǎn)移時左移使當(dāng)前轉(zhuǎn)移信息移入。一個PT入口保留有2K的目標地址和2位飽和計數(shù)器來使預(yù)取可能或者不可能。當(dāng)當(dāng)前指令是一個轉(zhuǎn)移時,程序計數(shù)器被用來選擇一個PT入口。計數(shù)器用2K計數(shù)中的最大值標識,和計數(shù)器相關(guān)的目標地址被作為預(yù)測返回。無論何時當(dāng)預(yù)取行在高速緩存中被用時計數(shù)器被增加,如果在高速緩存中沒有被使用計數(shù)器被減小。PT入口在每當(dāng)K轉(zhuǎn)移被裝入BHR時被更新。本技術(shù)依靠轉(zhuǎn)移預(yù)測器的準確性和只預(yù)取目標地址。它僅被應(yīng)用于指令高速緩存。
Liu和Kaeli在他們的文章中,“Branch-Directed and Stride-Baswd Data Catche Prefetching”在International Conference onComputer Design會刊(pp225-229),1996,提出了一種與數(shù)據(jù)預(yù)取相似的技術(shù)。在這項工作中,目標路徑中下一個未命中數(shù)據(jù)地址伴隨目標地址存儲在轉(zhuǎn)移目標緩沖區(qū)中。每當(dāng)被預(yù)測“發(fā)生”轉(zhuǎn)移指令,數(shù)據(jù)地址被預(yù)取。該方法也用到跨距預(yù)取,其中每一數(shù)據(jù)地址有一個2位的計數(shù)器來檢測跨距存取模式。在這項技術(shù)中預(yù)測未來距離僅是一個轉(zhuǎn)移,所以能補償?shù)牡却龝r間比本專利提出的技術(shù)為小。
有許多涉及預(yù)取機制的專利,每一個都有一定的長處和不足。
例如,有幾項專利敘述的預(yù)取數(shù)據(jù)在程序循環(huán)中。
授權(quán)于Santhanam的美國專利5,704,053敘述了一種機制,其中的預(yù)取指令被加到程序循環(huán)中。該技術(shù)通過以前應(yīng)用操作中執(zhí)行軌跡,來決定在循環(huán)中的何處插入預(yù)取指令。
授權(quán)于Hsu的美國專利5,843,934確定在循環(huán)中程序的存儲器存取模式。預(yù)取在循環(huán)體中均勻被調(diào)度。該技術(shù)避免了預(yù)取簇,特別是當(dāng)一個預(yù)取因替代一個以前更新的高速緩存行要抹掉或者回寫時。根據(jù)循環(huán)重復(fù)的次數(shù)和在每個循環(huán)重復(fù)上執(zhí)行的預(yù)取的次數(shù),預(yù)取被調(diào)度。
授權(quán)于Widigen的美國專利5,919,256敘述了一種機制,這里的數(shù)據(jù)是從一個操作碼高速緩存而不是從參考存儲器中被預(yù)取的。從操作碼高速緩存中取得的數(shù)據(jù)值然后被用于預(yù)測執(zhí)行指令。如果從操作碼高速緩存中獲得的數(shù)據(jù)值等于實際的操作碼值,則該預(yù)測執(zhí)行被允許完成。如果這兩個值不相等,那么所有的預(yù)測執(zhí)行被放棄。
授權(quán)于Mirza的美國專利5,357,618中,根據(jù)跨距1或者N或者跨距值的一個組合行確定預(yù)取長度??缇嗉拇嫫鞅挥脕碛嬎愠绦虻膮⒖寄J剑厥獾闹噶畋挥脕碓谕ㄓ媚康募拇嫫骱涂缇嗉拇嫫髦g傳送值。編譯器應(yīng)用這些新指令來控制在循環(huán)內(nèi)的預(yù)取。
更通常的預(yù)取技術(shù)包括美國專利5,896,517(Wilson),應(yīng)用后臺存儲移動(Background Memory Move BMM)機制來改善一個程序的性能。BMM機制在存儲器層的不同層面之間執(zhí)行后臺存儲移動操作,與平常處理器并行操作。
美國專利5,838,945(Emberson),描述一個預(yù)取機制,這里可變尺寸的行被預(yù)取入高速緩存。一個特殊的指令被用來指示被預(yù)取的高速緩存行的長度。高速緩存設(shè)置預(yù)加載預(yù)取數(shù)據(jù)的位置和預(yù)取的類型(指令或者數(shù)據(jù))。
美國專利5,918,246(Goodnow),描述一種預(yù)取方法,該方法應(yīng)用編譯器產(chǎn)生一個程序影射表。該程序影射表將被用來預(yù)取合適的指令和數(shù)據(jù)信息到高速緩存中。該程序影射表包含轉(zhuǎn)移地址位置和轉(zhuǎn)移目標,及被該程序所用數(shù)據(jù)的位置。
美國專利5,778,435(Berenbaum),描述一種基于歷史的預(yù)取機制,這里的高速緩存未命中地址被保存在緩沖區(qū)中。該緩沖區(qū)被前面的發(fā)出N次循環(huán)的一個指令地址變址。該緩沖區(qū)的值然后被用作預(yù)取地址來企圖避免高速緩存未命中。
美國專利5,732,242(Mowry),描述一種機制,這里的預(yù)取指令包含“提示(hint)”位。該提示位指示那一個預(yù)取操作被執(zhí)行,也就是該預(yù)取是專用的或者是只讀,及設(shè)置行的那一個高速緩存被加載入(最少是近期被用到的或者上次被用到的)。
美國專利5,305,389(Palmer),描述一種預(yù)取機制,該機制存儲了模式存儲器中的一個程序的存取模式。通過比較當(dāng)前一組對象(存取)和保存在模式存儲器中的對象,預(yù)取候選者被獲得。模式匹配不須證明存儲在模式存儲器中的對象完全匹配來產(chǎn)生一個預(yù)取候選。預(yù)取是企圖保留每一個匹配模式對象。
美國專利5,774,685(Dubey),使用編碼轉(zhuǎn)移路徑的預(yù)取指令,由編譯器在預(yù)取指令和使用該數(shù)據(jù)的指令之間決定,在此處轉(zhuǎn)移路徑表示干預(yù)轉(zhuǎn)移的動作(發(fā)生或未發(fā)生)。每一個預(yù)取行用包含在預(yù)取指令中的預(yù)測轉(zhuǎn)移路徑信息所標記。特殊的硬件來比較一個被預(yù)取的行的標記信息和處理器所執(zhí)行的轉(zhuǎn)移所起的實際動作。當(dāng)被標記的信息不同于實際的轉(zhuǎn)移動作,則預(yù)取行被提前放棄,而當(dāng)具有標記預(yù)取行和實際轉(zhuǎn)移動作相同時,則預(yù)取行被較長的保留在高速緩存中。
與此相似,美國專利5,742,804(Yeh)描述了僅預(yù)取指令的機制。在轉(zhuǎn)移將到來前,轉(zhuǎn)移預(yù)測指令被插入程序中。每一個轉(zhuǎn)移預(yù)測指令充當(dāng)一個預(yù)取指令,并包含預(yù)測即將到來的轉(zhuǎn)移的方向的預(yù)測域(發(fā)生或未發(fā)生)、一個預(yù)取地址、預(yù)取的字節(jié)數(shù)和一個軌跡矢量,它指示即將到來的轉(zhuǎn)移的轉(zhuǎn)移路徑。該軌跡矢量通過比較即將到來的轉(zhuǎn)移動作和軌跡矢量所預(yù)測的動作,用來取消發(fā)布預(yù)取。這里不存在預(yù)取數(shù)據(jù)機制。
此外,Puzak的美國專利(申請?zhí)朰0995-225)描述了有條件執(zhí)行預(yù)取指令的一個方法。該機制應(yīng)用一個歷史表,該表記錄了以前執(zhí)行的預(yù)取信息的預(yù)取指令是否真實地被處理器利用。該表被叫做Touch-History Table。該表中包含的信息被用來只執(zhí)行那些預(yù)取有用數(shù)據(jù)的預(yù)取指令和放棄的(沒被執(zhí)行)預(yù)取的沒有用的數(shù)據(jù)的預(yù)取指令。
本發(fā)明的一個目的是說明以足夠的領(lǐng)先時間,用轉(zhuǎn)移歷史將指令和數(shù)據(jù)預(yù)取到高速緩存的方法,來覆蓋等待時間。在本發(fā)明中,我們始終注意緊接轉(zhuǎn)移指令的控制流路徑,及該路徑上發(fā)生的高速緩存未命中。如果在程序執(zhí)行中重復(fù)相同的轉(zhuǎn)移指令,我們把預(yù)測路徑和與該轉(zhuǎn)移相關(guān)的每個未命中地址最近聯(lián)系的路徑比較。當(dāng)路徑匹配時,我們預(yù)取數(shù)據(jù)(如果沒有存在)。預(yù)取的有用性是由計數(shù)器飽和狀態(tài)確定,并且如果發(fā)現(xiàn)沒使用,該預(yù)取可以被關(guān)掉。
本發(fā)明的另一個目的是增加發(fā)布一個預(yù)取和隨后使用該數(shù)據(jù)之間的時間。為了達到這個目的,和未命中地址相關(guān)的轉(zhuǎn)移指令在查看到預(yù)取“時效性”后可以被動態(tài)被改變。指令和數(shù)據(jù)都可以應(yīng)用這個機制來被預(yù)取。
本發(fā)明的新穎的特征在附加的權(quán)利說明書中被闡明。該發(fā)明本身,及優(yōu)選的使用方式、更進一步的目標、及其優(yōu)點,結(jié)合附圖,參照實施例的詳細說明將非常好理解。其中圖1是根據(jù)現(xiàn)有技術(shù)的一個數(shù)據(jù)處理系統(tǒng)的方塊圖。
圖2是根據(jù)本發(fā)明實施例的一個數(shù)據(jù)處理系統(tǒng)的方塊圖。
圖3是一個程序控制流程圖的舉例。
圖4(A)是根據(jù)本發(fā)明中圖2的轉(zhuǎn)移單元的功能性方塊圖。
圖4(B)描述了存儲在圖4(A)轉(zhuǎn)移預(yù)測邏輯中的一個表入口的內(nèi)容。
圖5是根據(jù)本發(fā)明中圖4轉(zhuǎn)移歷史隊列的一個功能性方塊圖。
圖6是根據(jù)本發(fā)明中圖4預(yù)取指表的一個功能性方塊圖。
圖7是根據(jù)本發(fā)明中圖4中掛起轉(zhuǎn)移預(yù)測邏輯的一個功能性方塊圖。
圖8是根據(jù)本發(fā)明中圖7掛起轉(zhuǎn)移預(yù)測隊列的一個功能性方塊圖。
圖9是根據(jù)本發(fā)明解釋圖7的轉(zhuǎn)移預(yù)測命中邏輯操作的一個流程圖。
圖10是根據(jù)本發(fā)明解釋圖7的轉(zhuǎn)移解碼邏輯操作的一個流程圖。
圖11是根據(jù)本發(fā)明解釋圖7的轉(zhuǎn)移執(zhí)行邏輯操作的一個流程圖表。
圖12是根據(jù)本發(fā)明舉例描述了L1高速緩存目錄入口的內(nèi)容。
圖13是根據(jù)本發(fā)明舉例描述了L2高速緩存目錄入口的內(nèi)容。
圖14是根據(jù)本發(fā)明的實施例解釋的預(yù)取運算法的一個流程圖。
圖15是根據(jù)本發(fā)明圖例的實施例解釋了L1高速緩存未命中動作的流程圖。
圖16是根據(jù)本發(fā)明的實施例解釋的L1高速緩存上命中預(yù)取指線動作的流程圖。
圖17是根據(jù)本發(fā)明的實施例解釋的從L1高速緩存上替代預(yù)取線的動作的流程圖。
現(xiàn)在開始陳述預(yù)取機制操作的一般說明,及更詳細說明如下。圖2是根據(jù)本發(fā)明的優(yōu)先實施例的數(shù)據(jù)處理系統(tǒng)200的一個方塊圖。盡管數(shù)據(jù)處理器200和數(shù)據(jù)處理器100有一些相似之處,但在一些關(guān)鍵方面不同。
根據(jù)本發(fā)明的方法和設(shè)備一個預(yù)取單元255被加入到200中。預(yù)取單元255和轉(zhuǎn)移單元225、數(shù)據(jù)高速緩存245及指令高速緩存210相聯(lián)系。就其功能,預(yù)取單元255負責(zé)保留和執(zhí)行程序的預(yù)取請求。特別是,預(yù)取單元保留一個預(yù)取請求的一個預(yù)取“觸發(fā)”。該觸發(fā)相應(yīng)于一個與轉(zhuǎn)移指令相關(guān)的程序計數(shù)器值。此外,預(yù)取單元保留被預(yù)取的指令/數(shù)據(jù)的存儲器地址。
概括的說,預(yù)取單元255在下述情況被存取(ⅰ)當(dāng)轉(zhuǎn)移單元225執(zhí)行一個程序轉(zhuǎn)移時,(ⅱ)當(dāng)一個加載或者存儲指令(由存儲單元240執(zhí)行)引起一個高速緩存未命中時,(ⅲ)當(dāng)一個加載或者存儲指令(由存儲單元240執(zhí)行)引起一個高速緩存命中一個預(yù)取行時,(ⅳ)預(yù)取行被沒有被用的高速緩存替代時。預(yù)取單元在解釋了本發(fā)明的優(yōu)選事實例的操作方法之后,作更詳細描述。
我們以通過圖3所示的程序的控制流程圖來開始描述我們的專利申請。本例的目的,我們定義一個基本塊作為從一個轉(zhuǎn)移目標到轉(zhuǎn)移指令的程序段。圖3中B1-B7是7個基本的塊。在基本塊B1,B2和B4的末尾的轉(zhuǎn)移指令被分別命名為Br1,Br2和Br4。在基本塊B7中數(shù)據(jù)A(301)未命中。預(yù)取包含數(shù)據(jù)A的存儲器塊的最早時機是在轉(zhuǎn)移Br1的結(jié)果被知道之后。每一個轉(zhuǎn)移的未發(fā)生的路徑如樹叉的左邊所示,而發(fā)生路經(jīng)如樹叉的右邊所示。如果Br1是未發(fā)生(即控制流到基本塊B2),則數(shù)據(jù)A被明確需要。但是如果Br1被發(fā)生(即控制流到基本塊B3),則預(yù)取包含數(shù)據(jù)A的塊是沒有用的。
本發(fā)明的要點是記住這個事實,如果控制流路徑是B1-B2-B4(303)或者B1-B2-B5(304),則預(yù)取包含數(shù)據(jù)A的塊是有用的,即A、轉(zhuǎn)移Br1和它的控制流路徑之間的關(guān)系被保持。當(dāng)一個程序的執(zhí)行流被重復(fù)時,該轉(zhuǎn)移動作也被重復(fù),當(dāng)基本塊B在程序執(zhí)行流中遞歸時,我們能利用該信息。我們的預(yù)取機制用轉(zhuǎn)移預(yù)測器來預(yù)測從B1發(fā)出的可能的控制流路徑,并當(dāng)B1是與上次未命中數(shù)據(jù)A有關(guān)時,預(yù)測和隨后的控制流路徑比較。當(dāng)被預(yù)測的路徑是303或者是304,如果數(shù)據(jù)A包含行還沒有存在于高速緩存,則我們對數(shù)據(jù)A包含行發(fā)布一個預(yù)取請求。因而,轉(zhuǎn)移指令B1為未命中數(shù)據(jù)A作預(yù)取觸發(fā)。
圖4A顯示了支持該預(yù)取機制的轉(zhuǎn)移單元225的主要要素。在技術(shù)上轉(zhuǎn)移可以很準確的預(yù)測是眾所周知。用現(xiàn)代轉(zhuǎn)移預(yù)測運算,對轉(zhuǎn)移預(yù)測機制來說,通常獲得預(yù)測準確率達90%或者更高。轉(zhuǎn)移這個可被觀測的預(yù)測性表示了這個潛在的規(guī)則,允許轉(zhuǎn)移預(yù)測機制記錄和預(yù)測有用的預(yù)取。我們現(xiàn)在詳細描述轉(zhuǎn)移單元225的子單元。
轉(zhuǎn)移預(yù)測邏輯(BPL)(403)轉(zhuǎn)移預(yù)測邏輯(BPL)(403)為以前被執(zhí)行的轉(zhuǎn)移記錄轉(zhuǎn)移動作信息(發(fā)生或未發(fā)生)。同時也通過發(fā)生或未發(fā)生轉(zhuǎn)移序列指導(dǎo)預(yù)取指機制,和從轉(zhuǎn)移執(zhí)行單元(402)和轉(zhuǎn)移歷史隊列(404)中接受更新。典型的轉(zhuǎn)移預(yù)測邏輯和預(yù)取指邏輯,在預(yù)取指之前,通過預(yù)測即將到來的轉(zhuǎn)移和轉(zhuǎn)移預(yù)測結(jié)合工作。如果預(yù)測轉(zhuǎn)移未發(fā)生,則取指令機制將用轉(zhuǎn)移預(yù)測信息去預(yù)取連續(xù)的指令,或若預(yù)測轉(zhuǎn)移發(fā)生則跳到一個新的取指令地址。當(dāng)正常工作時,轉(zhuǎn)移預(yù)測機制可以檢測(預(yù)測)發(fā)生轉(zhuǎn)移足夠的早和及時,以使取指令機制可以在流水線出現(xiàn)任何停止前,取轉(zhuǎn)移目標。該轉(zhuǎn)移預(yù)測機制的功能類似于在美國專利4,678,141中所描述的轉(zhuǎn)移歷史表(BHT),但包含了在BPL中每個入口的額外信息(發(fā)生或未發(fā)生)。該額外信息描述了以前被該處理器所遇到的,后面N個連續(xù)的轉(zhuǎn)移的預(yù)測轉(zhuǎn)移動作。該信息從轉(zhuǎn)移歷史隊列(404)可以得到,并將送到掛起轉(zhuǎn)移預(yù)測邏輯(401)。在掛起轉(zhuǎn)移預(yù)測邏輯中,該信息將被用來和預(yù)取表(405)中所含的轉(zhuǎn)移屏蔽比較。這些機制的操作將在下面被描述。
如上面所提到的,BPL記錄在轉(zhuǎn)移表(BT)中轉(zhuǎn)移信息,它類似于在轉(zhuǎn)移歷史表中所包含的轉(zhuǎn)移信息。圖4B給出了轉(zhuǎn)移預(yù)測邏輯中預(yù)測表(BT)的更詳細的描述。該BT被按排為一個入口陣列,這里的每一入口由目錄部分(450)和數(shù)據(jù)部分(460)組成。每一入口的目錄部分識別轉(zhuǎn)移地址,該轉(zhuǎn)移地址被處理器在前面執(zhí)行,與此相對應(yīng)的數(shù)據(jù)部分識別轉(zhuǎn)移(461)的目標地址(TA)、轉(zhuǎn)移屏蔽和表示該信息有效的有效位。注意,所有由處理器執(zhí)行的轉(zhuǎn)移(發(fā)生或未發(fā)生)都將在這個陣列中有入口。轉(zhuǎn)移屏蔽(462)是N位寬,第一位標識由相應(yīng)的目錄入口標識轉(zhuǎn)移動作(發(fā)生或未發(fā)生),該轉(zhuǎn)移屏蔽剩余的N-1位標識轉(zhuǎn)移之后處理器遇到的N-1位轉(zhuǎn)移動作。轉(zhuǎn)移屏蔽的信息將在下面進一步描述。
除了陣列中的塊入口不是指令塊外,BT目錄/陣列的操作非常象一個高速緩存,但含有陣列發(fā)生或未發(fā)生轉(zhuǎn)移的信息。認為處轉(zhuǎn)移的入口在地址X處。BT目錄/陣列被通過一個取指令地址存取,并且該存取地址和目錄中的所有地址比較。如果有一個匹配發(fā)生(取指令塊包含轉(zhuǎn)移在地址X上),那么相應(yīng)的目標地址、轉(zhuǎn)移屏蔽隨同這個匹配的轉(zhuǎn)移地址一起被送到掛起轉(zhuǎn)移預(yù)測邏輯(401)。如果沒有匹配(“未命中”),則沒有信息被送到掛起轉(zhuǎn)移預(yù)測邏輯。
轉(zhuǎn)移歷史隊列(404)對于每一個被處理器執(zhí)行的轉(zhuǎn)移,轉(zhuǎn)移歷史隊列(BHQ)(404)暫時記錄隨后被對該轉(zhuǎn)移執(zhí)行的發(fā)生或未發(fā)生的轉(zhuǎn)移動作。BHQ的功能是在BPL(403)中為每一個入口建立轉(zhuǎn)移歷史屏蔽。這個屏蔽被隨后用來和預(yù)取表(405)的轉(zhuǎn)移屏蔽比較。圖5顯示了轉(zhuǎn)移歷史隊列的基本特征。該圖顯示出BHQ被安排成由一個轉(zhuǎn)移地址信息域(501)和一個轉(zhuǎn)移歷史屏蔽域(502)組成的一個陣列入口。轉(zhuǎn)移地址信息域包含N個轉(zhuǎn)移地址入口(503)。與每一個轉(zhuǎn)移地址入口相連系的是由N位組成的轉(zhuǎn)移歷史屏蔽(504)。N位中的每位代表該轉(zhuǎn)移的動作(被發(fā)生或未發(fā)生),N-1個隨后的轉(zhuǎn)移被處理器遇到,并且和預(yù)取表的轉(zhuǎn)移屏蔽中的N個子域相對應(yīng)。
轉(zhuǎn)移歷史隊列可以用先進先出(FIFO)隊列實現(xiàn),每一個被處理器遇到的新的轉(zhuǎn)移被放在BHQ的第一個位置。當(dāng)一個轉(zhuǎn)移被處理器執(zhí)行時,四個動作同時發(fā)生。第一,所有現(xiàn)存的轉(zhuǎn)移地址入口,與它們相應(yīng)的轉(zhuǎn)移屏蔽信息從下進入這個隊列中的一個位置。為新的轉(zhuǎn)移地址的進入,釋放該隊列的上面的第一個位置。第二,所有的轉(zhuǎn)移歷史屏蔽被左移一位,為剛剛進入隊列的新轉(zhuǎn)移留出轉(zhuǎn)移動作空間。第三,轉(zhuǎn)移的地址被放入BHQ的branch_ address_1中,轉(zhuǎn)移歷史屏蔽域被清空。第四,然后新的轉(zhuǎn)移動作被加到在轉(zhuǎn)移歷史隊列中所有轉(zhuǎn)移歷史屏蔽中最右端的位。以這種方式創(chuàng)建轉(zhuǎn)移歷史屏蔽來調(diào)整每一個轉(zhuǎn)移動作域和在預(yù)取表中找到的轉(zhuǎn)移屏蔽中的N個子域的匹配順序。
例如,圖5只顯示了由BHQ定義的第一個入口最右邊的位。這里,Xn代表轉(zhuǎn)移動作。實際上,每一個轉(zhuǎn)移歷史屏蔽的第n位代表在轉(zhuǎn)移歷史隊列的第一個位置找到的轉(zhuǎn)移動作。該隊列的第二個入口,branch_address_2僅有兩個最右邊的位被填寫。這里Xn-1代表在它的轉(zhuǎn)移地址域中被標識的轉(zhuǎn)移動作,Xn代表下一個被執(zhí)行的轉(zhuǎn)移動作。
注意,這是BHQ的第一個位置的轉(zhuǎn)移。最后,BHQ上最后一個入口顯示了一個轉(zhuǎn)移歷史屏蔽是N位寬并且被完全填寫。這些位標號為X1,X2,…Xn-2,Xn-1,Xn。這里X1描述由branch_address域標識的轉(zhuǎn)移動作。值1表示該轉(zhuǎn)移發(fā)生,值為0意味著該轉(zhuǎn)移未發(fā)生。位X2描述由標記Xn-2,Xn-1,Xn執(zhí)行的動作,最后三個轉(zhuǎn)移在branch address域等識別轉(zhuǎn)移之后執(zhí)行的轉(zhuǎn)移動作。這些標識轉(zhuǎn)移的動作分別在BHQ的第三,第二和第一位置。
對于每一個進入BHQ的新的轉(zhuǎn)移,一個轉(zhuǎn)移必須從BHQ的底部離去(忽略啟動條件)。當(dāng)一個轉(zhuǎn)移離開BHQ時,它的轉(zhuǎn)移屏蔽被完成。然后該轉(zhuǎn)移屏蔽被保存在BPL中以備將來參考。這個過程包括為離開BHQ的轉(zhuǎn)移地址查找BHL。如果匹配被找到,那么該轉(zhuǎn)移屏蔽替代在匹配BPL入口的這個。如果匹配沒有被找到,那么為這個轉(zhuǎn)移地址,形成一新的入口,并且轉(zhuǎn)移屏蔽與其一起被保存。這個轉(zhuǎn)移屏蔽代表被處理器執(zhí)行的N個連續(xù)轉(zhuǎn)移(從相應(yīng)的轉(zhuǎn)移開始)的程序路徑。
預(yù)取表(405)對于程序中每個高速緩存未命中,通過從一個轉(zhuǎn)移指令開始,到引起未命中指令結(jié)束,編碼一個執(zhí)行路徑在預(yù)取表中形成入口。該未命中地址與這個執(zhí)行路徑相關(guān)。在優(yōu)選實施例中,執(zhí)行路徑中的轉(zhuǎn)移指令的數(shù)量是可以改變的。在執(zhí)行路徑中每一個轉(zhuǎn)移的結(jié)果(發(fā)生或未發(fā)生)被編碼一位(例如,0表示未發(fā)生,1表示發(fā)生),并且在轉(zhuǎn)移路徑中所有的轉(zhuǎn)移的結(jié)果被結(jié)合,在預(yù)取表中形成入口編碼屏蔽域。
圖6給出了PT更詳細的說明。PT被安排成一個高速緩存更適宜,該高速緩存用轉(zhuǎn)移地址信息域601查找。組成PT入口的其它域包括未命中地址信息域(602)、轉(zhuǎn)移歷史屏蔽域(603)、屏蔽域(604)位數(shù)和確認位(605)。轉(zhuǎn)移地址信息域包含獨立的轉(zhuǎn)移地址入口606,這里轉(zhuǎn)移地址入口識別轉(zhuǎn)移地址,該轉(zhuǎn)移的方向由轉(zhuǎn)移預(yù)測機制預(yù)測。注意每一個被保存在轉(zhuǎn)移地址域的地址可以被簡寫或者截短。在每個PT入口僅僅保存一個組成完整轉(zhuǎn)移地址位的子集是可能的。在PT中與每一個轉(zhuǎn)移地址入口相關(guān)的是一個或者多個未命中地址入口607,每一個有一個轉(zhuǎn)移歷史屏蔽608入口、“屏蔽位數(shù)”(609)和確認位610。未命中地址信息域識別與轉(zhuǎn)移地址域相關(guān)的以前未命中指令/數(shù)據(jù)高速緩存地址。轉(zhuǎn)移歷史屏蔽包含N位,每一個位代表被該處理器遇到的N個連續(xù)轉(zhuǎn)移(從入口與轉(zhuǎn)移地址域606相對應(yīng)的轉(zhuǎn)移地址開始)的預(yù)測動作(發(fā)生或未發(fā)生)。例如,轉(zhuǎn)移歷史屏蔽608的第一個位代表在入口相應(yīng)轉(zhuǎn)移地址域606中識別的轉(zhuǎn)移預(yù)測動作。第二個位代表轉(zhuǎn)移的預(yù)測動作,該轉(zhuǎn)移在相應(yīng)的轉(zhuǎn)移地址域被找到轉(zhuǎn)移后,由處理器執(zhí)行,等等。由于屏蔽的有效位可以在1到N之間,該“屏蔽位”(609)域時常注意域608中總的屏蔽有效位的數(shù)量。與每一未命中地址域相關(guān)的確認位表示未命中地址的預(yù)取是否有用或者預(yù)取在使用前被更替。零(0)表示最近一次預(yù)取沒有用,1表示該預(yù)取是有用的。確認位起初設(shè)置為0以禁止預(yù)取。注意初始化確認位為0是一個執(zhí)行過程的決定,并不影響這里描述的系統(tǒng)的操作。盡管預(yù)取表可以包含很多未命中地址和與轉(zhuǎn)移地址入口605相關(guān)的屏蔽,圖6結(jié)構(gòu)被選擇用來簡化和表示一個明確的設(shè)計。
L1高速緩存未命中時,一個新的入口通過編碼從一個轉(zhuǎn)移指令開始執(zhí)行路徑,并使未命中地址和這個執(zhí)行路徑相連系。這使將來用轉(zhuǎn)移指令作為預(yù)取觸發(fā)預(yù)取該未命中的地址成為可能。由處理器執(zhí)行每一個轉(zhuǎn)移(Br)的調(diào)用,BHQ(404)臨時記錄在Br之后執(zhí)行發(fā)生或者未發(fā)生的轉(zhuǎn)移動作,這樣形成從Br開始編碼執(zhí)行路徑的轉(zhuǎn)移歷史屏蔽。如果該未命中地址在程序執(zhí)行時還沒有被預(yù)取,那么轉(zhuǎn)移地址和BHQ最頂部的入口的屏蔽和該未命中地址相關(guān),并且被作為一個新的入口加入預(yù)取表。如果在過去已經(jīng)有一個未命中地址預(yù)取,則從BHQ中讀轉(zhuǎn)移地址和屏蔽來和未命中地址聯(lián)系,以確定在BHQ中“位置”的方法和設(shè)備在圖15中詳細描述。如果PT已滿,則PT的一個入口用任何已經(jīng)知道的替換策略(至少最近使用、隨機的、假LRU)收回。
轉(zhuǎn)移執(zhí)行單元(402)所有的程序轉(zhuǎn)移被送到解碼邏輯單元701。掛起轉(zhuǎn)移預(yù)測邏輯(401)提供轉(zhuǎn)移執(zhí)行單元(402)轉(zhuǎn)移預(yù)測信息。在轉(zhuǎn)移指令被執(zhí)行后,轉(zhuǎn)移執(zhí)行單元送轉(zhuǎn)移指令的發(fā)生或者未發(fā)生結(jié)果到BHQ(404)。此外,轉(zhuǎn)移執(zhí)行單元提供轉(zhuǎn)移結(jié)果給轉(zhuǎn)移預(yù)測機制來與被預(yù)測的結(jié)果比較。
掛起轉(zhuǎn)移預(yù)測邏輯(401)掛起轉(zhuǎn)移預(yù)測邏輯(401)在圖7中詳細描述。掛起轉(zhuǎn)移預(yù)測邏輯包含4個子單元轉(zhuǎn)移解碼邏輯701、掛起轉(zhuǎn)移預(yù)測隊列(PBPQ)702、轉(zhuǎn)移執(zhí)行邏輯703和轉(zhuǎn)移預(yù)測命中邏輯704。
PBPQ通過轉(zhuǎn)移預(yù)測機制403(圖4)檢測每個轉(zhuǎn)移,保留描述N個轉(zhuǎn)移動作的預(yù)測信息。這個信息通過掛起轉(zhuǎn)移預(yù)測邏輯中的其它三個子單元使用或者修改。如果該解碼器為轉(zhuǎn)移指令發(fā)送指令解碼信息,控制流去到轉(zhuǎn)移解碼邏輯單元701。該轉(zhuǎn)移解碼邏輯提供給轉(zhuǎn)移執(zhí)行單元402轉(zhuǎn)移預(yù)測信息,并在一個解碼轉(zhuǎn)移之后重新設(shè)置解碼器(220)地址順序信息。轉(zhuǎn)移執(zhí)行邏輯703檢查轉(zhuǎn)移預(yù)測信息與該轉(zhuǎn)移的實際執(zhí)行結(jié)果。當(dāng)預(yù)測錯誤被檢測出,PBPQ被清除,取指令單元(215)和解碼器(220)被重新啟動。轉(zhuǎn)移預(yù)測命中邏輯704在PBPQ中保存轉(zhuǎn)移預(yù)測信息。這個信息被轉(zhuǎn)移單元(225)中的其它子單元所利用。
應(yīng)注意,在掛起轉(zhuǎn)移預(yù)測邏輯中描述的許多功能通常集成在解碼器、轉(zhuǎn)移預(yù)測機制、或者處理器的執(zhí)行單元中。典型地,循環(huán)時間限制將要求在這些邏輯的某些部分放置在這些單元內(nèi)。但是,為了敘述簡單,它們被在下面分別說明。
掛起轉(zhuǎn)移預(yù)測隊列(PBPQ)(702)在圖8中PBPQ被詳細描述。當(dāng)一個轉(zhuǎn)移被轉(zhuǎn)移預(yù)測邏輯機制檢測,由轉(zhuǎn)移地址、預(yù)測目標地址和轉(zhuǎn)移歷史屏蔽組成的入口被保存在PBPQ中。圖8給出了PBPQ更加詳細的描述。PBPQ被安排成入口陣列,包含轉(zhuǎn)移地址信息域801、目標地址信息域802、轉(zhuǎn)移歷史屏蔽域803和有效位域804。轉(zhuǎn)移地址信息域包含相互獨立的轉(zhuǎn)移地址入口805,每一個轉(zhuǎn)移地址入口識別一個轉(zhuǎn)移的地址,該轉(zhuǎn)移的方向被轉(zhuǎn)移預(yù)測機制預(yù)測。應(yīng)注意,保存在轉(zhuǎn)移地址域中的每一個地址可以被縮短或者被截尾。在每一個PBPQ入口,只保存組成整個轉(zhuǎn)移地址位的子集是可能的。在PBPQ中與每一個轉(zhuǎn)移地址相關(guān)的是轉(zhuǎn)移目標入口608、轉(zhuǎn)移歷史屏蔽807入口和有效位808。轉(zhuǎn)移目標域識別被轉(zhuǎn)移域標識有關(guān)的轉(zhuǎn)移的預(yù)測目標地址。轉(zhuǎn)移歷史屏蔽包含N位,每位表示被處理器遇到的連續(xù)N個轉(zhuǎn)移(從與PBPQ入口的轉(zhuǎn)移地址域801相對應(yīng)的轉(zhuǎn)移開始)的預(yù)測動作(發(fā)生或者未發(fā)生)。例如,轉(zhuǎn)移歷史屏蔽的第一個位表示在相對應(yīng)的轉(zhuǎn)移地址域中被標識的轉(zhuǎn)移預(yù)測動作。第二個位表示轉(zhuǎn)移的預(yù)測動作,該轉(zhuǎn)移由處理器執(zhí)行其后的轉(zhuǎn)移在它對應(yīng)的轉(zhuǎn)移地址域等找到。與每個轉(zhuǎn)移地址域相關(guān)的有效位表示轉(zhuǎn)移地址入口是否有效。零(0)表示無效,一(1)表示有效。這N位與PT入口轉(zhuǎn)移屏蔽中的N位相對應(yīng)。
認為PBPQ是與最早的入口一樣的第一入口(最頂部)的隊列是方便的。新的入口被加到從該隊列的頂部開始搜索到隊列的末尾的第一個可利用空閑入口。在處理入口期間,從隊列的頂部移去,所有的有效子入口向上推一個位置。這就保證了當(dāng)需要時總有一個空閑位置。
轉(zhuǎn)移預(yù)測命中邏輯(704)圖9表示出轉(zhuǎn)移預(yù)測命中邏輯的操作的細節(jié)。由轉(zhuǎn)移地址、目標地址組成的轉(zhuǎn)移預(yù)測入口,由轉(zhuǎn)移預(yù)測邏輯(403)提供。在步驟901,PBPQ被查找第一個可用的位置。在步驟902,PBPQ用轉(zhuǎn)移預(yù)測信息被更新。
轉(zhuǎn)移解碼邏輯(701)圖10表示了轉(zhuǎn)移解碼邏輯操作的詳細描述。每次一個轉(zhuǎn)移被解碼,PBPQ(702)最早的入口被檢查。提醒一下,PBPQ的第一個入口是最早的入口。在步驟1001,確定第一個入口是否有效。如果該入口有效,在步驟1002,正在被解碼的轉(zhuǎn)移地址與PBPQ的最早的入口的轉(zhuǎn)移地址域相比較。在步驟1003,如果該轉(zhuǎn)移地址與PBPQ中最早的入口匹配,那么被預(yù)測的程序路徑準確的緊跟該程序的實際路徑,并且轉(zhuǎn)移歷史屏蔽域第一個轉(zhuǎn)移預(yù)測位(PBPQ最早的入口的)被檢查,在步驟1004,判斷該轉(zhuǎn)移的預(yù)測是否發(fā)生或者未發(fā)生。如果該轉(zhuǎn)移被預(yù)測發(fā)生,在步驟1005,解碼器的程序計數(shù)器被設(shè)置給轉(zhuǎn)移指令的被預(yù)測目標地址。如步驟1006所示,返回步驟1004,如果該轉(zhuǎn)移被預(yù)測未發(fā)生,解碼器程序計數(shù)器被設(shè)置給緊接轉(zhuǎn)移指令的地址。
在步驟1007,被預(yù)測的轉(zhuǎn)移結(jié)果(被發(fā)生或者未發(fā)生)和被預(yù)測的目標地址被送到轉(zhuǎn)移執(zhí)行單元(402)。最后,PBPQ的第一個入口被移去,并且所有其它入口被上推一個位置,在PBPQ中得到一個可用位置。
返回到步驟1002,如果正被解碼的地址與在PBPQ最早入口中被預(yù)測的轉(zhuǎn)移的地址不匹配,則一個轉(zhuǎn)移預(yù)測錯誤發(fā)生。該程序不緊接被轉(zhuǎn)移預(yù)測機制所預(yù)測的路徑。當(dāng)這種情況發(fā)生,在步驟1008,PBPQ被清除。在步驟1009,取指令邏輯(215)通過清除指令緩沖區(qū)和以緊接剛在被解碼的地址再啟動而被再啟動。
返回到步驟1001,如果PBPQ的最早的入口無效,轉(zhuǎn)移預(yù)測機制也沒有預(yù)測一個轉(zhuǎn)移。特別是,當(dāng)處理器第一次正在執(zhí)行一程序轉(zhuǎn)移時或者當(dāng)BPL(403)中存在的轉(zhuǎn)移信息已經(jīng)超過時效后這種事件發(fā)生。當(dāng)這個事件發(fā)生時,BPL(403)無任何的轉(zhuǎn)移信息,并且不能提供有關(guān)即將到來的轉(zhuǎn)移信息。在這種情況下,一個靜態(tài)預(yù)測被產(chǎn)生。例如,在步驟1011,該轉(zhuǎn)移的條件碼被檢驗。如果該轉(zhuǎn)移是有條件的,在步驟1011,假設(shè)轉(zhuǎn)移未發(fā)生,解碼器繼續(xù)解碼緊接該轉(zhuǎn)移的指令。如果該轉(zhuǎn)移是無條件的,在步驟1102,該目標地址被計算,解碼器的程序計數(shù)器同目標地址被設(shè)置。
轉(zhuǎn)移執(zhí)行邏輯(703)轉(zhuǎn)移執(zhí)行邏輯的操作如圖11中所示。轉(zhuǎn)移執(zhí)行邏輯從轉(zhuǎn)移執(zhí)行單元(402)接收下面的信息(a)被預(yù)測的轉(zhuǎn)移的結(jié)果(發(fā)生或者沒發(fā)生);(b)實際的轉(zhuǎn)移結(jié)果;(c)被預(yù)測的目標地址;及(d)實際的目標地址。
在步驟1101,被預(yù)測的轉(zhuǎn)移結(jié)果和實際的結(jié)果相比較。如果被預(yù)測的結(jié)果和實際的結(jié)果相等,在步驟1102,它們被比較來確定是否轉(zhuǎn)移結(jié)果和實際的結(jié)果兩者都沒被發(fā)生。如果它們兩者都沒被發(fā)生,那么沒有動作被請求。如果被預(yù)測的結(jié)果和實際的結(jié)果都被發(fā)生,那么被預(yù)測的和實際的目標地址在步驟1103被比較。如果地址匹配沒有動作被請求。當(dāng)轉(zhuǎn)移結(jié)果和實際的結(jié)果地址不匹配,則清除PBPQ重新啟動流水線,重新開始取指令和解碼邏輯。
返回到步驟1101,如果被預(yù)測的結(jié)果和實際的結(jié)果不同,則預(yù)測錯誤,我們直接返回到步驟1104。
根據(jù)本發(fā)明的另一個實施例,圖12和圖13分別表示了L1和L2高速緩存系統(tǒng)的高速緩存目錄入口。L1高速緩存目錄入1200由有效位1201、奇偶校驗位1202、錯誤校正碼(ECC)1203、狀態(tài)(修改的、專用的、共享的、無效的)1204和類似于現(xiàn)有技術(shù)100中高速緩存的標記1207域。這項發(fā)明的附加域是預(yù)取指位(1205)具有1位域,如果該行被預(yù)取,并且因為它已被預(yù)取還沒有被引用,該位被設(shè)置為1。一旦該行被引用,該位被設(shè)置為0。很明顯,通常高速緩存未命中時,設(shè)置預(yù)取位為0。
加載位(1206)具有1位域,當(dāng)一個未命中高速緩存行正被從存儲器(或者L2)傳送給L1高速緩存時,該位被設(shè)置為1位。一旦傳送完成并且該位已完全到達L1高速緩存,該位被設(shè)置為0。
L2高速緩存目錄入口1300有一個包含位1301、有效位1302、奇偶校驗位1303、錯誤校正碼(ECC)1304、狀態(tài)(修改的、專用的、共享的、無效的)1305和類似于現(xiàn)有技術(shù)100的高速緩存的標記域1310。本發(fā)明的附加域是●使用位(1306)使用位域指示當(dāng)它被預(yù)取后,在L1中是否該行被引用。如果它被預(yù)取后在L1中該行被引用,那么這個行的預(yù)取是有用的。如果它被預(yù)取到L1后沒有被引用,則該行的預(yù)取是沒有用的。當(dāng)上次被預(yù)取時,該行在L1中被引用,該位域被設(shè)置為1。當(dāng)該預(yù)取行在L1中沒有被引用,該位域被設(shè)置為0。
●滯后位(1307)滯后位域指示當(dāng)該行被預(yù)取進L1高速緩存時,在它完全到達L1高速緩存前被引用。這意味著預(yù)取“滯后”。如果是一個“滯后”預(yù)取,這就意味著該預(yù)取沒有足夠早的及時被發(fā)布來遮掩延遲,因此該行以后預(yù)取的時效性應(yīng)被合適地調(diào)整到使它及時到達L1要早。如果在L1中的預(yù)取行在它完全到達前被引用,-該位域被設(shè)置為1。如果該被預(yù)取行在它完全到達L1中后被引用,該位域被設(shè)置為0。在本優(yōu)先實施例中,滯后位被如下設(shè)置為1在L1中對一個預(yù)取行的初次引用(通過預(yù)取位(1205)為1指示),在L1目錄中的加載位(1206)被讀出。如果該加載位被設(shè)置為1,這意味著正在被引用的行沒有完全到達L1。在這種情況下,在L2目錄中相應(yīng)行的滯后位被設(shè)置為1。
●屏蔽位數(shù)(1308)當(dāng)相應(yīng)的行被上次預(yù)取入L1高速緩存時,該域記錄所用的屏蔽位數(shù)的。當(dāng)確定預(yù)取應(yīng)該被發(fā)布時,這個域指示屏蔽位數(shù),用于比較PT中轉(zhuǎn)移屏蔽域和BPL(403)的轉(zhuǎn)移屏蔽域。為隨后預(yù)取該行,這個域的值根據(jù)上次預(yù)取的時效性被增加、減少或者保持原來不變。
●轉(zhuǎn)移地址(1309)在上次預(yù)取進入L1高速緩存時,這個域記錄轉(zhuǎn)移指令,轉(zhuǎn)移指令充當(dāng)該行預(yù)取觸發(fā)。
我們現(xiàn)在充分描述本發(fā)明的動作。很容易認為這個機制是4個獨立的但同步的過程,每一個過程被一個特殊的事件觸發(fā)。表1列出了在這個處理過程中觸發(fā)事件、處理過程、和描述該動動作的示圖。
表1觸發(fā)事件和相關(guān)的處理過程每一處理過程在下面被更詳細的描述。
事件-轉(zhuǎn)移指令解碼在解碼處理過程中,所有的轉(zhuǎn)移指令也被送到掛起轉(zhuǎn)移預(yù)測機制。再調(diào)用圖4,在解碼循環(huán)中所有的轉(zhuǎn)移指令被送到轉(zhuǎn)移解碼邏輯(701)。轉(zhuǎn)移指令地址通過轉(zhuǎn)移單元(225)與預(yù)取單元(255)相連系,以確定是否預(yù)取應(yīng)該被啟動。根據(jù)這項發(fā)明的實施例,預(yù)取數(shù)據(jù)到高速緩存的方法被描述在圖14。在步驟1401,確定正被解碼的指令是否是一個轉(zhuǎn)移。如果該指令不是一個轉(zhuǎn)移,則沒有預(yù)取被啟動。如果該指令是一個轉(zhuǎn)移,在步驟1402,包含轉(zhuǎn)移地址和相應(yīng)的屏蔽的BHQ的底部入口被移去并加入到BPL(403),從而釋放BHQ的一個入口。在步驟1403,BHQ中所有的轉(zhuǎn)移被下推一個位置,及當(dāng)前正被解碼的轉(zhuǎn)移被加入到BHQ的頂部。注意每一個進入BHQ的新的轉(zhuǎn)移,必須從BHQ的底部離去(忽略啟動條件)。當(dāng)一個轉(zhuǎn)移離開BHQ時,它的轉(zhuǎn)移屏蔽完成。然后該轉(zhuǎn)移屏蔽被保存在BPL(403)中以備將來參考。在步驟1404,判斷相對應(yīng)于當(dāng)前轉(zhuǎn)移指令地址的入口是否存在于BPL(403)中。如果不存在,沒有預(yù)取被啟動。
返回到步驟1404,如果和當(dāng)前轉(zhuǎn)移地址相對應(yīng)的入口存在于BPL(403)中,在步驟1405,相對應(yīng)入口的屏蔽域462從BPL中被讀出。為了說明起見,這個入口的屏蔽域被標記為ML。在步驟1406,判斷對應(yīng)于當(dāng)前轉(zhuǎn)移指令地址的一個入口是否存在于PT中。如果不存在,則沒有預(yù)取被啟動。這種情況典型發(fā)生在(ⅰ)當(dāng)轉(zhuǎn)移在程序中正被第一次解碼,(ⅱ)當(dāng)轉(zhuǎn)移在PT中已經(jīng)過時,因此對它沒有轉(zhuǎn)移指令的入口,或者(ⅲ)沒有和這個轉(zhuǎn)移相關(guān)的未命中。
返回到步驟1406,如果和當(dāng)前轉(zhuǎn)移地址相對應(yīng)的入口存在于PT中,則在步驟1407,屏蔽(M)、確認位(C)、被用的屏蔽位數(shù)(n)、和相應(yīng)入口的預(yù)取地址(mA)被從PT中讀出。在步驟1408,來自PT的屏蔽M和來自BPL的ML中最高有效的“n”位對匹配比較。轉(zhuǎn)移屏蔽被逐位比較,這里每根據(jù)發(fā)生或者不發(fā)生,每位指示是否預(yù)測將來的轉(zhuǎn)移。如果沒有匹配,沒有預(yù)取被啟動。這就意味著當(dāng)該轉(zhuǎn)移與預(yù)取地址(mA)相連系時與該轉(zhuǎn)移相關(guān)的程序的最近的控制流程(如BPL中屏蔽ML)不同于所觀測的控制流程(如PT中的屏蔽M)。
返回到步驟1408,如果屏蔽匹配,在步驟1409,判斷是否該確認位C(來自PT)被設(shè)置為1。如果該PT入口的確認位C被設(shè)置為1,意味著上一次(mA)被預(yù)取入L1,并被利用。如果確認位(C)沒有被設(shè)置為1,沒有預(yù)取被啟動。
返回到步驟1409,如果確認位被設(shè)置為1,在步驟1410,用相應(yīng)于PT入口的地址mA啟動一個預(yù)取(如果該不在L1高速緩存,最好啟動包含數(shù)據(jù)mA行的預(yù)取)。在步驟1411,為L1的目錄入口mA,加載位被設(shè)置為1并保持到包含數(shù)據(jù)mA的行完全到達L1高速緩存的同余類。在步驟1412,L1目錄入口mA預(yù)取位被設(shè)置為1來指示它為一個預(yù)取行。僅當(dāng)這個行在L1高速緩存中且被引用時,預(yù)取位被設(shè)置為0。
應(yīng)注意,如果與當(dāng)前預(yù)取觸發(fā)相連系的未命中地址已經(jīng)存在于高速緩存中,則一種用來改進預(yù)取時效性的另一種方法涉及在PT中定位下一個預(yù)取(或下一個預(yù)取觸發(fā))。這可按如下獲得可以增加BPL(403)的每個入口來保存后繼轉(zhuǎn)移地址。當(dāng)一個轉(zhuǎn)移指令被解碼時,將決定是否可以應(yīng)用圖14所描述的運算法則來起動預(yù)取。如果與指令相關(guān)的預(yù)取地址所標識的數(shù)據(jù)已經(jīng)存在于高速緩存,那么當(dāng)前轉(zhuǎn)移的BPL入口的后繼轉(zhuǎn)移地址能被用來作為下一個預(yù)取觸發(fā),并且圖14中該運算法則的其他執(zhí)行可被實現(xiàn)以起動使用這個新觸發(fā)的預(yù)取。這個預(yù)取觸發(fā)鏈可以持續(xù)直到我們找到一個預(yù)取觸發(fā)其預(yù)取地址還沒有存在于高速緩存,然后一個預(yù)取可以被開始。因為我們預(yù)測未來一個可能的預(yù)取,并發(fā)布一個預(yù)取,并發(fā)布一預(yù)取,這樣就改善了預(yù)取的時效性。
事件-L1高速緩存未命中對應(yīng)于高速緩存未命中的本發(fā)明實施例的狀態(tài)描述如圖15所示。當(dāng)一個高速緩存未命中被檢測出時,需要下面兩個動作(ⅰ)在PT中加入一個新的入口;和(ⅱ)更新L2高速緩存目錄入口的字段。我們現(xiàn)在詳細描述這兩個動作。
在步驟1501,確定mA是否存在于L2中。如果mA不存在于L2中,它將從存儲器中取出并放入L2中。由于我們沒有關(guān)于包含數(shù)據(jù)mA的行是否在以前被預(yù)取進L1的任何信息,我們設(shè)置使用位和滯后位為0,對于mA在L2目錄入口中包含屏蔽位數(shù)域設(shè)置為1,并進入步驟1502。返回到步驟1501,如果mA存在,我們直接進入步驟1502。返回參看圖13,如果在L2目錄入口中使用位(1305)被設(shè)置為1,這意味包含數(shù)據(jù)mA的行在程序執(zhí)行期間已被預(yù)取,并隨后曾被引用(使用過)。在步驟1502,如果使用位被設(shè)置為1,在步驟1503判定是否滯后位(圖13中1306)被設(shè)置為1(是否滯后位被設(shè)置為1,這意味著上一次包含數(shù)據(jù)mA的行被預(yù)取入L1,在它完全到達L1同余類前被引用)。如果這個滯后位也被設(shè)置為1,被預(yù)取的包含mA的上次用的行包含屏蔽位數(shù)(n)的域在步驟1504被讀出。
如果滯后位和使用位都被設(shè)置為1,這意味著利用包含數(shù)據(jù)mA的上一次行被預(yù)取入L1。但是該行是在它完全到達L1高速緩存同余類前被引用。要增加預(yù)取和應(yīng)用這被預(yù)取數(shù)據(jù)之間的時間,我們給與包含mA的行相關(guān)的屏蔽位數(shù)增加1。這意味著如果該行的上一次預(yù)取通過預(yù)測未來“n”轉(zhuǎn)移發(fā)布,則后繼預(yù)取(如果需要)將通過預(yù)測未來“n+1”轉(zhuǎn)移發(fā)布。
返回到步驟1502,如果在L2高速緩存目錄入口使用位被設(shè)置為0,這意味著包含mA的行在此以前從來沒有被預(yù)取或者它被預(yù)取并且在被替代前沒被使用。如果包含屏蔽位數(shù)(n)的域是1,這意味著該行在此以前從來沒有被預(yù)取。否則,n>1,這意味著上一次該行被預(yù)取,在L1中沒有被利用并且已經(jīng)過時。這種情況可能是因為該行的預(yù)取比它需求早。因此,我們對n減1,以至如果上一次對行的預(yù)取通過預(yù)測未來“n”轉(zhuǎn)移而被發(fā)布,將來的預(yù)取(即使有)被通過預(yù)測未來“n-1”轉(zhuǎn)移發(fā)布。
如圖6所述,在步驟1505,一個新的入口被加入預(yù)取表(405)。L2高速緩存目錄入口屏蔽域(n)的位數(shù),提供在BHQ轉(zhuǎn)移地址的“位置”,從那里轉(zhuǎn)移地址和屏蔽必需被讀出。BHQ按FIFO保存,并且每一個被該程序執(zhí)行的新的轉(zhuǎn)移通過把BHQ中是所有入口下推1個位置而加在BHQ的頂部。因此,從BHQ頂部的第n個入口提供包含“n”轉(zhuǎn)移的執(zhí)行路徑,并且預(yù)取單元從包含該轉(zhuǎn)移地址(Br)和“n”位轉(zhuǎn)移屏蔽(M)的BHQ的頂部讀第n個入口。在步驟1506,轉(zhuǎn)移指令(Br)和屏蔽(M)被與地址mA一起加入預(yù)取表。這個入口的確認位(C)被設(shè)置為1,使預(yù)取mA在將來可用。包含mA的行將來的預(yù)取用轉(zhuǎn)移地址(Br)和在屏蔽(M)中編碼的執(zhí)行路徑所觸發(fā)。
由于一個新的入口被加入PT,L2高速緩存目錄必須被更新以反映這個新的入口。在步驟1507,L2高速緩存目錄入口的使用位和滯后位被設(shè)置為0,指示沒有關(guān)于這個被加入到PT的新預(yù)取地址的有用性信息。此外,在PT中與mA有關(guān)的轉(zhuǎn)移地址(Br)也被加入到L2高速緩存目錄入口。如果包含mA的行在將來被預(yù)取入L1,這些域?qū)⒈挥脕碛涗涍@個預(yù)取的有用性。
事件-被預(yù)取的高速緩存行命中本發(fā)明實施例狀態(tài)描述的有關(guān)根據(jù)命中預(yù)取行如圖16所示。根據(jù)命中的包含數(shù)據(jù)mA的行,下面實現(xiàn)對L1和L2高速緩存目錄所做的更新。返回參考圖12,如果預(yù)取位(1205)被設(shè)置為1,這意味著包含數(shù)據(jù)mA的行在它被被預(yù)取入L1高速緩存后第一次被引用。在步驟1601,如果預(yù)取位被設(shè)置為0,則它在步驟1602被設(shè)置為0。加載位在步驟1603被檢查,以判斷是否包含數(shù)據(jù)mA的行已經(jīng)完全到達高速緩存或者仍然在被裝入高速緩存的過程中。如果加載位被設(shè)置為1,意味著包含數(shù)據(jù)mA的行沒有完全到達。這意味著在被發(fā)布的預(yù)取和預(yù)取數(shù)據(jù)的利用之間沒有足夠的時間。在這種情況下,要使將來mA預(yù)取被更早的啟動,隨后對L2目錄完成更新。如果對包含mA行的上一次預(yù)取通過預(yù)測未來“n”轉(zhuǎn)移發(fā)布,則將來的預(yù)取(即使有)被通過預(yù)測未來“n+1”轉(zhuǎn)移發(fā)布。這個過程被如下完成L2尋找包含mA的目錄入口。如果找到,則相應(yīng)的轉(zhuǎn)移地址入口從匹配的目錄入口讀出,并且在步驟1604被和轉(zhuǎn)移單元相連系。(值得注意的是由于L1包含在L2中,該查詢通常是成功的。)用Branch_address_1表示轉(zhuǎn)移指令。注意該地址觸發(fā)包含數(shù)據(jù)mA的行的預(yù)取。
轉(zhuǎn)移單元在BHQ中查找Branch_address_1。如果匹配存在,則轉(zhuǎn)移單元返回該轉(zhuǎn)移,在如步驟1605和1606所示程序執(zhí)行中先于Branch_address_1出現(xiàn)。用Branch_address_0表示該轉(zhuǎn)移先于Branch_address_1出現(xiàn)。參看圖5我們知道如果Branch_address_1是從BHQ頂部開始的第K個入口,Branch_address_0將根據(jù)本發(fā)明的優(yōu)先實施例將從BHQ頂部開始的第(K+1)個入口。注意如果Branch_address_1是BHQ最底部的入口,則沒有轉(zhuǎn)移地址的移動可能。轉(zhuǎn)移單元把Branch_address_0和與Branch_address_0相連系的屏蔽的第一位連到預(yù)取單元。
在步驟1607,該預(yù)取單元在預(yù)取表中查找Branch_address_1。如步驟1608所示,如果Branch_address_1的入口存在于預(yù)取表中,則在這個入口中與地址mA相關(guān)的屏蔽(M)與和轉(zhuǎn)移單元連通的1位屏蔽相連接(與轉(zhuǎn)移Branch_address_0相關(guān))來創(chuàng)建一個新的屏蔽(M2)和轉(zhuǎn)移地址Branch_address_0相關(guān)。注意這個新的屏蔽長度為“n+1”位。
參看圖6,預(yù)取表被(405)被如下更新。如步驟1609所示,轉(zhuǎn)移(Branch_address_0)、屏蔽(M2)和屏蔽M2的位數(shù)與地址mA一起被加入該預(yù)取表,并且Branch_address_1的入口被使無效。如步驟1610所示,對mAL2目錄入口如下更新Branch_address_1被轉(zhuǎn)址地址Branch_address_0更替換,并且所使用的屏蔽位數(shù)被增加1。
返回到步驟1603,如果加載位被設(shè)置為0,預(yù)取的包含數(shù)據(jù)mA的行在它應(yīng)用前到達L1高速緩存。因此包含mA的行的L2目錄中的使用位被設(shè)置為1。這個使用位指示這個預(yù)取是有用的。此外,在步驟1610,轉(zhuǎn)移指令,Branch_address_1,觸發(fā)的該預(yù)取從L2高速緩存目錄讀出,并與預(yù)取單元聯(lián)系。在步驟1611,預(yù)取單元在預(yù)取表中查詢轉(zhuǎn)移指令(Branch_address_1)。如果入口被找到,在步驟1612,與地址(mA)相連系的確認位被設(shè)置為1。
返回到步驟1605,如果該轉(zhuǎn)移(Branch_address_1)在BHQ中沒有被找到,則先于它執(zhí)行的轉(zhuǎn)移將也不存在于BHQ中。在這種情況下,該轉(zhuǎn)移單元送信號到L2高速緩存目錄來設(shè)置滯后位(與包含數(shù)據(jù)mA的行相關(guān))為1,并使轉(zhuǎn)移地址Branch_address_1無效,以致將來對mA的預(yù)取將與Branch_address_1無關(guān)。
事件-預(yù)取高速緩存行替代本發(fā)明的相對應(yīng)于高速緩存行替代實施例的性能如圖17所示。如果包含數(shù)據(jù)mA的高速緩存行被替代來適應(yīng)另一個從L2高速緩存被取的行,則下面的動作發(fā)生為更新包含數(shù)據(jù)mA的行的L2高速緩存目錄。在步驟1701,該被替代行的預(yù)取位從L1高速緩存目錄讀出。如果該位被設(shè)置為1,這意味著該被替代的行被預(yù)取入L1中,并且在被預(yù)取后還沒有被使用。如果該位沒有被設(shè)置為1,則沒有動作發(fā)生。
返回到步驟1701,如果該預(yù)取位被設(shè)置為1,該高速緩存控制器發(fā)送一個信號到L2高速緩存目錄,以檢索包含數(shù)據(jù)mA的行。在步驟1702,如果mA存在于L2中,則該入口的使用位被設(shè)置為0。如圖15所描述,當(dāng)mA的一個新的入口被加入到PT中時,這在將來被使用。L2目錄中的轉(zhuǎn)移地址(Br)與預(yù)取單元相連系。在步驟1703,預(yù)取單元在預(yù)取表中查找轉(zhuǎn)移地址(Br)。如果該轉(zhuǎn)移地址不存在于預(yù)取表中,沒有動作發(fā)生。
返回到步驟1703,如果轉(zhuǎn)移地址(Br)存在于預(yù)取表中,則與這個入口的mA相關(guān)的確認位被設(shè)置為0。這意味著將來對mA的預(yù)取將不再被該轉(zhuǎn)移(Br)所觸發(fā)。
本發(fā)明的優(yōu)選實施例已經(jīng)在這里被展示和描述,人們將會懂得這些實施例僅僅以例子的方式被提供。對熟悉本領(lǐng)域技術(shù)的人來說,許多的變化、改變和替換將是很明顯的沒有脫離這項發(fā)明的精神。從而,這意味著附加的權(quán)利要求涉及在本發(fā)明的精神和范圍內(nèi)的所有這種變化。
權(quán)利要求
1.在一包含邏輯上連接在存儲器和至少一個處理器單元之間的高速緩沖器的系統(tǒng)中,在由至少一個處理器單元處理指令流時,一種用以把預(yù)取信息送入高速緩沖器的方法,該方法包括下列步驟產(chǎn)生第一路經(jīng)數(shù)據(jù),其中第一路經(jīng)數(shù)據(jù)表示一包含預(yù)取觸發(fā)指令的第一路經(jīng)和一使用通過與預(yù)取觸發(fā)指令相關(guān)的預(yù)取操作預(yù)取信息的指令;產(chǎn)生第二路經(jīng)數(shù)據(jù),其中第二路經(jīng)數(shù)據(jù)表示預(yù)測的第二執(zhí)行路經(jīng);及根據(jù)比較第一路經(jīng)數(shù)據(jù)和第二路經(jīng)數(shù)據(jù)的比較操作,判斷是否第一路經(jīng)在預(yù)測的第二路經(jīng)中,以有條件地執(zhí)行預(yù)取操作。
2.按照權(quán)利要求1的方法,其中第一路經(jīng)數(shù)據(jù)從第一入口表輸出,其中的每個入口標識1)至少一個包含一給定的預(yù)取觸發(fā)指令的路經(jīng),及2)與給定的預(yù)取觸發(fā)操作相關(guān)的一給定預(yù)取操作。
3.按照權(quán)利要求2的方法,其中第一表的每個入口標識至少一個路經(jīng),它包含具有地址域,屏蔽域和位域給定的預(yù)取觸發(fā)指令,其中的地址域標識給定的預(yù)取觸發(fā)指令,屏蔽域標識關(guān)于跟在預(yù)取觸發(fā)指令之后預(yù)定數(shù)目的連續(xù)轉(zhuǎn)移指令的轉(zhuǎn)移動作,而位域標識了在屏蔽域中一些相應(yīng)的轉(zhuǎn)移動作。
4.按照權(quán)利要求2的方法,其中第二路經(jīng)數(shù)據(jù)從第二個入口表輸出,其中的每一個入口標識了至少一個預(yù)測的執(zhí)行路經(jīng)。
5.按照權(quán)利要求4的方法,其中第二個表的每個入口,標識至少一個帶有地址域和屏蔽域的預(yù)測的執(zhí)行路經(jīng),其中的地址域標識給定的指令,而屏蔽域標識關(guān)于跟在預(yù)取觸發(fā)指令之后預(yù)定數(shù)目的連續(xù)轉(zhuǎn)移指令的轉(zhuǎn)移動作。
6.按照權(quán)利要求1的方法,其中的預(yù)取觸發(fā)指令根據(jù)前面指令流的執(zhí)行而得到。
7.按照權(quán)利要求6的方法,其中預(yù)取操作與高速緩沖器未命中的預(yù)取觸發(fā)指令相關(guān),其中被所說指令使用的信息從高速緩沖器請求而不能在高速緩沖器中訪問。
8.按照權(quán)利要求7的方法,還包括標識指令流中領(lǐng)先于未命中前預(yù)定數(shù)目轉(zhuǎn)移指令的特定轉(zhuǎn)移指令的步驟,而且其中同預(yù)取操作相關(guān)的預(yù)取觸發(fā)指令是特定的轉(zhuǎn)移指令。
9.按照權(quán)利要求8的方法,其中預(yù)取觸發(fā)指令基于指令流的執(zhí)行而動態(tài)地被調(diào)整。
10.按照權(quán)利要求9的方法,還包括存儲時效性數(shù)據(jù)的步驟,當(dāng)所說指令使用的這種信息是從高速緩沖器請求的時,以表征預(yù)取操作預(yù)取的信息的可存取性。
11.按照權(quán)利要求10的方法,其中的時效性數(shù)據(jù)編碼第一狀態(tài)和第二狀態(tài)之一,其中的第一狀態(tài)表示由預(yù)取操作預(yù)取的這些信息沒有完全加載到高速緩沖器,其中的第二狀態(tài)表示由預(yù)取操作預(yù)取的這些信息完全加載到高速緩沖器。
12.按照權(quán)利要求11的方法,還包括下列步驟提供第一個入口表,其中的每個入口標識1)至少一個路經(jīng)從給定的預(yù)取觸發(fā)指令啟動,及2)一給定的預(yù)取操作與給定的預(yù)取觸發(fā)操作相關(guān);為所說信息響應(yīng)向高速緩沖器的請求,判斷是否時效性數(shù)據(jù)編碼所說的第一狀態(tài);及如果判定時效性數(shù)據(jù)編碼了所說的第一狀態(tài),標識的是指令流中給出的轉(zhuǎn)移指令,這些指令領(lǐng)先于向高速緩沖器發(fā)出對所說信息請求的預(yù)取操作有關(guān)的預(yù)取觸發(fā)指令,更新第一路經(jīng)數(shù)據(jù),以表示一新的第一路經(jīng)從給定的轉(zhuǎn)移指令到使用所說信息的指令,及在第一表中存儲一入口,以標識1)新的第一路經(jīng),及2)向高速緩沖器發(fā)出請求所說信息的預(yù)取操作。
13.按照權(quán)利要求1的方法,還包括當(dāng)這些信息存儲在所說的高速緩沖器時,存儲有用數(shù)據(jù),表征通過預(yù)取操作預(yù)取的信息有用的步驟,以及根據(jù)所說的有用數(shù)據(jù),有條件地執(zhí)行預(yù)取操作的步驟。
14.按照權(quán)利要求1的方法,其中第二路經(jīng)數(shù)據(jù)同轉(zhuǎn)移指令相關(guān),并且其中的第二路經(jīng)數(shù)據(jù)包括一屏蔽,表示至少一個預(yù)測的執(zhí)行路經(jīng)跟隨在相關(guān)轉(zhuǎn)移指令之后。
15.按照權(quán)利要求14的方法,其中預(yù)取觸發(fā)指令包括指令流中的一個轉(zhuǎn)移指令,及其中第一路經(jīng)數(shù)據(jù)包含一屏蔽,以表示至少一條執(zhí)行路經(jīng),從預(yù)取觸發(fā)指令到達使用由預(yù)取觸發(fā)指令預(yù)取的信息的指令。
16.按照權(quán)利要求1的方法,其中的預(yù)取操作預(yù)取至少一條指令。
17.按照權(quán)利要求1的方法,其中的預(yù)取操作預(yù)取被指令流中至少一條指令操作的數(shù)據(jù)。
18.在一包含邏輯上連接在存儲器和至少一個處理器單元之間的高速緩沖器的數(shù)據(jù)處理系統(tǒng)中,一種在由至少一個處理器單元處理指令流時用以把預(yù)取信息送入高速緩沖器的裝置,該裝置包括產(chǎn)生第一路經(jīng)數(shù)據(jù)的預(yù)取邏輯,其中第一路經(jīng)數(shù)據(jù)表示一包含預(yù)取觸發(fā)指令的第一路經(jīng)和一使用通過與預(yù)取觸發(fā)指令相關(guān)的預(yù)取操作預(yù)取的信息的指令;產(chǎn)生第二路經(jīng)數(shù)據(jù)的轉(zhuǎn)移路經(jīng)預(yù)測邏輯,其中第二路經(jīng)數(shù)據(jù)表示預(yù)測的第二執(zhí)行路經(jīng);及預(yù)取執(zhí)行邏輯以根據(jù)比較第一路經(jīng)數(shù)據(jù)和第二路經(jīng)數(shù)據(jù)的比較操作,判斷是否第一路經(jīng)在預(yù)測的第二路經(jīng)中,有條件地執(zhí)行預(yù)取操作。
19.按照權(quán)利要求18的裝置,其中第一路經(jīng)數(shù)據(jù)從第一入口表輸出,其中的每個入口標識1)包含一給定的預(yù)取觸發(fā)指令的至少一個路經(jīng),及2)與給定的預(yù)取觸發(fā)操作相關(guān)的一給定預(yù)取操作。
20.按照權(quán)利要求19的裝置,其中第一表的每個入口標識至少一個路經(jīng),它包含具有地址域,屏蔽域和位域給定的預(yù)取觸發(fā)指令,其中的地址域標識給定的預(yù)取觸發(fā)指令,屏蔽域標識關(guān)于跟在預(yù)取觸發(fā)指令之后預(yù)定數(shù)目的連續(xù)轉(zhuǎn)移指令的轉(zhuǎn)移動作,而位域標識了在屏蔽域中一些相應(yīng)的轉(zhuǎn)移動作。
21.按照權(quán)利要求19的裝置,其中第二路經(jīng)數(shù)據(jù)從第二個入口表輸出,其中的每一個入口標識了至少一個預(yù)測的執(zhí)行路經(jīng)。
22.按照權(quán)利要求21的裝置,其中第二個表的每個入口,標識至少一個帶有地址域和屏蔽域的預(yù)測的執(zhí)行路經(jīng),其中的地址域標識給定的指令,而屏蔽域標識關(guān)于跟在預(yù)取觸發(fā)指令之后預(yù)定數(shù)目的連續(xù)轉(zhuǎn)移指令的轉(zhuǎn)移動作。
23.按照權(quán)利要求18的裝置,其中的預(yù)取觸發(fā)指令根據(jù)前面指令流的執(zhí)行而得到。
24.按照權(quán)利要求23的裝置,其中預(yù)取操作與高速緩沖器未命中的預(yù)取觸發(fā)指令相關(guān),其中被所說指令使用的信息從高速緩沖器請求而不能在高速緩沖器中訪問。
25.按照權(quán)利要求24的裝置,還包括標識指令流中領(lǐng)先于未命中前預(yù)定數(shù)目轉(zhuǎn)移指令的特定轉(zhuǎn)移指令的裝置,而且其中同預(yù)取操作相關(guān)的預(yù)取觸發(fā)指令是特定的轉(zhuǎn)移指令。
26.按照權(quán)利要求25的裝置,其中的預(yù)取觸發(fā)指令是基于指令流的執(zhí)行而動態(tài)地被調(diào)整。
27.按照權(quán)利要求26的裝置,還包括存儲時效性數(shù)據(jù)的裝置,當(dāng)所說指令使用的這種信息是從高速緩沖器請求的時,以表征預(yù)取操作預(yù)取的信息的可存取性。
28.按照權(quán)利要求27的裝置,其中時效性數(shù)據(jù)編碼第一狀態(tài)和第二狀態(tài)之一,其中的第一狀態(tài)表示由預(yù)取操作預(yù)取的這些信息沒有完全加載到高速緩沖器,其中的第二狀態(tài)表示由預(yù)取操作預(yù)取的這些信息完全加載到高速緩沖器。
29.按照權(quán)利要求28的裝置,還包括第一個入口表,其中的每個入口標識1)至少一個路經(jīng)從給定的預(yù)取觸發(fā)指令啟動,及2)一給定的預(yù)取操作與給定的預(yù)取觸發(fā)操作相關(guān);一種為所說信息響應(yīng)向高速緩沖器對的請求用以判斷是否時效性數(shù)據(jù)編碼所說的第一狀態(tài)的裝置;及一種在判定時效性數(shù)據(jù)編碼了所說的第一狀態(tài)時用于進行以下操作的裝置標識指令流中給出的轉(zhuǎn)移指令,這些指令領(lǐng)先于與向高速緩沖器發(fā)出對所說信息請求的預(yù)取操作有關(guān)的預(yù)取觸發(fā)指令,更新第一路經(jīng)數(shù)據(jù),以表示一新的第一路經(jīng)從給定的轉(zhuǎn)移指令到使用所說信息的指令,及在第一表中存儲一入口,以標識1)新的第一路經(jīng),及2)向高速緩沖器發(fā)出請求所說信息的預(yù)取操作。
30.按照權(quán)利要求18的裝置,還包括用于當(dāng)這些信息存儲在所說的高速緩沖器時存儲表征通過預(yù)取操作預(yù)取的信息有用的有用數(shù)據(jù)的裝置,其中根據(jù)所說的有用數(shù)據(jù),有條件地執(zhí)行預(yù)取操作。
31.按照權(quán)利要求18的裝置,其中第二路經(jīng)數(shù)據(jù)同轉(zhuǎn)移指令相關(guān),并且其中的第二路經(jīng)數(shù)據(jù)包括一屏蔽,表示至少一個預(yù)測的執(zhí)行路經(jīng)跟隨在相關(guān)轉(zhuǎn)移指令之后。
32.按照權(quán)利要求31的裝置,其中預(yù)取觸發(fā)指令包括指令流中的一個轉(zhuǎn)移指令,及其中第一路經(jīng)數(shù)據(jù)包含一屏蔽,以表示至少一條執(zhí)行路經(jīng),從預(yù)取觸發(fā)指令到達使用由預(yù)取觸發(fā)指令預(yù)取的信息的指令。
33.按照權(quán)利要求18的裝置,其中的預(yù)取操作預(yù)取至少一條指令。
34.按照權(quán)利要求18的裝置,其中的預(yù)取操作預(yù)取被指令流中至少一條指令操作的數(shù)據(jù)。
全文摘要
本發(fā)明的機制采用轉(zhuǎn)移指令作為預(yù)取觸發(fā),把預(yù)取的指令和數(shù)據(jù)送到高速緩沖器。如果在轉(zhuǎn)移指令之后預(yù)測的執(zhí)行路經(jīng)匹配前面經(jīng)歷的執(zhí)行路經(jīng),預(yù)取被起動。執(zhí)行路經(jīng)的匹配用轉(zhuǎn)移歷史隊列來確定,隊列中記錄了程序中各轉(zhuǎn)移的轉(zhuǎn)移結(jié)果。對該隊列中的每個轉(zhuǎn)移,一轉(zhuǎn)移歷史屏蔽記錄下面N個轉(zhuǎn)移結(jié)果及當(dāng)作跟隨轉(zhuǎn)移指令之后的執(zhí)行路經(jīng)的編碼。轉(zhuǎn)移指令同屏蔽一起同預(yù)取地址(指令或數(shù)據(jù)地址)相關(guān),并且在將來當(dāng)轉(zhuǎn)移再次被執(zhí)行時,用來觸發(fā)預(yù)取。
文檔編號G06F9/40GK1306246SQ0013505
公開日2001年8月1日 申請日期2000年12月7日 優(yōu)先權(quán)日1999年12月10日
發(fā)明者托馬斯·R.·普扎克, 艾倫·M.·哈特斯坦, 馬克·查尼, 丹尼爾·A.·普雷納, 彼得·H.·奧登, 維加亞拉克什米·斯里尼發(fā)桑 申請人:國際商業(yè)機器公司