專利名稱:利用第二級分支預(yù)測表的分支預(yù)測的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)系統(tǒng),更具體地說,涉及使用第一級和第二級分支預(yù)測表進(jìn)行分支預(yù)測的處理器。
背景技術(shù):
先進(jìn)的處理器采用流水(管道)線技術(shù)高速地執(zhí)行指令?;谶@樣的處理器,整個(gè)機(jī)器組織成包括幾個(gè)硬件級聯(lián)級的多流水線。指令處理分為一系列的操作,且由相應(yīng)的流水線級(管道級)的硬件來執(zhí)行各種操作。來自幾條指令的獨(dú)立操作可由不同的流水線級同時(shí)進(jìn)行,以增加處理器的指令通過量。當(dāng)一個(gè)流水線處理器在每個(gè)流水線級包括多個(gè)執(zhí)行資源時(shí),該處理器的指令通過量就能超過每個(gè)時(shí)鐘周期一條指令。為了充分利用這個(gè)指令執(zhí)行能力,必須由正確的執(zhí)行路徑向該處理器的執(zhí)行資源提供足夠的指令。
在典型的計(jì)算機(jī)系統(tǒng)中,指令指針(IP)指示處理器從程序代碼的一條指令到下一條指令。一條指令可以正常的程序代碼順序指示這個(gè)IP到下一條指令,或者指示該IP跳過部分程序代碼并繼續(xù)執(zhí)行非正常順序的指令。這個(gè)使處理器或者按順序連續(xù)執(zhí)行下一條指令或者“轉(zhuǎn)移”到一個(gè)不同的非順序的指令的指令稱為分支指令。
例如,字處理器在進(jìn)行拼寫檢查時(shí),執(zhí)行軟件指令來確認(rèn)正確地拼寫了每個(gè)字。只要字拼寫正確,指令便順序地執(zhí)行。然而一旦發(fā)現(xiàn)了拼寫有誤的字,分支指令便指示IP轉(zhuǎn)向一個(gè)子程序,后者提醒用戶拼字錯(cuò)誤。然后,處理器執(zhí)行該子程序。
分支指令向保持流水線充滿來自正確執(zhí)行路徑的指令這一要求提出了挑戰(zhàn)。如果執(zhí)行分支指令并滿足分支條件,處理器的控制流就跳向新的代碼序列,來自該新的代碼序列的指令轉(zhuǎn)向流水線。分支執(zhí)行一般出現(xiàn)在流水線的后端,而在流水線的前端取指令。如果獲取指令依賴分支執(zhí)行來決定正確的執(zhí)行路徑,則在決定分支條件前,處理器的流水線可能充滿來自錯(cuò)誤執(zhí)行路徑的指令。因此,必須從流水線中清洗(flush)這些指令,使得獲取來自正確執(zhí)行路徑的指令時(shí)這些受到影響的流水線級的資源保持空閑。空閑的流水線級稱為流水線泡(bubble),因?yàn)橹钡剿鼈儽粊碜哉_執(zhí)行路徑的指令填充時(shí)才提供有用的輸出。
先進(jìn)的處理器在它們流水線的前端加入分支預(yù)測模塊以減少流水線泡的數(shù)量。當(dāng)分支指令進(jìn)入到流水線的前端時(shí),分支預(yù)測模塊預(yù)測在流水線的后端執(zhí)行過程中是否產(chǎn)生該分支指令。如果預(yù)測產(chǎn)生分支(非順序執(zhí)行指令),則分支預(yù)測模塊就向指令提取模塊提供分支目標(biāo)地址,通過設(shè)置與含有分支程序代碼的第一指令的地址相同的IP地址來重新指示IP。含有分支代碼的所述第一指令的地址稱為“目標(biāo)地址”。同樣位于流水線前端的提取模塊從目標(biāo)地址開始取指令。另一方面,如果分支預(yù)測器預(yù)測不產(chǎn)生分支(順序指令執(zhí)行),分支預(yù)測器就遞增IP地址,以便IP以正常程序代碼順序指向下一條指令。當(dāng)分支執(zhí)行出現(xiàn)在流水線的后端時(shí),處理器能夠確認(rèn)前端所做的預(yù)測是否正確。如果不正確,流水線就被清洗。分支預(yù)測準(zhǔn)確性越高,流水線泡和清洗數(shù)就越少。
傳統(tǒng)的分支預(yù)測模塊采用分支目標(biāo)緩沖器(BTB)來存儲(chǔ)預(yù)測入口,后者包含諸如是否產(chǎn)生分支的信息以及產(chǎn)生分支時(shí)可能的目標(biāo)地址。這些分支預(yù)測入口與含有分支指令的IP地址相聯(lián)系。對每一個(gè)在分支預(yù)測表中被跟蹤的IP地址,其有關(guān)的分支預(yù)測入口包含IP地址以及有助于預(yù)測將來是否產(chǎn)生分支的歷史信息。然而,即使是在BTB中尋找指令、確定是否產(chǎn)生分支以及在已做預(yù)測的基礎(chǔ)上向取指模塊提供目標(biāo)地址這樣的過程也會(huì)在使處理器重轉(zhuǎn)向(resteer)目標(biāo)地址時(shí)引起延遲。該延遲允許來自錯(cuò)誤執(zhí)行路徑的指令進(jìn)入并沿流水線傳播。由于這些指令沒有按預(yù)測的執(zhí)行路經(jīng)加到正向進(jìn)程,在清洗它們時(shí)它們就會(huì)在流水線上形成“泡”。更準(zhǔn)確且更完備的分支預(yù)測算法(用更大的分支表)需要更長的時(shí)間來完成并會(huì)在重轉(zhuǎn)向過程中產(chǎn)生更大的延遲。重轉(zhuǎn)向流水線需要的時(shí)鐘周期數(shù)越大,在流水線中產(chǎn)生的泡數(shù)就越多。因此,在進(jìn)入分支預(yù)測結(jié)構(gòu)的速度與這些結(jié)構(gòu)中內(nèi)容的大小和準(zhǔn)確性之間存在折中。
由于速度和費(fèi)用的原因,現(xiàn)代處理器常限制所采用的BTB的容量。特別是在大工作負(fù)荷時(shí),這降低了分支檢測和預(yù)測的準(zhǔn)確性。假如BTB的容量較小,則某個(gè)新分支預(yù)測入口有時(shí)必須重寫某個(gè)舊分支預(yù)測入口。如果與重寫的分支預(yù)測入口相聯(lián)系的分支指令之后由處理器重執(zhí)行,則沒有歷史信息來幫助分支預(yù)測器預(yù)測是否應(yīng)該產(chǎn)生分支。結(jié)果,分支預(yù)測準(zhǔn)確性下降,降低了處理器的性能。隨著軟件應(yīng)用程序規(guī)模增大,這些應(yīng)用程序中分支指令數(shù)目增加,分支預(yù)測表的有限容量就成為一個(gè)重要的問題。因此,有必要提供一種解決方案為最頻繁出現(xiàn)的分支子集(具有高局部性的那些)產(chǎn)生小的等待時(shí)間并為整個(gè)工作集提供有意義的預(yù)測。
發(fā)明概述描述了一種分支預(yù)測器。第一級分支預(yù)測表與IP發(fā)生器連接以存儲(chǔ)分支預(yù)測入口。第二級分支預(yù)測表也與IP發(fā)生器連接以存儲(chǔ)更多分支預(yù)測入口。
按照本發(fā)明實(shí)施例,盡管降低了速度,然而可以發(fā)現(xiàn)兩級分支預(yù)測結(jié)構(gòu)充分地將高速(小的等待時(shí)間)分支預(yù)測和分支的最高局部性的重轉(zhuǎn)向的益處與全工作集的全局高準(zhǔn)確分支檢測和預(yù)測結(jié)合在一起。這在沒有顯著增加小片尺寸情況下也可完成。
通過附圖和以下的詳細(xì)描述,本發(fā)明的其它特征和優(yōu)點(diǎn)將一清二楚。
附圖簡介通過附圖中的示例而非限制來說明本發(fā)明,圖中用相同標(biāo)號表示類似的單元。附圖中
圖1是一個(gè)表示本發(fā)明的方法的流程圖;圖2表示按照本發(fā)明實(shí)施例的分支預(yù)測流水線;和圖3表示圖2的分支預(yù)測器。
詳細(xì)描述描述了一種用于帶有第一級和第二級分支預(yù)測表的處理器的分支預(yù)測器。IP發(fā)生器產(chǎn)生初始指令指針(IP)地址。為與初始IP地址相關(guān)聯(lián)的分支預(yù)測入口搜索第一級(L1)BPT(分支預(yù)測表)和第二級(L2)BPT。對本發(fā)明的一個(gè)實(shí)施例,L1 BPT是相聯(lián)的(即完全相聯(lián)或多路集相聯(lián))而L2 BPT則是直接映射。
因?yàn)長1 BPT是關(guān)聯(lián)的,所以分支預(yù)測入口加上標(biāo)記并將這些標(biāo)記與預(yù)測信息一起存于L1 BPT中。未對直接映射的L2 BPT中的分支預(yù)測入口作標(biāo)記,故L2 BPT中只存有分支預(yù)測信息。因?yàn)長1 BPT中的分支預(yù)測入口大于L2 BPT中的分支預(yù)測入口,在等量空間中,L2 BPT可比L1 BPT有更多的分支預(yù)測入口。因此盡管L1 BPT可能比L2 BPT更快更準(zhǔn)確,然而L2 BPT作為L1 BPT的“備份”,使得可以較小增加處理器尺寸來存儲(chǔ)附加分支預(yù)測信息。由于在一個(gè)處理器中既包含L1 BPT又包含L2 BPT,則無須增加太多硬件成本便可同時(shí)提高分支預(yù)測的準(zhǔn)確性和整體速度。另外,L2 BPT容量的少量增加還可提高整體存儲(chǔ)容量可以容納具有大工作集的程序中的大量分支。
如果在L1 BPT中找到與初始IP地址有關(guān)的分支預(yù)測入口(稱在L1 BPT中“命中(hit)”),則使用與入口有關(guān)的分支預(yù)測信息來預(yù)測產(chǎn)生分支還是不產(chǎn)生分支(即預(yù)測后來的IP地址)。如果在L1 BPT中沒發(fā)現(xiàn)與初始IP地址有關(guān)的分支預(yù)測入口(稱在L1 BPT中“未命中(miss)”),則對與IP地址有關(guān)的指令進(jìn)行解碼來確定它是否為分支指令。如果是分支指令,則使用來自L2 BPT的分支預(yù)測信息來預(yù)測產(chǎn)生分支還是不產(chǎn)生分支。
對本發(fā)明的另一個(gè)實(shí)施例,軟件給處理器提供提示以幫助分支預(yù)測。對這個(gè)實(shí)施例,用這些提示確定是否使用L2 BPT的分支預(yù)測信息或在軟件自身中編碼的分支預(yù)測信息來預(yù)測產(chǎn)生分支還是不產(chǎn)生分支。
可以發(fā)現(xiàn)這樣的兩層預(yù)測器設(shè)計(jì)對那些被指派執(zhí)行大型應(yīng)用程序任務(wù)的處理器特別有用,例如那些在服務(wù)器和工作站上運(yùn)行的大型應(yīng)用程序。下面更詳細(xì)描述本發(fā)明的實(shí)施例,包括各種配置和實(shí)現(xiàn)。
圖1是表示本發(fā)明方法的流程圖。在步驟205,搜索L1和L2分支預(yù)測表以查找與初始IP地址有關(guān)的分支預(yù)測入口。L1 BPT是做了標(biāo)記的關(guān)聯(lián)表,而L2 BPT是未做標(biāo)記的直接映射表。對一個(gè)實(shí)施例,L1 BPT存儲(chǔ)的分支預(yù)測入口少于L2 BPT存儲(chǔ)的分支預(yù)測入口,但L1 BPT比L2 BPT快且具有比L2 BPT更高的分支預(yù)測準(zhǔn)確性。因?yàn)長1 BPT存儲(chǔ)較少的分支預(yù)測入口,因而L1 BPT只存儲(chǔ)那些最近使用的、并因此最有可能在不久的將來再次使用的分支預(yù)測入口。
在圖1步驟210,確定L1 BPT中是否有與初始IP地址有關(guān)的命中。如果L1 BPT中有一個(gè)命中,則隨后在步驟215確定L1 BPT中與初始IP地址有關(guān)的分支預(yù)測信息是否表明應(yīng)該預(yù)測為產(chǎn)生分支。如果預(yù)測為產(chǎn)生分支,則在步驟220將后續(xù)IP地址重轉(zhuǎn)向到TAC或RSB的地址。相反,如果預(yù)為不產(chǎn)生分支,則在步驟225不發(fā)送重轉(zhuǎn)向信號。
如果在L1 BPT中沒有命中(在L1 BPT中未命中),則在圖1的步驟230中,解碼器對至少部分指令進(jìn)行解碼以確定與初始IP地址有關(guān)的指令是否為分支指令。如果確定指令為分支指令,則在步驟230中,解碼器還對目標(biāo)地址進(jìn)行解碼并判斷指令是否為返回指令。對于由分支指令把分支預(yù)測提示提供給分支預(yù)測器的實(shí)施例,在步驟230中解碼器還對該提示信息進(jìn)行解碼。
如果在圖1的步驟235中確定所述指令不是分支指令,則在步驟240不發(fā)送重轉(zhuǎn)向信號。如果確定所述指令是分支指令,則下一步在步驟250確定與分支指令有關(guān)的命中是否為靜態(tài)的。應(yīng)該指出,對于本發(fā)明的不進(jìn)行提示的另一個(gè)實(shí)施例,取消了步驟250和260,且如果指令被確定為分支,則流程從步驟235跳到255。
如果與分支指令有關(guān)的提示不是靜態(tài)的(即是動(dòng)態(tài)的),則下一步在圖1的步驟255中確定在L2 BPT中與初始IP地址有關(guān)的分支預(yù)測信息是否表明應(yīng)該預(yù)測為產(chǎn)生分支。如果預(yù)測為產(chǎn)生分支,則在步驟265將后續(xù)IP地址重轉(zhuǎn)向,預(yù)測后續(xù)IP為來自TAC,RSB的地址(如果指令被確定為返回指令)、或?yàn)榻獯a器解碼的地址。相反,如果預(yù)測不產(chǎn)生分支,則在步驟240不發(fā)送重轉(zhuǎn)向信號。
相反,如果與分支指令有關(guān)的提示是靜態(tài)的,則接下來在圖1的步驟260確定提示是否表示應(yīng)該預(yù)測為產(chǎn)生分支還是不產(chǎn)生分支。如果提示將產(chǎn)生分支,則流程進(jìn)行到如上所述的步驟265。相反,如果提示將不產(chǎn)生分支,則流程進(jìn)行到如上所述的步驟240。
應(yīng)該指出,按照本發(fā)明的實(shí)施例,圖1的步驟220或225中所做的分支預(yù)測比步驟240或265中所做的分支預(yù)測完成得早。
圖2表示按照本發(fā)明實(shí)施例的分支預(yù)測流水線。按照圖2的流水線,IP復(fù)用器10的輸出端提供初始IP地址給增量器20、第一級(L1)分支預(yù)測器21和第二級(L2)分支預(yù)測器22。增量器20適當(dāng)?shù)剡f增初始地址來產(chǎn)生后續(xù)的IP地址,并在第一流水線級期間把后續(xù)的IP地址送回到IP復(fù)用器10的輸入端。IP增量器20取到初始IP地址并按預(yù)定量進(jìn)行遞增。加到初始IP地址上的預(yù)定量是存儲(chǔ)有正在執(zhí)行的程序代碼的連續(xù)指令或指令組的兩個(gè)連續(xù)存儲(chǔ)器地址之間的差值。
L1分支預(yù)測器21可產(chǎn)生重轉(zhuǎn)向信號并將該信號供給IP控制器11的輸入端。這個(gè)信號表示該后續(xù)IP地址是否與初始IP地址順序。如果L1分支預(yù)測器21向IP控制器11發(fā)送重轉(zhuǎn)向信號,則這表明后續(xù)IP是非順序的,且L1分支預(yù)測器21接著在第二級流水線級期間提供后序IP地址給IP復(fù)用器10的輸入端。
L2分支預(yù)測器22也可產(chǎn)生重轉(zhuǎn)向信號并將這個(gè)信號供給IP控制器11的另一個(gè)輸入端。這個(gè)信號同樣表示后續(xù)IP地址是否與初始IP地址順序。如果L2分支預(yù)測器22向IP控制器11發(fā)送重轉(zhuǎn)向信號,這表示后續(xù)IP是非順序的,且L2分支預(yù)測器22接著在第三級流水線級期間提供后續(xù)IP地址給IP復(fù)用器10的輸入端。
然后,IP控制器11基于來自L2分支預(yù)測器22和L1分支預(yù)測器21的信號來確定IP復(fù)用器10的三個(gè)輸入中的哪一個(gè)可傳到該復(fù)用器的輸出端。如果L1分支預(yù)測器21和L2分支預(yù)測器22都沒有發(fā)送重轉(zhuǎn)向信號,則選擇來自增量器20遞增的IP地址作為復(fù)用器10輸出的后續(xù)IP地址。如果L1分支預(yù)測器21發(fā)送重轉(zhuǎn)向信號,則選擇從L1分支預(yù)測器21輸出的IP地址作為復(fù)用器10輸出的后續(xù)IP地址。如果L2分支預(yù)測器22發(fā)送重轉(zhuǎn)向信號,則選擇從L2分支預(yù)測器22輸出的IP地址作為復(fù)用器10輸出的后續(xù)IP地址。
應(yīng)該指出,這里使用的術(shù)語“初始IP地址”表示任意用做預(yù)測后續(xù)IP地址的參考點(diǎn)的IP地址?!俺跏糏P地址”不意味著局限于與某具體軟件應(yīng)用程序的程序代碼第一行有關(guān)的IP地址。初始地址可以是任何與應(yīng)用程序的程序代碼任意一行有關(guān)的IP地址。
圖3表示按照本發(fā)明實(shí)施例的圖2的L1分支預(yù)測器21和L2分支預(yù)測器22。圖3中的分支預(yù)測器可以完全包含在和處理器相同的半導(dǎo)體襯底上,分支預(yù)測器為該處理器進(jìn)行分支預(yù)測。對于另一個(gè)實(shí)施例,分支預(yù)測器的一個(gè)或多個(gè)功能塊位于單獨(dú)的半導(dǎo)體襯底上。例如,為減少處理器的總體尺寸,L2 BPT102可置于單獨(dú)的半導(dǎo)體襯底上。
L1 BPT100是一個(gè)包括加有地址標(biāo)記的分支預(yù)測入口的關(guān)聯(lián)表。每個(gè)地址標(biāo)記都與包含分支指令的IP地址有關(guān)。在L1 BPT100中的每個(gè)分支預(yù)測入口除了包括其有關(guān)的地址標(biāo)記外還包括分支預(yù)測信息。分支預(yù)測器用這個(gè)分支預(yù)測信息來預(yù)測是否產(chǎn)生分支。存儲(chǔ)在L1 BPT100中的分支預(yù)測信息的具體類型相應(yīng)于可由分支預(yù)測器執(zhí)行的大量分支預(yù)測算法類型中的任何一種。其中大部分算法為本技術(shù)領(lǐng)域的技術(shù)人員所了解。
例如,按照本發(fā)明的一個(gè)實(shí)施例,局部歷史預(yù)測算法連同L1 BPT100一起完成。對另一個(gè)實(shí)施例,在L1 BPT100中完成全局歷史分支預(yù)測算法或一個(gè)計(jì)數(shù)器預(yù)測器(即2位可逆計(jì)數(shù)器,也稱為雙(bimodal)分支預(yù)測器)。對另一實(shí)施例,L1 BPT100被分成兩個(gè)或更多單獨(dú)的分支預(yù)測表,每個(gè)表完成不同的分支預(yù)測程序。于是,選擇器電路確定哪種算法為具體例子提供最準(zhǔn)確的預(yù)測并選適合的表。
對于本發(fā)明的一個(gè)實(shí)施例,圖3的L1 BPT100是多路組相聯(lián)。對于本發(fā)明的另一個(gè)實(shí)施例,L1 BPT100是完全相聯(lián)。為提高L1 BPT100中搜索分支預(yù)測入口的速度,保持表較小,使之大約有512到2K的分支預(yù)測入口的存儲(chǔ)容量。
初始IP地址提供給圖3的L1分支預(yù)測器21的輸入端。這個(gè)初始IP地址被用來搜索L1 BPT100及目標(biāo)地址高速緩沖存儲(chǔ)器(TAC)101。如果在L1 BPT中發(fā)現(xiàn)所述地址,則命中,且命中信號沿著命中/未命中信號線121發(fā)送到與門144的輸入端。如果L1 BPT100中沒發(fā)現(xiàn)所述地址,則未命中,且未命中信號沿著命中/未命中信號線121發(fā)送出。如果L1 BPT100中有命中,且在L1 BPT100中有關(guān)的入口表示產(chǎn)生分支,則這由沿著產(chǎn)生/不產(chǎn)生信號線122發(fā)送到與門144的另一個(gè)輸入端的產(chǎn)生信號來表示。如果L1 BPT100中有命中,且在L1 BPT100中有關(guān)的入口表示不產(chǎn)生分支,則這由沿著產(chǎn)生/不產(chǎn)生信號線122發(fā)送的不產(chǎn)生信號來表示。如果在L1 BPT100中有產(chǎn)生的命中,且L1 BPT還表示分支是返回,則由沿著返回/不返回信號線143發(fā)送到復(fù)用器106的控制輸入端的返回信號表示。如果在L1 BPT100中有產(chǎn)生的命中,且L1 BPT表示分支不是返回,則由沿著返回/不返回信號線143發(fā)送的不返回信號組來表示。
如果圖3的L1 BPT100中有命中,且L1 BPT表示產(chǎn)生分支,則與門144輸出重轉(zhuǎn)向信號給IP控制器11。如果在L1 BPT100中有未命中或在L1 BPT中有未產(chǎn)生命中,則與門144不輸出重轉(zhuǎn)向信號。如果與門144輸出重轉(zhuǎn)向信號,則IP地址也從復(fù)用器106輸出。返回/不返回信號線143確定復(fù)用器106的輸出。如果信號線143表示分支是返回指令,則來自與復(fù)用器106輸入端相連的返回堆棧緩沖器的返回地址被傳送到復(fù)用器106的輸出端,且隨后被傳送到IP復(fù)用器10。如果信號線143表示分支不是返回指令(對L1 BPT100中產(chǎn)生的命中),則來自通過目標(biāo)總線123與復(fù)用器106的其它輸入端相連的TAC101的目標(biāo)地址被傳送到復(fù)用器106的輸出端,且隨后被傳送到IP復(fù)用器10。另外,在TAC101中發(fā)現(xiàn)的目標(biāo)地址與命中/未命中信號一起,也提供給L2分支預(yù)測器22的復(fù)用器109的一個(gè)輸入端,如下所述。
圖3的L2 BPT102是一個(gè)直接映射表,該表包括包含沒有地址標(biāo)記的分支預(yù)測信息的分支預(yù)測入口。這個(gè)分支預(yù)測信息被分支預(yù)測器用來預(yù)測是否將產(chǎn)生分支。存于L2 BPT102中的分支預(yù)測信息的具體類型相應(yīng)于大量分支預(yù)測算法類型中的任意一種,這些分支預(yù)測算法可由分支預(yù)測器執(zhí)行,其中許多為本領(lǐng)域的技術(shù)人員所了解。上面結(jié)合L1 BPT100來描述這些分支預(yù)測算法中的某些分支預(yù)測算法。L2 BPT102可以執(zhí)行這些算法的任意一種或這些算法的任何組合,而與L1 BPT100所執(zhí)行的算法類型無關(guān)。
特別是從成本角度看,圖3的L2 BPT102中執(zhí)行的分支預(yù)測算法占據(jù)小量空間是有利的。因此,根據(jù)本發(fā)明的一個(gè)實(shí)施例,L2 BPT102執(zhí)行兩比特計(jì)數(shù)器算法作為其分支預(yù)測方法。盡管兩比特計(jì)數(shù)器算法可能不像例如在L1 BPT100中執(zhí)行的局部或全局分支預(yù)測算法那樣準(zhǔn)確,但使用兩比特計(jì)數(shù)器算法的分支預(yù)測表使得每個(gè)分支預(yù)測入口僅需要兩比特存儲(chǔ)空間。執(zhí)行或者局部或者全局分支預(yù)測算法的分支預(yù)測表使得每個(gè)分支預(yù)測入口可能需要多于兩比特存儲(chǔ)空間。通過使用未標(biāo)記的分支預(yù)測入口和兩比特計(jì)數(shù)器算法,L2 BPT102能存儲(chǔ)大約4倍到8倍于或更多于L1 BPT100在大約相同的空間中儲(chǔ)存的分支預(yù)測入口數(shù)。這樣,對本發(fā)明的一個(gè)實(shí)施例,L2 BPT102具有較大的約2K到4K或更多分支入口的存儲(chǔ)容量。對于L2 BPT未被標(biāo)記的一個(gè)實(shí)施例,沒有有關(guān)靜態(tài)提示的分支(下面更詳細(xì)地描述)可以在退役(retirement)時(shí)更新L2 BPT。
從圖3的L2 BPT102讀取與初始IP地址有關(guān)的分支預(yù)測入口中存儲(chǔ)的分支預(yù)測信息,且利用此信息來計(jì)算是否產(chǎn)生分支預(yù)測。根據(jù)分支預(yù)測,將產(chǎn)生或不產(chǎn)生信號沿t/n線126發(fā)送給復(fù)用器107的輸入端。對L2 BPT102是直接映射的本發(fā)明實(shí)施例,在這個(gè)表中總有命中。這意味著這些命中的某一百分比可能將一個(gè)IP地址與另外的IP地址的分支預(yù)測信息相聯(lián)系。避免這個(gè)問題的一種方法是在L2 BPT102中儲(chǔ)存地址標(biāo)記,并將這些標(biāo)記與輸入IP地址標(biāo)記進(jìn)行比較。然而,可以發(fā)現(xiàn),通過不在L2 BPT102中存儲(chǔ)標(biāo)記信息而減小表的大小的成本收益比通過存儲(chǔ)標(biāo)記來獲得提高的分支預(yù)測信息準(zhǔn)確性更有價(jià)值。
利用來自圖3的IP復(fù)用器10的初始IP地址搜索輸入指令緩沖器103,并將有關(guān)的指令提供給指令解碼器104。對本發(fā)明的一個(gè)實(shí)施例,解碼器104部分或完全地對指令進(jìn)行解碼來確定該指令是否為分支指令,并且,如果是,則解碼器再確定目標(biāo)地址并確定該指令是否為返回。根據(jù)指令是否為分支(或返回),通過b/nb線129將合適的信號發(fā)送給與門108的輸入端。把目標(biāo)地址130從解碼器104發(fā)送到復(fù)用器109的輸入端。
對于指令中包括分支預(yù)測提示的實(shí)施例,圖3的解碼器104還確定分支預(yù)測提示是靜態(tài)還是動(dòng)態(tài),并且,如果是靜態(tài),解碼器確定產(chǎn)生還是不產(chǎn)生提示。表示提示是靜態(tài)還是動(dòng)態(tài)的信號通過s/d提示線127提供給復(fù)用器107的控制輸入端。通過t/n提示線128把表示提示是產(chǎn)生還是不產(chǎn)生的信號提供給復(fù)用器107的一個(gè)輸入端。靜態(tài)提示向分支預(yù)測器表示不管L2 BPT102中發(fā)現(xiàn)的任何分支預(yù)測信息,有關(guān)的分支指令總是應(yīng)該預(yù)測為產(chǎn)生或是不產(chǎn)生(根據(jù)產(chǎn)生/不產(chǎn)生提示值)。動(dòng)態(tài)提示向分支預(yù)測器表示L2 BPT102中發(fā)現(xiàn)的分支預(yù)測信息應(yīng)用來把分支預(yù)測為產(chǎn)生或是不產(chǎn)生。對于本發(fā)明的另一個(gè)實(shí)施例,包含動(dòng)態(tài)提示的指令還包括在初始執(zhí)行分支指令時(shí)用作分支預(yù)測的產(chǎn)生/不產(chǎn)生提示。此后,儲(chǔ)存在分支預(yù)測表中的分支預(yù)測信息被用來確定該分支指令的后續(xù)分支預(yù)測。
如果通過s/d提示線127提供給圖3中復(fù)用器107的控制輸入端的信號表示提示是動(dòng)態(tài)的,則復(fù)用器選擇通過t/n線126從L2 BPT102來的產(chǎn)生/不產(chǎn)生信號作為其輸出。如果提供給復(fù)用器107的控制輸入端的信號表示提示是靜態(tài)的,則復(fù)用器選擇通過t/n提示線128從解碼器104來的產(chǎn)生/不產(chǎn)生提示信號作為其輸出。對于L2 BPT被標(biāo)記的一個(gè)實(shí)施例,提示是動(dòng)態(tài)的且在L2 BPT中有未命中,仍使用解碼的預(yù)測。對這個(gè)實(shí)施例,來自L2 BPT102的命中/未命中線(或其反向)可以和s/d提示線127(或其反向)相與(或與非),輸出連接到復(fù)用器107的控制輸入端。
如果通過圖3中的b/nb線129提供給與門108輸入端的信號表示與IP地址有關(guān)的指令是分支(或返回)指令并且復(fù)用器107的輸出值表示產(chǎn)生分支,則與門108輸出重轉(zhuǎn)向信號給與門141的輸入端。否則,與門108不輸出重轉(zhuǎn)向信號。與門141的另一個(gè)輸入端是連接通到L1 BPT100的命中/未命中信號線121的反向輸入端。如果與門108的輸出值表示重轉(zhuǎn)向,則與門141便起到阻止重轉(zhuǎn)向信號發(fā)送到IP控制器11,但L1 BPT中有命中。這樣做是因?yàn)榭梢园l(fā)現(xiàn)來自L1 BPT100的前期預(yù)測比來自L2 BPT102的后期預(yù)測更準(zhǔn)確。因此,當(dāng)與門108的輸出值表示再轉(zhuǎn)向且L1 BPT100中有未命中時(shí),與門141便輸出重轉(zhuǎn)向信號給IP控制器11。
圖3中的復(fù)用器109由通過返回/不返回(r/m)信號線140來自指令解碼器104的返回/不返回信號和通過命中/未命中(h/m)信號線150的TAC101的命中/未命中信號控制。指令解碼器104為復(fù)用器109選擇合適的輸出。例如,如果n/nr信號線140表示指令是返回指令,則來自返回堆棧緩沖器(RSB)142的返回地址(提供給L1分支預(yù)測器21相同的RSB輸出值)被傳送給復(fù)用器109的輸出端且隨后被傳送給IP復(fù)用器10,其中返回堆棧緩沖器142連接到復(fù)用器109的輸入端。如果信號線140表示分支不是返回指令(產(chǎn)生分支的),則如果TAC101中有命中(如命中/未命中信號線150指示的)的話,來自TAC101的目標(biāo)地址被傳送給復(fù)用器109的輸出端。否則,由解碼器104解碼的且通過目標(biāo)總線130提供給復(fù)用器109的另一個(gè)輸入端的目標(biāo)地址被傳送給復(fù)用器109的輸出端。
然后把后續(xù)的IP預(yù)測提供給處理器,且由該處理器來執(zhí)行位于那個(gè)地址的指令。稍后確定該預(yù)測正確或不正確。然后可刷新存儲(chǔ)在L1 BPT100和L2 BPT102中的與預(yù)測的分支指令有關(guān)的分支預(yù)測信息以提高下一次執(zhí)行分支指令的準(zhǔn)確性。對于本發(fā)明的一個(gè)實(shí)施例,如果與分支指令有關(guān)的IP地址在L1 BPT中未命中并且分支指令沒提供靜態(tài)提示,則刷新L1 BPT以包括與IP地址有關(guān)的分支預(yù)測入口。
已參考本發(fā)明的具體示例性實(shí)施例描述了本發(fā)明。然而,受益于本發(fā)明公開的人明白,在不超出本發(fā)明更廣的精神和范圍的情況下可對這些實(shí)施例做出各種修改和改變。因此,說明書與附圖用于說明本發(fā)明而不是對本發(fā)明的限制。
權(quán)利要求
1.一種分支預(yù)測器包括連至指令指針(IP)發(fā)生器的第一分支預(yù)測表(BPT),用于存儲(chǔ)多個(gè)分支預(yù)測入口;和連至所述IP發(fā)生器的第二BPT,用于存儲(chǔ)更多個(gè)分支預(yù)測入口。
2.權(quán)利要求1的分支預(yù)測器,其特征在于所述第一BPT存儲(chǔ)已標(biāo)記的分支預(yù)測入口而所述第二BPT存儲(chǔ)未標(biāo)記的分支預(yù)測入口。
3.權(quán)利要求1的分支預(yù)測器,其特征在于還包括連至所述第一BPT的第一電路,如果所述第一BPT表示產(chǎn)生分支,則所述第一電路將IP地址預(yù)測為目標(biāo)地址高速緩沖存儲(chǔ)器中存儲(chǔ)的目標(biāo)地址。
4.權(quán)利要求1的分支預(yù)測器,其特征在于還包括連至所述第二BPT的第二電路,如果所述第二BPT表示產(chǎn)生分支,則所述第二電路將IP地址預(yù)測為目標(biāo)地址高速緩沖存儲(chǔ)器中存儲(chǔ)的目標(biāo)地址。
5.權(quán)利要求1的分支預(yù)測器,其特征在于還包括連至所述第二BPT的第二電路,如果所述第二BPT表示產(chǎn)生分支,則所述第二電路將IP地址預(yù)測為從指令解碼及計(jì)算的目標(biāo)地址。
6.權(quán)利要求1的分支預(yù)測器,其特征在于還包括連至所述第二BPT的第二電路,如果所述第二BPT表示產(chǎn)生分支,則所述第二電路將IP地址預(yù)測為返回堆棧緩沖器中存儲(chǔ)的目標(biāo)地址。
7.權(quán)利要求1的分支預(yù)測器,其特征在于把所述第二BPT的大小做成存儲(chǔ)兩倍于或更多倍于所述第一BPT存儲(chǔ)的分支預(yù)測入口數(shù)。
8.權(quán)利要求1的分支預(yù)測器,其特征在于所述第一BPT執(zhí)行第一種預(yù)測算法而所述第二BPT執(zhí)行不同于所述第一種預(yù)測算法的第二種預(yù)測算法。
9.一種處理器包括指令指針(IP)發(fā)生器;連至所述IP發(fā)生器的第一級分支預(yù)測表(BPT),所述第一級BPT其中存儲(chǔ)有與第一多個(gè)地址有關(guān)的第一多個(gè)分支預(yù)測入口;和連至所述IP發(fā)生器的第二級BPT,所述第二級BPT其中存儲(chǔ)有與第二多個(gè)地址有關(guān)的第二多個(gè)分支預(yù)測入口。
10.權(quán)利要求9的處理器,其特征在于還包括連至所述IP發(fā)生器的目標(biāo)地址高速緩沖存儲(chǔ)器并在其中存儲(chǔ)有與所述第一多個(gè)地址有關(guān)的多個(gè)目標(biāo)地址。
11.權(quán)利要求10的處理器,其特征在于還包括第一電路,如果在所述第一級BPT中有表示產(chǎn)生分支的命中,則所述第一電路從所述目標(biāo)地址高速緩沖存儲(chǔ)器中選擇目標(biāo)地址作為其輸出。
12.權(quán)利要求9的處理器,其特征在于還包括連至所述IP發(fā)生器的存儲(chǔ)器單元中的指令組并在其中存儲(chǔ)有多個(gè)分支提示。
13.權(quán)利要求12的處理器,其特征在于還包括第二電路,如果在所述第二級BPT中的命中表示產(chǎn)生分支并且在所述存儲(chǔ)器單元中的有關(guān)提示是動(dòng)態(tài)的,則所述第二電路從所述存儲(chǔ)器單元中選擇目標(biāo)地址作為其輸出。
14.權(quán)利要求9的處理器,其特征在于在所述第二多個(gè)地址中有像在所述第一多個(gè)地址中兩到四倍之間那么多的地址,并且所述第二多個(gè)地址包含了所述第一多個(gè)地址。
15.一種在處理器中執(zhí)行分支預(yù)測的方法,包括以下步驟搜索第一級分支預(yù)測表(BPT)以查找與指令指針(IP)地址有關(guān)的第一級分支預(yù)測入口;搜索第二級BPT以查找與所述IP地址有關(guān)的第二級分支預(yù)測入口;和如果在所述第一級BPT中發(fā)現(xiàn)所述第一分支預(yù)測入口,則基于所述第一級分支預(yù)測入口進(jìn)行分支預(yù)測,并且,如果在所述第一級BPT中所述第一分支預(yù)測入口未命中,則基于所述第二分支預(yù)測入口進(jìn)行分支預(yù)測。
16.權(quán)利要求15的分支預(yù)測器,其特征在于還包括如下步驟在所述第一級BPT中執(zhí)行第一種分支算法而在所述第二級BPT中執(zhí)行與所述第一種預(yù)測算法不同的第二種預(yù)測算法。
17.權(quán)利要求15的方法,其特征在于如下步驟如果與所述IP地址有關(guān)的指令被解碼并被確為分支指令,則基于所述第二分支預(yù)測入口進(jìn)行分支預(yù)測。
18.權(quán)利要求15的方法,其特征在于搜索所述第一級BPT和搜索所述第二級BPT的所述步驟同時(shí)發(fā)生。
19.權(quán)利要求15的方法,其特征在于搜索所述第一級BPT的所述步驟包括將所述IP地址的地址標(biāo)記與存儲(chǔ)在所述第一級BPT中的地址標(biāo)記進(jìn)行比較的步驟,搜索所述第二級BPT的步驟包括從直接映射表中選擇入口的步驟。
20.一種在給定了初始IP地址的處理器中預(yù)測后繼IP地址的方法,所述方法包括以下步驟如果在第一級分支預(yù)測表(BPT)中與所述初始IP地址有關(guān)的分支預(yù)測入口表示產(chǎn)生分支,則將所述后繼IP地址預(yù)測為來自目標(biāo)地址高速緩沖存儲(chǔ)器的目標(biāo)地址;并且如果在所述第一BPT中沒有與所述初始IP地址有關(guān)的分支預(yù)測入口并且在第二BPT中與所述初始IP地址有關(guān)的分支預(yù)測入口表示產(chǎn)生分支,則將所述后繼IP地址預(yù)測為從與所述初始IP地址有關(guān)的指令解碼的目標(biāo)地址。
21.權(quán)利要求20的方法,其特征在于還包括下述步驟如果在所述第一BPT中與所述初始IP地址有關(guān)的分支預(yù)測入口表示不產(chǎn)生分支,則將所述后繼IP地址預(yù)測為遞增一預(yù)定量的所述初始IP地址。
22.權(quán)利要求20的方法,其特征在于還包括下述步驟如果在所述第一BPT中沒有與所述初始IP地址有關(guān)的分支預(yù)測入口并且在第二BPT中與所述初始IP地址有關(guān)的分支預(yù)測入口表示不產(chǎn)生分支,則將所述后繼IP地址預(yù)測為遞增一預(yù)定量的所述初始IP地址。
23.權(quán)利要求20的方法,其特征在于還包括下述步驟如果在所述第一BPT中沒有與所述初始IP地址有關(guān)的分支預(yù)測入口、第二BPT中與所述初始IP地址有關(guān)的分支預(yù)測入口表示不產(chǎn)生分支,且與所述初始IP地址有關(guān)的指令提示被解碼為動(dòng)態(tài)的,則將所述后繼IP地址預(yù)測為遞增一預(yù)定量的所述初始IP地址。
24.權(quán)利要求20的方法,其特征在于將所述后繼IP地址預(yù)測為來自目標(biāo)地址高速緩沖存儲(chǔ)器中的目標(biāo)地址的所述步驟包括搜索所述第一BPT以查找同與所述初始IP地址有關(guān)的地址標(biāo)記相匹配的地址標(biāo)記的步驟,將所述后繼IP地址預(yù)測為從指令解碼的目標(biāo)地址的所述步驟包括在所述第二BPT中選擇與所述初始IP地址有關(guān)的直接映射入口的步驟。
全文摘要
一種分支預(yù)測器。第一分支預(yù)測表(100)連接到指令指針發(fā)生器(11)以存儲(chǔ)標(biāo)記的分支預(yù)測入口并高速地提供分支預(yù)測。第二分支預(yù)測表(102)也連到指令指針發(fā)生器(11)以存儲(chǔ)未標(biāo)記的分支預(yù)測入口并提供大得多的分支工作集的分支預(yù)測,盡管是以較慢速度進(jìn)行提供。
文檔編號G06F9/38GK1328664SQ99813061
公開日2001年12月26日 申請日期1999年8月26日 優(yōu)先權(quán)日1998年9月8日
發(fā)明者T·Y·葉, H·P·沙朗帕尼 申請人:英特爾公司