使用快速索引樹實現(xiàn)加速分支預(yù)測的系統(tǒng)和方法
【專利摘要】本發(fā)明涉及一種使用快速索引樹實現(xiàn)加速分支預(yù)測的系統(tǒng)和方法。所述系統(tǒng)包括分支目標(biāo)緩沖器、FIT結(jié)構(gòu)以及處理電路,所述處理電路被配置為執(zhí)行一種方法。所述方法包括:確定要在FIT控制下執(zhí)行所述分支目標(biāo)緩沖器的搜索;保存用于所述分支目標(biāo)緩沖器的搜索的當(dāng)前搜索地址;在所保存的當(dāng)前搜索地址處搜索所述分支目標(biāo)緩沖器以獲得分支預(yù)測;根據(jù)從所述FIT結(jié)構(gòu)讀取下一搜索級別的預(yù)測分支的分支跳轉(zhuǎn)和分支不跳轉(zhuǎn)路徑,確定FIT下一搜索地址;根據(jù)所述FIT下一搜索地址,重新索引所述分支目標(biāo)緩沖器的搜索;以及確定在所保存的當(dāng)前搜索地址處的搜索是否查找到所述分支預(yù)測。
【專利說明】使用快速索弓I樹實現(xiàn)加速分支預(yù)測的系統(tǒng)和方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明一般地涉及計算機處理系統(tǒng),更具體地說,涉及用于加速分支預(yù)測的快速索引樹。
【背景技術(shù)】
[0002]計算機處理器中的指令流水線通過使用多個流水線級處理指令,提高指令執(zhí)行吞吐量,其中多個級可以并行處理指令流的不同指令。指令流中的條件分支指令可能在以下情況下導(dǎo)致流水線停頓(pipeline stall):如果處理器進(jìn)行等待直到在流水線中的執(zhí)行級解析條件分支指令,然后在流水線的指令取回級取回下一條指令。分支預(yù)測器可以嘗試猜測是否跳轉(zhuǎn)條件分支。分支預(yù)測器還可以包括分支目標(biāo)預(yù)測,該預(yù)測在通過對指令本身進(jìn)行解碼和執(zhí)行來計算目標(biāo)之前,嘗試猜測跳轉(zhuǎn)的條件或無條件分支的目標(biāo)。分支目標(biāo)可以是基于偏移和/或通過寄存器的間接引用的所計算的地址。
[0003]分支目標(biāo)緩沖器(BTB)可以用于根據(jù)分支指令的地址,預(yù)測所預(yù)測的跳轉(zhuǎn)分支指令的目標(biāo)。預(yù)測分支指令的目標(biāo)可以防止流水線停頓,因為無需等待分支指令到達(dá)流水線的執(zhí)行級以計算分支目標(biāo)地址。通過執(zhí)行分支目標(biāo)預(yù)測,可以在同一周期或分支指令之后的周期執(zhí)行分支的目標(biāo)指令解碼,而不會在分支指令與所預(yù)測的跳轉(zhuǎn)分支指令的目標(biāo)之間具有多個氣泡/空周期??梢园ㄔ贐TB中或單獨實現(xiàn)的其它分支預(yù)測組件包括分支歷史表和模式歷史表。分支歷史表可以根據(jù)分支地址預(yù)測分支的方向(跳轉(zhuǎn)與不跳轉(zhuǎn))。模式歷史表可以根據(jù)遇到的分支模式(導(dǎo)向要預(yù)測的給定分支)而幫助分支的方向預(yù)測。
【發(fā)明內(nèi)容】
[0004]示例性實施例包括一種使用快速索引樹(FIT)實現(xiàn)加速分支預(yù)測的系統(tǒng)。所述系統(tǒng)包括分支目標(biāo)緩沖器、FIT結(jié)構(gòu)以及處理電路,所述處理電路被配置為執(zhí)行一種方法。所述方法包括確定要在FIT控制下執(zhí)行所述分支目標(biāo)緩沖器的搜索。保存用于所述分支目標(biāo)緩沖器的搜索的當(dāng)前搜索地址。在所保存的當(dāng)前搜索地址處搜索所述分支目標(biāo)緩沖器以獲得分支預(yù)測。根據(jù)從所述FIT結(jié)構(gòu)讀取下一搜索級別的預(yù)測分支的分支跳轉(zhuǎn)和分支不跳轉(zhuǎn)路徑,確定FIT下一搜索地址。根據(jù)所述FIT下一搜索地址,重新索引所述分支目標(biāo)緩沖器的搜索。確定在所保存的當(dāng)前搜索地址處的搜索是否查找到所述分支預(yù)測。根據(jù)在所保存的當(dāng)前搜索地址處的搜索查找到所述分支預(yù)測,使用基于所述FIT下一搜索地址設(shè)置的當(dāng)前搜索地址,在FIT控制下繼續(xù)所述分支目標(biāo)緩沖器的搜索。根據(jù)在所保存的當(dāng)前搜索地址處的搜索無法查找到所述分支預(yù)測,使用所保存的當(dāng)前搜索地址重新索引所述分支目標(biāo)緩沖器的搜索,并在沒有FIT控制的情況下執(zhí)行所述分支目標(biāo)緩沖器的搜索。
[0005]另一示例性實施例包括一種使用快速索引樹實現(xiàn)加速分支預(yù)測的計算機實現(xiàn)的方法。所述方法包括由計算機確定要在FIT控制下執(zhí)行分支目標(biāo)緩沖器的搜索。保存用于所述分支目標(biāo)緩沖器的搜索的當(dāng)前搜索地址。所述方法還包括在所保存的當(dāng)前搜索地址處搜索所述分支目標(biāo)緩沖器以獲得分支預(yù)測。所述計算機根據(jù)從FIT結(jié)構(gòu)讀取下一搜索級別的預(yù)測分支的分支跳轉(zhuǎn)和分支不跳轉(zhuǎn)路徑,確定FIT下一搜索地址。根據(jù)所述FIT下一搜索地址,重新索引所述分支目標(biāo)緩沖器的搜索。所述計算機確定在所保存的當(dāng)前搜索地址處的搜索是否查找到所述分支預(yù)測。根據(jù)在所保存的當(dāng)前搜索地址處的搜索查找到所述分支預(yù)測,使用基于所述FIT下一搜索地址設(shè)置的當(dāng)前搜索地址,在FIT控制下繼續(xù)所述分支目標(biāo)緩沖器的搜索。根據(jù)在所保存的當(dāng)前搜索地址處的搜索無法查找到所述分支預(yù)測,使用所保存的當(dāng)前搜索地址重新索引所述分支目標(biāo)緩沖器的搜索,并在沒有FIT控制的情況下執(zhí)行所述分支目標(biāo)緩沖器的搜索。
[0006]其它示例性實施例包括一種使用快速索引樹實現(xiàn)加速分支預(yù)測的計算機程序產(chǎn)品。所述計算機程序產(chǎn)品包括有形存儲介質(zhì),所述有形存儲介質(zhì)可由處理電路讀取并存儲由所述處理電路執(zhí)行以執(zhí)行一種方法的指令。所述方法包括由所述處理電路確定要在FIT控制下執(zhí)行分支目標(biāo)緩沖器的搜索。保存用于所述分支目標(biāo)緩沖器的搜索的當(dāng)前搜索地址。所述方法還包括在所保存的當(dāng)前搜索地址處搜索所述分支目標(biāo)緩沖器以獲得分支預(yù)測。所述處理電路根據(jù)從FIT結(jié)構(gòu)讀取下一搜索級別的預(yù)測分支的分支跳轉(zhuǎn)和分支不跳轉(zhuǎn)路徑,確定FIT下一搜索地址。根據(jù)所述FIT下一搜索地址,重新索引所述分支目標(biāo)緩沖器的搜索。所述處理電路確定在所保存的當(dāng)前搜索地址處的搜索是否查找到所述分支預(yù)測。根據(jù)在所保存的當(dāng)前搜索地址處的搜索查找到所述分支預(yù)測,使用基于所述FIT下一搜索地址設(shè)置的當(dāng)前搜索地址,在FIT控制下繼續(xù)所述分支目標(biāo)緩沖器的搜索。根據(jù)在所保存的當(dāng)前搜索地址處的搜索無法查找到所述分支預(yù)測,使用所保存的當(dāng)前搜索地址重新索引所述分支目標(biāo)緩沖器的搜索,并在沒有FIT控制的情況下執(zhí)行所述分支目標(biāo)緩沖器的搜索。
【專利附圖】
【附圖說明】
[0007]在說明書結(jié)尾處的權(quán)利要求中具體指出并明確要求保護(hù)了被視為實施例的主題。從下面結(jié)合附圖的詳細(xì)描述,各實施例的上述和其它特性和優(yōu)點將變得顯而易見,這些附圖是:
[0008]圖1不出了根據(jù)一個實施例的處理系統(tǒng);
[0009]圖2示出了根據(jù)一個實施例的分支預(yù)測器;
[0010]圖3示出了根據(jù)一個實施例的分支目標(biāo)緩沖器表項;
[0011]圖4示出了根據(jù)一個實施例的各種FIT表項的實例;
[0012]圖5不出了根據(jù)一個實施例的樹表不中的實例FIT ;
[0013]圖6是示出根據(jù)一個實施例的在FIT控制下轉(zhuǎn)換BTB搜索的過程的流程圖;
[0014]圖7是示出根據(jù)一個實施例的當(dāng)BTB搜索未在FIT控制下時進(jìn)行預(yù)測時FIT寫入的過程的流程圖;
[0015]圖8是示出根據(jù)一個實施例的當(dāng)在FIT控制下時進(jìn)行BTB搜索的過程的流程圖;
[0016]圖9是示出根據(jù)一個實施例的FIT搜索的過程的流程圖;
[0017]圖10示出了根據(jù)一個實施例的實例分支預(yù)測流水線時序;
[0018]圖11示出了根據(jù)一個實施例的FIT搜索流水線的實例流水線時序;
[0019]圖12示出了根據(jù)一個實施例的實例FIT BTB指針樹;
[0020]圖13示出了根據(jù)一個實施例的用于選擇性地使FIT結(jié)構(gòu)無效以實現(xiàn)BTB同步的邏輯;
[0021]圖14是示出根據(jù)一個實施例的實現(xiàn)BTB寫入時使FIT無效(類型I)的無效邏輯的過程的流程圖;
[0022]圖15示出了根據(jù)一個實施例的節(jié)點刪除之后的樹表示中的實例FIT ;
[0023]圖16是示出根據(jù)一個實施例的實現(xiàn)意外分支(surprise branch)時使FIT無效(類型2)的無效邏輯的過程的流程圖;
[0024]圖17不出了根據(jù)一個實施例的路徑修改之后的樹表不中的實例FIT ;
[0025]圖18是示出根據(jù)一個實施例的實現(xiàn)FIT替換時使FIT無效(類型3)的無效邏輯的過程的流程圖;
[0026]圖19示出了根據(jù)一個實施例的節(jié)點替換之后的樹表示中的實例FIT ;
[0027]圖20示出了根據(jù)一個實施例的計算系統(tǒng);以及
[0028]圖21示出了根據(jù)一個實施例的計算機可讀介質(zhì)。
【具體實施方式】
[0029]示例性實施例提供了一種用于加速分支預(yù)測的快速索引樹。分支預(yù)測器可以包括分支目標(biāo)緩沖器(BTB)結(jié)構(gòu),以及多個結(jié)構(gòu)和緩沖器以支持分支預(yù)測和分支目標(biāo)預(yù)測??梢圆⑿杏诓ⅹ毩⒂谥噶钊』厮阉鰾TB,以便發(fā)現(xiàn)即將到來的分支,在這種情況下稱為超前分支預(yù)測(lookahead branch prediction)。備選地,可以在取回指令并確定指令邊界的同時或之后訪問BTB,以便為每個遇到的分支指令提供預(yù)測,在這種情況下稱為同步分支預(yù)測。在兩種情況下,BTB的性能優(yōu)勢都取決于從BTB提供的預(yù)測準(zhǔn)確性以及訪問BTB所需的延遲。
[0030]在示例性實施例中,快速索引樹(FIT)可加速分支預(yù)測。FIT是一種表,其保存有關(guān)BTB中的分支子集的信息。FIT中的每個表項表示二進(jìn)制樹中的節(jié)點,所述表項從FIT中的每個分支指定哪個下一預(yù)測分支沿著不跳轉(zhuǎn)路徑,哪個下一預(yù)測分支沿著跳轉(zhuǎn)路徑。FIT通過加速BTB搜索的重新索引,提高超前分支預(yù)測器中的分支預(yù)測吞吐量。
[0031]當(dāng)在BTB中預(yù)測分支子集(在FIT中對這些分支進(jìn)行跟蹤)時,F(xiàn)IT可加速分支預(yù)測吞吐量。還可以節(jié)省電力,因為避免了不必要的BTB順序搜索,并在不需要輔助結(jié)構(gòu)(例如模式歷史表和多目標(biāo)表)時將它們關(guān)閉。
[0032]圖1示出了根據(jù)一個實施例的處理系統(tǒng)100的框圖。處理系統(tǒng)100包括存儲器102、指令高速緩存104、指令取回單元108、分支預(yù)測器118以及處理流水線106。處理系統(tǒng)100可以包括在計算機處理器中,或者以其它方式分布在計算機系統(tǒng)中。指令和數(shù)據(jù)可以存儲在存儲器102中,指令高速緩存104可以訪問存儲器102中的指令并存儲要取回的指令。存儲器102可以包括任意類型的易失性或非易失性存儲器,例如高速緩沖存儲器。存儲器102和指令高速緩存104可以包括多個高速緩存級別。處理系統(tǒng)100中還可以包括數(shù)據(jù)高速緩存(未示出)。
[0033]在圖1中,示出了指令取回單元108和處理流水線106的簡化實例。處理系統(tǒng)100可以還包括多個處理流水線106和指令取回單元108。處理流水線106包括解碼單元110、發(fā)出單元112、執(zhí)行級114以及寫回邏輯116。整個指令取回單元108或分支預(yù)測器118也可以是處理流水線106的一部分。處理流水線106可以包括其它特性,例如錯誤檢查和處理邏輯、一個或多個通過處理流水線106的并行路徑以及所屬【技術(shù)領(lǐng)域】公知的其它特性。雖然圖1中示出了通過處理系統(tǒng)100的正向路徑,但可以在處理系統(tǒng)100的元件之間包括其它反饋路徑和信令路徑。
[0034]指令取回單元108從指令高速緩存104取回指令,以便由解碼單元110進(jìn)一步處理。在一個示例性實施例中,指令取回單元108包括分支預(yù)測器118。備選地,分支預(yù)測器118可以與指令取回單元108分離。指令取回單元108還可以包括其它分支預(yù)測邏輯(未示出)。分支預(yù)測器118是用于實現(xiàn)快速索引樹以獲得加速分支預(yù)測的處理電路的一個實例。
[0035]解碼單元110對指令進(jìn)行解碼并將解碼后的指令、指令各部分或其它解碼后的數(shù)據(jù)傳送到發(fā)出單元112。發(fā)出單元112分析指令或其它數(shù)據(jù),并根據(jù)分析將解碼后的指令、指令各部分或其它數(shù)據(jù)傳輸?shù)綀?zhí)行級114中的一個或多個執(zhí)行單元。執(zhí)行級114執(zhí)行指令。執(zhí)行級114可以包括多個執(zhí)行單元,例如定點執(zhí)行單元、浮點執(zhí)行單元、加載/存儲執(zhí)行單元以及向量執(zhí)行單元。寫回邏輯116將指令執(zhí)行的結(jié)果寫回到目的地資源120。目的地資源120可以是任意類型的資源,包括寄存器、高速緩沖存儲器、其它存儲器、用于與其它設(shè)備通信的I/O電路、其它處理電路,或者任何其它類型的被執(zhí)行指令或數(shù)據(jù)的目的地。
[0036]圖2更詳細(xì)地示出了圖1的分支預(yù)測器118的一個實例。圖2的實例分支預(yù)測器118包括BTB搜索和命中邏輯202、BTB204、FIT內(nèi)容可尋址存儲器(CAM) 206、FIT搜索邏輯208,FIT指針210,FIT BTB指針212以及FIT BTB指針樹214。分支預(yù)測器118還可以包括多個輔助結(jié)構(gòu)以支持分支預(yù)測,例如多目標(biāo)表(MTT)216和模式歷史表(PHT)218。FITCAM206、FIT指針210以及FIT BTB指針212統(tǒng)稱為FIT結(jié)構(gòu)200。FIT結(jié)構(gòu)200的容量小于BTB204。BTB搜索和命中邏輯202在BTB204中搜索BTB表項,而FIT搜索邏輯208在FIT指針210和FIT BTB指針212中搜索FIT表項。盡管分別示出BTB搜索和命中邏輯202以及FIT搜索邏輯208,但應(yīng)當(dāng)理解,它們可以組合為單個邏輯方框或進(jìn)一步細(xì)分。
[0037]BTB204是組相聯(lián)(set associative)的,包括多個BTB表項組。BTB表項的一個通用實例在圖3中被示為BTB表項300 (也稱為表項300),其包括分支地址標(biāo)記302和預(yù)測的目標(biāo)地址306。繼續(xù)參考圖1-3,分支地址標(biāo)記302用于在BTB行310中查找表項,其中圖2的BTB204可以在每個BTB行310中包括多個BTB行312和多個組相聯(lián)BTB表項。每個BTB表項300可以包括其它分支預(yù)測信息(未示出),例如用于指示是否跳轉(zhuǎn)關(guān)聯(lián)分支的分支方向。最近最少使用(LRU)標(biāo)識符可以用于在BTB行310中標(biāo)識最近最少使用的BTB表項300,以便支持BTB204中的替換策略。盡管圖3的實例在每個BTB行310中包括兩個BTB表項300 (列),但其它實施例可以在每個BTB行310中包括不同數(shù)量的BTB表項300,例如四個或更多個。
[0038]在一個示例性實施例中,圖1的指令取回單元108取回的指令的地址被用作起始搜索地址,以便訪問分支預(yù)測器118并預(yù)測分支目標(biāo)地址。當(dāng)查找分支預(yù)測時,讀取BTB204,并且如果BTB204包含具有與搜索地址匹配的分支地址標(biāo)記302的表項,則它可以提供分支預(yù)測。BTB204為BTB搜索和命中邏輯202提供輸入,以便確定是否根據(jù)搜索地址查找到匹配或“命中”。如果發(fā)現(xiàn)匹配,則BTB搜索和命中邏輯202輸出預(yù)測的目標(biāo)地址。當(dāng)預(yù)測不跳轉(zhuǎn)分支時,邏輯202使用與預(yù)測的分支地址按順序排列的新搜索地址重定向它自身。當(dāng)預(yù)測跳轉(zhuǎn)分支時,邏輯202使用是預(yù)測的目標(biāo)地址的新搜索地址重定向它自身。FIT結(jié)構(gòu)200可以用于加速分支預(yù)測,方式為:為BTB搜索和命中邏輯202提供預(yù)測,所述預(yù)測沿著可能的跳轉(zhuǎn)和不跳轉(zhuǎn)分支路徑向前查找。[0039]與BTB204類似,F(xiàn)IT結(jié)構(gòu)200是全相聯(lián)(fulI associative)分支高速緩存,并且可以實現(xiàn)任何替換策略以管理FIT結(jié)構(gòu)200中的FIT表項,例如FIFO或LRU或偽LRU策略。FIT CAM206用于在BTB位置信息(BTB204中的行和列)和FIT位置(FIT指針210和FIT BTB指針212中的行)之間轉(zhuǎn)換。FIT BTB指針212用于在FIT搜索邏輯208進(jìn)行控制之后重定向BTB搜索。FIT結(jié)構(gòu)200中的FIT指針210用于重定向由FIT搜索邏輯208執(zhí)行的FIT搜索。FIT BTB指針樹214保存可能的未來分支預(yù)測的樹,根據(jù)由FIT搜索邏輯208執(zhí)行的FIT搜索,針對多個搜索級別從FIT結(jié)構(gòu)200提取這些未來分支預(yù)測。
[0040]圖4示出了 FIT CAM表項400、FIT指針表項420以及FIT BTB指針表項440的一個實例。FIT CAM表項400是來自圖2的FIT CAM206的實例表項格式,并且包括FIT CAM有效字段402、BTB行索引404以及BTB列索引406。 FIT CAM有效字段402指示關(guān)聯(lián)的FIT表項是否有效,并且可以使用單個位實現(xiàn)。BTB行索引404是對應(yīng)于在FIT表項中跟蹤的分支的BTB同余類的索引。BTB列索引406是對應(yīng)于在FIT表項中跟蹤的分支的BTB列/路。FIT指針表項420是來自圖2的FIT指針210的實例表項格式,并且包括不跳轉(zhuǎn)指針有效字段422、不跳轉(zhuǎn)指針值(FIT索引)424、跳轉(zhuǎn)指針有效字段426以及跳轉(zhuǎn)指針值(FIT索引)428。不跳轉(zhuǎn)指針值424是FIT表項的FIT索引,其表示沿著當(dāng)前FIT表項表示的分支的不跳轉(zhuǎn)(NotTaken)路徑遇到的第一分支。跳轉(zhuǎn)指針值428是FIT表項的FIT索引,其表示沿著當(dāng)前FIT表項表示的分支的跳轉(zhuǎn)(Taken)路徑遇到的第一分支。不跳轉(zhuǎn)指針有效字段422指示由當(dāng)前FIT表項表示的節(jié)點是否在不跳轉(zhuǎn)指針值424中具有有效的不跳轉(zhuǎn)(NotTaken)子指針。同樣,跳轉(zhuǎn)指針有效字段426指示由當(dāng)前FIT表項表示的節(jié)點是否在跳轉(zhuǎn)指針值428中具有有效的跳轉(zhuǎn)(Taken)子指針。不跳轉(zhuǎn)指針有效字段422和跳轉(zhuǎn)指針有效字段426指示關(guān)聯(lián)指針的有效性,其中無效指針可以表示為NULL。FIT BTB指針表項440是來自圖2的FIT BTB指針212的實例表項格式,并且包括不跳轉(zhuǎn)指針BTB行索引444、不跳轉(zhuǎn)指針BTB列索引446、跳轉(zhuǎn)指針BTB行索引448以及跳轉(zhuǎn)指針BTB列索引450。不跳轉(zhuǎn)指針BTB行索引444和跳轉(zhuǎn)指針BTB行索引448均映射到BTB204的行/同余類。不跳轉(zhuǎn)指針BTB列索引446和跳轉(zhuǎn)指針BTB列索引450均映射到BTB204的列/路。
[0041]為了更好地理解如何使用圖2的FIT結(jié)構(gòu)200形成和管理FIT,考慮以下實例代
碼,其示出了包括分支指令的代碼序列。
[0042]
start:
Branch A — (target I)
[0043][0044]圖5示出了如何可以將實例代碼中的分支表示為樹500。在樹表示中,代碼中的每個分支由節(jié)點表示。每個節(jié)點具有左子指針和右子指針。左子指針指向表示沿著父節(jié)點分支的不跳轉(zhuǎn)路徑遇到的第一分支的節(jié)點。右子指針指向表示沿著父節(jié)點分支的跳轉(zhuǎn)路徑遇到的第一分支的節(jié)點。如果從未遇到來自父節(jié)點的該路徑,則指針為NULL (無效)。在該實例中,節(jié)點A502具有到節(jié)點B504的分支不跳轉(zhuǎn)路徑以及到節(jié)點C506的分支跳轉(zhuǎn)路徑。節(jié)點B504具有為NULL的分支不跳轉(zhuǎn)路徑以及到節(jié)點A502的分支跳轉(zhuǎn)路徑。節(jié)點C506具有到節(jié)點D508的分支不跳轉(zhuǎn)路徑以及到節(jié)點E510的分支跳轉(zhuǎn)路徑。節(jié)點D508具有為NULL的分支不跳轉(zhuǎn)路徑以及到節(jié)點A502的分支跳轉(zhuǎn)路徑。節(jié)點E510具有為NULL的分支不跳轉(zhuǎn)路徑以及到節(jié)點A502的分支跳轉(zhuǎn)路徑。來自節(jié)點B504、D508和E510的NULL指針指示從未將這些分支預(yù)測為不跳轉(zhuǎn)。
[0045]在圖2的分支預(yù)測器118中,將上面實例代碼中遇到的分支安裝到BTB204。取決于實施方式,僅可以安裝出現(xiàn)的分支子集。繼續(xù)該實例,假設(shè)將所有遇到的分支安裝到BTB204,并且假設(shè)BTB204是2路組相聯(lián)高速緩存。FIT結(jié)構(gòu)200的訪問速度快于BTB204。在該實例中,當(dāng)未在FIT結(jié)構(gòu)200的指導(dǎo)下時,BTB204具有4周期重新索引循環(huán),如圖10的BTB搜索流水線1000的流水線時序1020中所示。FIT結(jié)構(gòu)200具有2周期重新索引循環(huán),如圖11的實例流水線時序1102中所示,因此FIT結(jié)構(gòu)200比BTB204快2個周期。因為FIT的訪問速度快于BTB,一旦它控制BTB搜索,便可加速BTB搜索流水線,使其具有如圖10的1050中所示的2周期重 新索引循環(huán)。
[0046]表1和2示出了如何將實例代碼中的分支放置在BTB204和FIT結(jié)構(gòu)200中。在該實例中,F(xiàn)IT CAM206中的表項指示每個分支節(jié)點在BTB204的行和列中的分支目標(biāo)節(jié)點。FIT BTB指針212中的表項將節(jié)點的跳轉(zhuǎn)和不跳轉(zhuǎn)路徑映射到BTB204的行和列。FIT指針210中的表項將跳轉(zhuǎn)和不跳轉(zhuǎn)路徑映射回FIT CAM206的行(FIT索引值)。
【權(quán)利要求】
1.一種使用快速索引樹FIT實現(xiàn)加速分支預(yù)測的系統(tǒng),所述系統(tǒng)包括: 分支目標(biāo)緩沖器; FIT結(jié)構(gòu);以及 處理電路,其被配置為執(zhí)行一種方法,所述方法包括: 確定要在FIT控制下執(zhí)行所述分支目標(biāo)緩沖器的搜索; 保存用于所述分支目標(biāo)緩沖器的搜索的當(dāng)前搜索地址; 在所保存的當(dāng)前搜索地址處搜索所述分支目標(biāo)緩沖器以獲得分支預(yù)測; 根據(jù)從所述FIT結(jié)構(gòu)讀取下一搜索級別的預(yù)測分支的分支跳轉(zhuǎn)和分支不跳轉(zhuǎn)路徑,確定FIT下一搜索地址; 根據(jù)所述FIT下一搜索地址,重新索引所述分支目標(biāo)緩沖器的搜索; 判定在所保存的當(dāng)前搜索地址處的搜索是否查找到所述分支預(yù)測; 根據(jù)在所保存的當(dāng)前搜索地址處的搜索查找到所述分支預(yù)測,使用基于所述FIT下一搜索地址設(shè)置的當(dāng)前搜索地址,在FIT控制下繼續(xù)所述分支目標(biāo)緩沖器的搜索;以及 根據(jù)在所保存的當(dāng)前搜索地址處的搜索無法查找到所述分支預(yù)測,使用所保存的當(dāng)前搜索地址重新索引所述分支目標(biāo)緩沖器的搜索,并在沒有FIT控制的情況下執(zhí)行所述分支目標(biāo)緩沖器的搜索。
2.根據(jù)權(quán)利要求1的系統(tǒng),其中所述處理電路還被配置為執(zhí)行: 根據(jù)確定要在FIT控制下執(zhí)行所述分支目標(biāo)緩沖器的搜索,斷開包括多目標(biāo)表和模式歷史表中的一個或多個的輔助結(jié)構(gòu)。
3.根據(jù)權(quán)利要求1的系統(tǒng),其中所述FIT結(jié)構(gòu)進(jìn)一步包括:FIT內(nèi)容可尋址存儲器,其用于在分支目標(biāo)緩沖器位置與FIT位置之間進(jìn)行轉(zhuǎn)換;分支目標(biāo)緩沖器指針,其用于當(dāng)所述分支目標(biāo)緩沖器的搜索在FIT控制下時,針對所述分支跳轉(zhuǎn)和分支不跳轉(zhuǎn)路徑重定向所述分支目標(biāo)緩沖器的搜索;以及FIT指針,其用于針對所述分支跳轉(zhuǎn)和分支不跳轉(zhuǎn)路徑重定向所述FIT結(jié)構(gòu)的搜索。
4.根據(jù)權(quán)利要求3的系統(tǒng),其中所述處理電路還被配置為執(zhí)行: 根據(jù)確定要在沒有FIT控制的情況下執(zhí)行所述分支目標(biāo)緩沖器的搜索,判定是否發(fā)現(xiàn)屬于所述FIT結(jié)構(gòu)的分支; 根據(jù)確定FIT搜索不活動并且發(fā)現(xiàn)屬于所述FIT結(jié)構(gòu)的分支,啟動FIT搜索; 根據(jù)確定發(fā)現(xiàn)屬于所述FIT結(jié)構(gòu)的分支并且未在所述FIT內(nèi)容可尋址存儲器中標(biāo)識所述分支,在所述FIT結(jié)構(gòu)中安裝所述分支; 根據(jù)確定在所述FIT內(nèi)容可尋址存儲器中標(biāo)識所述分支并且導(dǎo)向所述分支的前一分支屬于所述FIT結(jié)構(gòu),更新所述FIT結(jié)構(gòu)以鏈接所述前一分支和所述分支; 確定所述分支目標(biāo)緩沖器的搜索是否與所述FIT搜索同步; 根據(jù)是否跳轉(zhuǎn)所述分支,重新索引所述分支目標(biāo)緩沖器的搜索;以及根據(jù)確定所述分支目標(biāo)緩沖器的搜索與所述FIT搜索同步,在FIT控制下執(zhí)行所述分支目標(biāo)緩沖器的搜索。
5.根據(jù)權(quán)利要求4的系統(tǒng),其中所述FIT搜索進(jìn)一步包括: 搜索所述FIT結(jié)構(gòu)以獲得當(dāng)前搜索級別; 確定用于當(dāng)前級別的FIT表項中的一個或多個指針是否有效;根據(jù)確定用于當(dāng)前級別的FIT表項中的指針均無效,停止所述FIT搜索; 確定是否在預(yù)定數(shù)量的搜索級別內(nèi)接收到來自所述分支目標(biāo)緩沖器的預(yù)測;以及根據(jù)確定在所述預(yù)定數(shù)量的搜索級別內(nèi)接收到來自所述分支目標(biāo)緩沖器的預(yù)測,遞增所述當(dāng)前搜索級別并根據(jù)所遞增的當(dāng)前搜索級別重新索引所述FIT結(jié)構(gòu)。
6.根據(jù)權(quán)利要求3的系統(tǒng),其中所述處理電路還被配置為執(zhí)行: 根據(jù)確定已在所述分支目標(biāo)緩沖器中寫入表項,訪問所述FIT內(nèi)容可尋址存儲器以確定所述表項是否在所述FIT結(jié)構(gòu)中; 根據(jù)確定所述表項在所述FIT結(jié)構(gòu)中,基于與所述FIT內(nèi)容可尋址存儲器中的所述表項對應(yīng)的FIT CAM有效字段,確定所述表項是否是有效匹配;以及 根據(jù)確定所述表項有效,使所述FIT內(nèi)容可尋址存儲器中的所述表項以及與所述表項關(guān)聯(lián)的所有匹配FIT指針無效。
7.根據(jù)權(quán)利要求3的系統(tǒng),其中所述處理電路還被配置為執(zhí)行: 根據(jù)確定使用有效FIT指針沿著預(yù)測的路徑完成分支,保存下一 FIT指針;以及根據(jù)確定下一完成的分支是屬于所述分支目標(biāo)緩沖器的意外分支,使與所保存的下一FIT指針匹配的所有有效FIT指針無效。
8.根據(jù)權(quán)利要求3的系統(tǒng),其中所述處理電路還被配置為執(zhí)行: 根據(jù)在所述FIT內(nèi)容可尋址存儲器中寫入新表項,選擇要從所述FIT結(jié)構(gòu)刪除的表項;以及 使所述FIT結(jié)構(gòu)中具有要從所述FIT結(jié)構(gòu)刪除的所述表項的匹配指針值的任何有效指針無效。
9.一種使用快速索引樹FIT實現(xiàn)加速分支預(yù)測的計算機實現(xiàn)的方法,所述方法包括: 由計算機確定要在FIT控制下執(zhí)行分支目標(biāo)緩沖器的搜索; 保存用于所述分支目標(biāo)緩沖器的搜索的當(dāng)前搜索地址; 在所保存的當(dāng)前搜索地址處搜索所述分支目標(biāo)緩沖器以獲得分支預(yù)測; 由所述計算機根據(jù)從所述FIT結(jié)構(gòu)讀取下一搜索級別的預(yù)測分支的分支跳轉(zhuǎn)和分支不跳轉(zhuǎn)路徑,確定FIT下一搜索地址; 根據(jù)所述FIT下一搜索地址,重新索引所述分支目標(biāo)緩沖器的搜索; 由所述計算機判定在所保存的當(dāng)前搜索地址處的搜索是否查找到所述分支預(yù)測;根據(jù)在所保存的當(dāng)前搜索地址處的搜索查找到所述分支預(yù)測,使用基于所述FIT下一搜索地址設(shè)置的當(dāng)前搜索地址,在FIT控制下繼續(xù)所述分支目標(biāo)緩沖器的搜索;以及 根據(jù)在所保存的當(dāng)前搜索地址處的搜索無法查找到所述分支預(yù)測,使用所保存的當(dāng)前搜索地址重新索引所述分支目標(biāo)緩沖器的搜索,并在沒有FIT控制的情況下執(zhí)行所述分支目標(biāo)緩沖器的搜索。
10.根據(jù)權(quán)利要求9的計算機實現(xiàn)的方法,還包括: 根據(jù)確定要在FIT控制下執(zhí)行所述分支目標(biāo)緩沖器的搜索,斷開包括多目標(biāo)表和模式歷史表中的一個或多個的輔助結(jié)構(gòu)。
11.根據(jù)權(quán)利要求9的計算機實現(xiàn)的方法,其中所述FIT結(jié)構(gòu)進(jìn)一步包括:FIT內(nèi)容可尋址存儲器,其用于在分支目標(biāo)緩沖器位置與FIT位置之間進(jìn)行轉(zhuǎn)換;分支目標(biāo)緩沖器指針,其用于當(dāng)所述分支目標(biāo)緩沖器的搜索在FIT控制下時,針對所述分支跳轉(zhuǎn)和分支不跳轉(zhuǎn)路徑重定向所述分支目標(biāo)緩沖器的搜索;以及FIT指針,其用于針對所述分支跳轉(zhuǎn)和分支不跳轉(zhuǎn)路徑重定向所述FIT結(jié)構(gòu)的搜索。
12.根據(jù)權(quán)利要求11的計算機實現(xiàn)的方法,還包括: 根據(jù)確定要在沒有FIT控制的情況下執(zhí)行所述分支目標(biāo)緩沖器的搜索,判定是否發(fā)現(xiàn)屬于所述FIT結(jié)構(gòu)的分支; 根據(jù)確定FIT搜索不活動并且發(fā)現(xiàn)屬于所述FIT結(jié)構(gòu)的分支,啟動FIT搜索; 根據(jù)確定發(fā)現(xiàn)屬于所述FIT結(jié)構(gòu)的分支并且未在所述FIT內(nèi)容可尋址存儲器中標(biāo)識所述分支,在所述FIT結(jié)構(gòu)中安裝所述分支; 根據(jù)確定在所述FIT內(nèi)容可尋址存儲器中標(biāo)識所述分支并且導(dǎo)向所述分支的前一分支屬于所述FIT結(jié)構(gòu),更新所述FIT結(jié)構(gòu)以鏈接所述前一分支和所述分支; 確定所述分支目標(biāo)緩沖器的搜索是否與所述FIT搜索同步; 根據(jù)是否跳轉(zhuǎn)所述分支,重新索引所述分支目標(biāo)緩沖器的搜索;以及根據(jù)確定所述分支目標(biāo)緩沖器的搜索與所述FIT搜索同步,在FIT控制下執(zhí)行所述分支目標(biāo)緩沖器的搜索。
13.根據(jù)權(quán)利要求12的計算機實現(xiàn)的方法,其中所述FIT搜索進(jìn)一步包括: 搜索所述FIT結(jié)構(gòu)以獲得當(dāng)前搜索級別; 確定用于當(dāng)前級別的FIT表項中的一個或多個指針是否有效; 根據(jù)確定用于當(dāng)前級別的FIT表項`中的指針均無效,停止所述FIT搜索; 確定是否在預(yù)定數(shù)量的搜索級別內(nèi)接收到來自所述分支目標(biāo)緩沖器的預(yù)測;以及根據(jù)確定在所述預(yù)定數(shù)量的搜索級別內(nèi)接收到來自所述分支目標(biāo)緩沖器的預(yù)測,遞增所述當(dāng)前搜索級別并根據(jù)所遞增的當(dāng)前搜索級別重新索引所述FIT結(jié)構(gòu)。
14.根據(jù)權(quán)利要求11的計算機實現(xiàn)的方法,還包括: 根據(jù)確定已在所述分支目標(biāo)緩沖器中寫入表項,訪問所述FIT內(nèi)容可尋址存儲器以確定所述表項是否在所述FIT結(jié)構(gòu)中; 根據(jù)確定所述表項在所述FIT結(jié)構(gòu)中,基于與所述FIT內(nèi)容可尋址存儲器中的所述表項對應(yīng)的FIT CAM有效字段,確定所述表項是否是有效匹配; 根據(jù)確定所述表項有效,使所述FIT內(nèi)容可尋址存儲器中的所述表項以及與所述表項關(guān)聯(lián)的所有匹配FIT指針無效; 根據(jù)確定使用有效FIT指針沿著預(yù)測的路徑完成分支,保存下一 FIT指針;以及根據(jù)確定下一完成的分支是屬于所述分支目標(biāo)緩沖器的意外分支,使與所保存的下一FIT指針匹配的所有有效FIT指針無效。
15.根據(jù)權(quán)利要求11的計算機實現(xiàn)的方法,還包括: 根據(jù)在所述FIT內(nèi)容可尋址存儲器中寫入新表項,選擇要從所述FIT結(jié)構(gòu)刪除的表項;以及 使所述FIT結(jié)構(gòu)中具有要從所述FIT結(jié)構(gòu)刪除的所述表項的匹配指針值的任何有效指針無效。
【文檔編號】G06F9/38GK103488461SQ201310231248
【公開日】2014年1月1日 申請日期:2013年6月9日 優(yōu)先權(quán)日:2012年6月12日
【發(fā)明者】J·J·博南諾, B·R·普拉斯基, A·薩珀里托 申請人:國際商業(yè)機器公司