分支預(yù)測單元和1級指令高速緩存中的帶寬增加的制作方法
【專利摘要】本發(fā)明呈現(xiàn)用于在處理器中執(zhí)行分支預(yù)測的一種處理器、一種設(shè)備和一種非暫時性計算機可讀介質(zhì)。所述處理器包括前端單元。所述前端單元包括1級分支目標緩沖器(BTB)、BTB索引預(yù)測器(BIP)和1級散列感知器(HP)。所述BTB被配置來預(yù)測目標地址。所述BIP被配置來基于程序計數(shù)器和全局歷史產(chǎn)生預(yù)測,其中所述預(yù)測包括推測性部分目標地址、全局歷史值、全局歷史移位值和路徑預(yù)測。所述HP被配置來預(yù)測分支指令是取用還是不取用。
【專利說明】分支預(yù)測單元和1級指令高速緩存中的帶寬増加
[0001]相關(guān)申請的交叉引用
[0002]本申請要求2013年10月25日申請的美國臨時申請第61/895,624號的權(quán)益,所述申請如同在本文中完全提出般以引用的方式并入。
技術(shù)領(lǐng)域
[0003]公開的實施方案一般針對一種處理器,且特定來說,涉及一種處理器中的分支預(yù)測單元和I級指令高速緩存。
[0004]發(fā)明背景
[0005]在多種應(yīng)用中利用包括中央處理單元(CPU)和圖形處理單元(GPU)的處理器。標準配置將處理器與存儲單元(諸如高速緩存、系統(tǒng)存儲器等等)耦接。處理器可以執(zhí)行提取操作以根據(jù)需要從存儲單元提取指令。處理器管線包括用于處理指令的若干級。在一個實施中,四級管線可被使用且包括提取級、解碼級、執(zhí)行級和回寫級。指令按順序前進通過管線級。
[0006]為了加快處理器的操作,期望具有全管線。填充管線的一種方法將為在正處理先前指令之同時,提取隨后指令。為了能夠提取先行若干指令,可以使用分支預(yù)測器。分支預(yù)測器在分支指令到達管線中的執(zhí)行階段之前預(yù)測分支指令的方向(即,取用或不取用)和分支目標地址。
[0007]這稱作“預(yù)取”指令和“推測性執(zhí)行”指令。因為在分支指令到達執(zhí)行階段以前不知道預(yù)測是否正確,所以推測性執(zhí)行指令。雖然在不知道分支指令的實際方向下預(yù)取和推測性執(zhí)行指令可導(dǎo)致加快指令處理,但是如果誤預(yù)測分支方向,那么可具有相反效果且可導(dǎo)致使管線暫停。如果發(fā)生分支誤預(yù)測,那么管線需要被清除且執(zhí)行來自正確分支方向的指令。此可嚴重影響系統(tǒng)的性能。
[0008]已使用若干不同類型的分支預(yù)測器。雙模態(tài)預(yù)測器基于特定分支執(zhí)行的最近歷史作出預(yù)測且提供取用或不取用的預(yù)測。全局預(yù)測器基于所有分支的執(zhí)行,而非僅僅所關(guān)注的特定分支的最近歷史作出預(yù)測。還可以使用具有全局共享歷史緩沖器、模式歷史表和額外局部飽和計數(shù)器的兩級自適應(yīng)預(yù)測器,使得局部預(yù)測器和全局預(yù)測器的輸出彼此進行異或以提供最終預(yù)測??梢酝瑫r使用多于一個預(yù)測機構(gòu),且基于記住哪個預(yù)測器已在過去作出最佳預(yù)測的元預(yù)測器或基于奇數(shù)數(shù)量的不同預(yù)測器的多數(shù)投票函數(shù)作出最終預(yù)測。
[0009]圖1是現(xiàn)有I級分支預(yù)測器100的框圖。分支預(yù)測器100包括第一預(yù)測器(Pl)102、第二預(yù)測器(P2)104、多路復(fù)用器(mux)106和選擇器108。程序計數(shù)器110(正被預(yù)測的分支的地址)和其它輸入112由第一預(yù)測器102和第二預(yù)測器104兩者評估且各者作出其自身預(yù)測。
[0010]程序計數(shù)器110還可以作為輸入供應(yīng)至選擇器108的輸入,所述選擇器108使用程序計數(shù)器110以確定哪個預(yù)測器(第一預(yù)測器102或第二預(yù)測器104)更準確。選擇器108作出預(yù)測選擇114,其作為選擇者供應(yīng)至多路復(fù)用器106。所選預(yù)測器的輸出用作分支預(yù)測器100的預(yù)測116。
[0011]圖2是另一現(xiàn)有I級分支預(yù)測器200的框圖。在一個實施中,I級預(yù)測器200可以是McFarling混合預(yù)測器。分支預(yù)測器200在構(gòu)造上類似于分支預(yù)測器100,但是對于一些組件具有不同實施。分支預(yù)測器200包括第一預(yù)測器202(實施為雙模態(tài)計數(shù)器陣列)、第二預(yù)測器204(實施為雙模態(tài)計數(shù)器陣列)、多路復(fù)用器(muX)206和雙模態(tài)選擇器208。各個預(yù)測器202、204作出其自身預(yù)測。第二預(yù)測器204包括XOR單元210和雙模態(tài)計數(shù)器陣列212。
[0012]程序計數(shù)器220 (分支地址)作為輸入供應(yīng)至第一預(yù)測器202、第二預(yù)測器204和選擇器208。第一預(yù)測器202使其預(yù)測基于由程序計數(shù)器220的低階地址位索引的飽和雙模態(tài)兩位計數(shù)器。
[0013]全局歷史222保持由最近N個分支取用的方向(由分支地址索引)的歷史且作為輸入供應(yīng)至第二預(yù)測器204 JOR單元210對程序計數(shù)器220和全局歷史222執(zhí)行異或操作,其將用作索引的散列產(chǎn)生至陣列212中。
[0014]選擇器208使用程序計數(shù)器220以在表中查找哪個預(yù)測器(第一預(yù)測器202或第二預(yù)測器204)更準確。選擇器208作出預(yù)測選擇224,其作為選擇者供應(yīng)至多路復(fù)用器206。所選預(yù)測器用作分支預(yù)測器200的I級預(yù)測226。
[0015]圖3是稱作散列化感知器300的現(xiàn)有2級分支預(yù)測器的框圖。散列化感知器300包括偏置權(quán)重陣列302、多個權(quán)重陣列304^3042^,3044^加法器306。程序計數(shù)器310作為輸入供應(yīng)至偏置權(quán)重陣列302和權(quán)重陣列30^-304。
[0016]偏置權(quán)重陣列302是權(quán)重陣列,其中各個權(quán)重是位數(shù)量(例如,四個或八個)。偏置權(quán)重陣列302被索引至使用程序計數(shù)器310或程序計數(shù)器310的散列中以獲得供應(yīng)至加法器306的權(quán)重值。
[0017]各個權(quán)重陣列304-304由程序計數(shù)器310的散列和全局歷史312的不同位索引以獲得權(quán)重值。各個權(quán)重陣列304-304包括XOR單元314,其通過對程序計數(shù)器310和全局歷史312的部分執(zhí)行異或操作來產(chǎn)生散列。全局歷史是所有分支的過去結(jié)果的列表(無論分支被取用還是未被取用),但并不包括當前分支。全局歷史的最低有效位包含關(guān)于遇到的最近分支的信息,而全局歷史的最高有效位包含關(guān)于遇到的較舊分支的信息。
[0018]加法器306將從偏置權(quán)重陣列302和權(quán)重陣列30^-304的各者獲得的權(quán)重相加以獲得和值且和值的最高有效位(MSB)是預(yù)測316。例如,如果和值的MSB是“I”,那么預(yù)測是“不取用”且如果和值的MSB是“O”,那么預(yù)測是“取用”。
[0019]應(yīng)注意,在散列化感知器300的一個實施中,所有權(quán)重值在加法之前被符號擴展以防止加法器306的溢出,溢出可能導(dǎo)致不正確預(yù)測。因為程序計數(shù)器310和全局歷史312兩者可以各包含較大數(shù)量的位,所以使用散列函數(shù)以產(chǎn)生至偏置權(quán)重陣列302中的索引且權(quán)重陣列304-304的各者產(chǎn)生小索引(就組成索引的位數(shù)量而言)。
[0020]分支預(yù)測器為通常較大和復(fù)雜的結(jié)構(gòu)。結(jié)果,其消耗大量功率且對于預(yù)測分支引發(fā)延時懲罰。因為更好的分支預(yù)測對處理器的性能和功率效率具有影響,所以期望具有更好的分支預(yù)測。
發(fā)明概要
[0021]—些實施方案提供一種包括前端單元的處理器。前端單元包括I級分支目標緩沖器(BTB)、BTB索引預(yù)測器(BIP)和I級散列感知器(HP) ATB被配置來預(yù)測目標地址。BIP被配置來基于程序計數(shù)器和全局歷史產(chǎn)生預(yù)測,其中預(yù)測包括推測性部分目標地址、全局歷史值、全局歷史移位值和路徑預(yù)測。HP被配置來預(yù)測分支指令是取用還是不取用。
[0022]一些實施方案提供一種用于在處理器中執(zhí)行分支預(yù)測的方法,所述處理器包括I級分支目標緩沖器(BTB)和BTB索引預(yù)測器(BIP)。產(chǎn)生索引以用來查找至BTB和BIP中。使用索引在BTB中執(zhí)行查找以預(yù)測目標地址。使用索引在BIP中執(zhí)行查找以預(yù)測推測性部分目標地址。使用來自BTB的目標地址和來自BIP的推測性部分目標地址以產(chǎn)生用于下一個流的索引。
[0023]—些實施方案提供一種非暫時性計算機可讀存儲介質(zhì),其存儲用于由通用計算機執(zhí)行以在處理器中執(zhí)行分支預(yù)測的指令集,所述處理器包括I級目標緩沖器(BTB)和BTB索引預(yù)測器(BIP)。指令集包括產(chǎn)生代碼段、第一執(zhí)行代碼段、第二執(zhí)行代碼段和使用代碼段。產(chǎn)生代碼段產(chǎn)生索引以用來查找至BTB和BIP中。第一執(zhí)行代碼段使用索引在BTB中執(zhí)行查找以預(yù)測目標地址。第二執(zhí)行代碼段使用索引在BIP中執(zhí)行查找以預(yù)測推測性部分目標地址。使用代碼段使用來自BTB的目標地址和來自BIP的推測性部分目標地址以產(chǎn)生用于下一個流的索引。
[0024]附圖簡述
[0025]可從通過實例結(jié)合附圖給出的以下描述獲得更詳細理解,其中:
[0026]圖1是現(xiàn)有I級分支預(yù)測器的框圖;
[0027]圖2是另一現(xiàn)有I級分支預(yù)測器的框圖;
[0028]圖3是現(xiàn)有2級分支預(yù)測器(散列化感知器)的框圖;
[0029]圖4是其中可以實施一個或多個公開的實施方案的實例設(shè)備的框圖;
[0030]圖5是BTB索引預(yù)測器(BIP)和BTB路徑預(yù)測器的框圖;
[0031]圖6是BIP中的單個條目的圖;
[0032]圖7是使用BIP以產(chǎn)生BP匹配信號的方法的流程圖;和
[0033]圖8是指令標簽(IT)和指令高速緩存(IC)管線的框圖。
【具體實施方式】
[0034]圖4是其中可以實施一個或多個公開的實施方案的實例設(shè)備400的框圖。設(shè)備400可以包括(例如)計算機、游戲設(shè)備、手持設(shè)備、機頂盒、電視機、移動電話或平板計算機。設(shè)備400包括處理器402、存儲器404、存儲裝置406、一個或多個輸入設(shè)備408和一個或多個輸出設(shè)備410。設(shè)備400還可以視情況包括輸入驅(qū)動器412和輸出驅(qū)動器414。應(yīng)理解,設(shè)備400可以包括未在圖4中示出的額外組件。
[0035]處理器402可以包括中央處理單元(CPU)、圖形處理器單元(GPU)、位于相同晶粒上的CPU和GPU或一個或多個處理器核心,其中各個處理器核心可以是CPU或GPU。存儲器404可以位于與處理器402相同的晶粒上或可以位于與處理器402分開處。存儲器404可以包括易失性或非易失性存儲器,例如,隨機存取存儲器(RAM)、動態(tài)RAM或高速緩存。
[0036]存儲裝置406可以包括固定或可卸除式存儲裝置,例如,硬盤驅(qū)動器、固態(tài)驅(qū)動器、光盤或閃存驅(qū)動器。輸入設(shè)備408可以包括鍵盤、小鍵盤、觸摸屏、觸摸墊、檢測器、麥克風、加速計、陀螺儀、生物特征掃描儀或網(wǎng)絡(luò)連接(例如,用于無線IEEE 802信號的傳輸和/或接收的無線局域網(wǎng)卡)。輸出設(shè)備410可以包括顯示器、揚聲器、打印機、觸覺反饋設(shè)備、一個或多個燈、天線或網(wǎng)絡(luò)連接(例如,用于無線IEEE 802信號的傳輸和/或接收的無線局域網(wǎng)卡)O
[0037]輸入驅(qū)動器412與處理器402和輸入設(shè)備408通信且允許處理器402從輸入設(shè)備408接收輸入。輸出驅(qū)動器414與處理器402和輸出設(shè)備410通信且允許處理器402將輸出發(fā)送至輸出設(shè)備410。應(yīng)注意,輸入驅(qū)動器412和輸出驅(qū)動器414是可選組件,且如果輸入驅(qū)動器412和輸出驅(qū)動器414不存在,那么設(shè)備400將以相同方式操作。
[0038]處理器中的前端單元(FE)負責提取指令且將指令發(fā)送至解碼單元(DE)AE包括兩個子單元:分支預(yù)測(BP)和指令高速緩存(IC)13BP子單元預(yù)測提取地址序列和在各個地址處提取的特定字節(jié)。IC子單元執(zhí)行頁轉(zhuǎn)譯且從高速緩存階層提取特定字節(jié)。應(yīng)注意,F(xiàn)E包括其它子單元和功能性,但是這樣的功能性與本公開內(nèi)容無關(guān)且不在本文中進一步描述。
[0039]在FE中存在三個主要管線:BP管線、指令標簽(IT)管線和IC管線。在BP管線與IT/IC管線之間存在使BP管線與指令提取(IT/IC)管線解耦的預(yù)測隊列(PRQ) AP管線產(chǎn)生預(yù)測地址且PRQ保持地址直至IT/IC管線可以處理預(yù)測地址。PRQ是提取地址的有序隊列。其由IT/IC管線讀取和更新。
[0040]在各個周期,預(yù)測虛擬提取地址(程序計數(shù)器PC)和呈現(xiàn)最近分支行為的矢量(全局歷史GHist)沿著BP管線向下流動。各個流可以發(fā)現(xiàn)待提取的至多接下來64個字節(jié)。PC用于查找分支目標緩沖器(BTB)中的條目ATB條目識別分支且預(yù)測其目標。PC和GHist用于訪問散列感知器(HP)表。HP表用于預(yù)測條件分支的方向(S卩,取用或不取用)。
[0041]返回和可變目標分支具有用于幫助其預(yù)測的額外結(jié)構(gòu)。如果BTB指示取用分支是一個調(diào)用,那么調(diào)用之后的指令的地址推送至堆棧上。關(guān)聯(lián)返回指令將從堆棧彈出這個地址,而非使用來自BTB的預(yù)測目標。如果BTB指示分支具有可變目標,那么提取地址和全局歷史用于在間接目標陣列(ITA)中查找地址。
[0042]BTB和HP結(jié)構(gòu)兩者實施為兩級結(jié)構(gòu)。從I級(Ll)BTB和LI HP預(yù)測的提取方向上的改變(重新導(dǎo)向)將一個氣泡(例如,“不操作”)插入至BP管線中。如果分支是在LI BTB中,但是具有可變目標,那么其在L2 BTB中發(fā)現(xiàn)或如果L2 HP重寫來自LI預(yù)測器的方向預(yù)測,那么三個氣泡插入至BP管線中。最終,具有可變目標的L2 BTB中的分支將四個氣泡插入至BP管線中。
[0043]除了三個主要預(yù)測器之外,存在被設(shè)計來改善FE的效率的兩個結(jié)構(gòu)。如上文提及,在典型情況下,取用或不取用分支將氣泡引入至BP管線中。與訪問BTB和HP并行,PC和GHist用于從BTB索引預(yù)測器(BIP)讀取條目。這個條目用于預(yù)測BTB和HP陣列索引且用于在后一個周期中訪問這些結(jié)構(gòu)。當BIP正確地預(yù)測下一個指令的索引時,氣泡被擠破。存在恒定地掃描預(yù)測地址串流以嘗試發(fā)現(xiàn)重復(fù)循環(huán)的循環(huán)預(yù)測器。當循環(huán)預(yù)測器鎖定至循環(huán)上時,可以切斷較大預(yù)測陣列且預(yù)測可以在每個周期以至多一個取用分支的速率由這個較小結(jié)構(gòu)作出。
[0044]在地址被預(yù)測時,其寫入至三個不同結(jié)構(gòu)。各個地址連同分支和歷史信息寫入至分支狀態(tài)寄存器(BSR)。這用于在分支被發(fā)現(xiàn)、誤預(yù)測和退出時訓(xùn)練預(yù)測結(jié)構(gòu)。各個地址寫入至PRQ,使得IC管線可以提取關(guān)聯(lián)數(shù)據(jù)。最終,各個地址寫入至DE單元中的提取地址先進先出(FIFO)隊列(FaFifo)。
[0045]在各個周期中,來自PRQ的預(yù)測虛擬提取地址(VA)沿著IT管線向下流動。其訪問兩級指令轉(zhuǎn)譯后備緩沖器(ITLB)的第一級以嘗試將其轉(zhuǎn)換為物理地址(PA)。如果成功,那么IT管線接下來取用這個物理地址且使用其來訪問1C。與ITLB查找并行,開始對IC微標簽(uTag)的訪問。當從ITLB獲得PA時,完成這個查找。微標簽預(yù)測應(yīng)訪問IC數(shù)據(jù)陣列中的哪個路徑(高速緩存線應(yīng)定位于何處)。與數(shù)據(jù)訪問并行,執(zhí)行全部標簽查找以限定微標簽命中信號。這個流的結(jié)果(ITLB命中、部分PA、IC命中、IC路徑)回寫至PRQ。
[0046]如果存在LI ITLB錯失,分配轉(zhuǎn)譯后備緩沖器(TLB)錯失地址緩沖器(MAB)且嘗試L2 ITLB中的查找。如果L2 ITLB中還存在錯失,那么起始對加載/存儲單元(LS)的頁行走請求。L2 ITLB命中條目或頁行走請求的結(jié)果安裝于LI ITLB中。如果指令高速緩存中存在錯失,那么分配IC存儲器地址緩沖器(MAB)且發(fā)送對用于錯失線的L2 ITLB的填充請求。如果特定PA可緩存(如由頁行走的屬性指示),那么在數(shù)據(jù)返回時,其寫入至IC中。如果特定PA不可緩存,那么過程等待地址為PRQ中的最舊者,且接著將所得提取數(shù)據(jù)直接前送至DE。
[0047]當存在錯失時,繼續(xù)處理PRQ中的較新條目。嘗試預(yù)取用于比錯失的較舊提取新的提取的高速緩存線。
[0048]IC管線是可以每個周期提取32個字節(jié)指令數(shù)據(jù)的三階段管線。PRQ中的各個地址取決于64字節(jié)預(yù)測窗內(nèi)的預(yù)測開始和結(jié)束位置而需要沿著IC管線向下的一個或兩個流以將所有數(shù)據(jù)前送至DE。最舊PRQ條目等待的返回L2高速緩存錯失可以為那個條目喚醒IC管線且在正更新數(shù)據(jù)陣列時,L2填充數(shù)據(jù)可以直接旁通至DE。
[0049]所有預(yù)測、標簽和高速緩存管線通過基于線程優(yōu)先化算法使來自兩個線程的訪問交錯來處理同時多線程(SMT)。一般來說,使用輪詢技術(shù)在BP、IT和IC管線內(nèi)獨立地執(zhí)行線程調(diào)度。在給定周期中,如果線程中的一個被阻塞且另一線程可用于挑選,那么將在那個周期中挑選另一線程。
[0050]圖5是BTB索引預(yù)測器和BTB路徑預(yù)測器的框圖。圖5只示出了實施BTB索引預(yù)測器和BTB路徑預(yù)測器的處理器500的一部分;為了清楚的目的,存在未在圖5中示出的處理器500的其它元件。圖5底部處的標記一 BP0、BP1和BP2—指示不同組件操作于BP管線的哪個周期中。
[0051 ]程序計數(shù)器(PC)502和全局歷史(GHist)504提供為輸入。第一多路復(fù)用器510接收PC 502和目標PC(Target_BP2)512且選擇信號514選擇PC 502或目標PC 512來作為所選PC(PC_BP0)516。選擇信號514基于來自執(zhí)行(EX)單元或解碼(DE)單元的重新導(dǎo)向或基于來自稍后BP管線中的較高優(yōu)先級預(yù)測。應(yīng)注意,雖然選擇信號514來源于處理器500的另一部分,但是為了清楚的目的,未示出至選擇信號514的電勢源的連接線。
[0052]所選PC 516和預(yù)測目標PC(Pred Target_BPl)518作為輸入供應(yīng)至第二多路復(fù)用器520且選擇信號522選擇所選PC 516或預(yù)測目標PC 518來作為預(yù)測PC(Pred PC_BP0)524。選擇信號522基于來自EX單元或DE單元的重新導(dǎo)向或基于來自稍后BP管線中的較高優(yōu)先級預(yù)測或BP2周期中是否存在具有BIP誤預(yù)測的有效操作(指示預(yù)測目標PC 518無用,此意味著所選PC 516被選擇)。應(yīng)注意,雖然選擇信號522來源于處理器500的另一部分,但是為了清楚的目的,未示出至選擇信號522的電勢源的連接線。
[0053]預(yù)測PC 524作為輸入(索引)供應(yīng)至LI BTB 526,其產(chǎn)生可能地址集528??赡艿刂芳?28作為輸入供應(yīng)至第三多路復(fù)用器530,且選擇信號532(將在下文描述的取用/不取用信號)選擇可能地址集528中的一個作為目標PC 512,其反饋至第一多路復(fù)用器510且向前饋送至第一比較器534。
[0054]LI BTB 526是組關(guān)聯(lián)結(jié)構(gòu),使得執(zhí)行查找。地址的一些位用于讀取結(jié)構(gòu)且地址的一些散列位用于與標簽比較以確定是否存在與地址的匹配。標簽比較和若干“路徑”(若干不同可能結(jié)果)之間的選擇在正常兩周期查找中花費大量時間。
[0055]在每個周期,讀取LIBTB 526以預(yù)測目標PC 512。接著在下一個流中使用目標PC512以產(chǎn)生再次讀取LI BTB的索引來預(yù)測下一個目標PC。這可以在相同高速緩存線或跟隨取用分支的任何非循序高速緩存線中。因為從第一流產(chǎn)生目標PC花費時間,所以對于下一個流,LI BTB的讀取延遲。為了擠破這個氣泡,如下文描述使用BTB索引預(yù)測器(BIP)。
[0056]典型預(yù)測可每兩個周期預(yù)測一個取用分支。各個分支通過LI BTB 526。在下一個周期(BP2)中,目標PC 512需要被確定且回流兩個周期(至ΒΡ0)至LI BTB 526的前端處的多路復(fù)用器510、520。簡要而言,可能地址528從LI BTB 526獲得,可能地址中的一個被挑選(作為目標PC 512)且挑選地址回流。
[0057]預(yù)測PC 524的一些位和GHist的一些位的組合供應(yīng)至BTB索引預(yù)測器(BIP)536。在一個實施中,這個組合是預(yù)測PC 524位和GHist位的異或。BIP 536產(chǎn)生:預(yù)測目標地址(Pred Target BP_1)518,其反饋至第二多路復(fù)用器520且向前饋送至第一比較器534;和預(yù)測全局歷史移位值(Pred GHist shift_BPl)538,其供應(yīng)至第一GHist移位器540和第二比較器542。
[0058]并行訪問BIP 536與LI BTB 5260L1 BTB 526預(yù)測當前流的分支目標(其還可以用于構(gòu)建下一個流的BTB/散列感知器(HP)索引),同時BIP 536預(yù)測推測性部分目標地址(依據(jù)VA[19:1]和GHist兩者),其用于產(chǎn)生執(zhí)行至LI BTB 526和LI HP 560中的查找的索引。BIP 536直接映射且由虛擬地址的散列和全局歷史索引,此允許在緊接后一個周期中利用預(yù)測索引讀取LI BTB 526和LI HP 560。當BIP預(yù)測正確時,這壓碎取用和不取用分支氣泡。
[0059]LI BTB 526實施(大小和放置WPLl BTB讀取加上重新導(dǎo)向時序約束允許只每隔一個周期基于最后一個LI BTB重新導(dǎo)向產(chǎn)生和讀取LI BTB預(yù)測。對于每個LI BTB重新導(dǎo)向,這在連續(xù)LI BTB讀取之間產(chǎn)生氣泡周期。在兩個線程于每個交替周期運行且在連續(xù)周期中占據(jù)LI BTB的理想情形下,將不會發(fā)生這個問題。在只存在一個活動線程或連續(xù)相同線程分配的情況下,每第二周期將存在一個氣泡,此損害性能。
[0060]在一個實施中,BIP 536是直接映射256條目結(jié)構(gòu)且條目完全共享。給BIP 536呈現(xiàn)索引輸入,從BIP獲得值且假設(shè)這個值是正確的。在那個時刻不要求進一步比較或限定。在下一個周期,BIP 536的結(jié)果被使用且接著將知道其是否為在那種背景中使用的正確結(jié)果(其在知道是否為正確之前使用)。在處理器的物理布局的一個實施中,BIP 536位于LI BTB526和LI HP 560附近。
[0061 ]圖6示出了BIP 536中的單個條目600的內(nèi)容。條目600包括推測性索引602、全局歷史的最低有效位(LSB)604、全局歷史移位值606和路徑預(yù)測608。
[0062]推測性索引602可以是19個位長且包括較低VA位19: UBIP 536,LI BTB 526和LIHP 560需要這些位來產(chǎn)生用于下一個周期流的其讀取索引。
[0063]全局歷史的LSB 604可以是兩個位長且用于預(yù)測下一個周期推測性全局歷史值,BIP 536,LI BTB 526和LI HP 560需要其來產(chǎn)生讀取索引。
[0064]全局歷史移位值606可以是兩個位長且?guī)椭⑷謿v史表且指示使全局歷史的LSB移位O、I或2個位。如果全局歷史移位值606大于零,那么供應(yīng)移位量和將移位的值。各個條件分支取決于分支取用還是不取用而移入O或I至全局歷史表中。例如,如果存在一個未取用分支,那么O移入;如果存在一個取用分支,那么I移入等等。
[0065]路徑預(yù)測608可以是四個位長且用于預(yù)測將最有可能存儲為下一個流所需要的信息(VA、GHist、路徑)的LI BTB路徑(獨熱)。如果設(shè)置路徑預(yù)測608的所有四個位,那么讀取LI BTB和L2 BTB的所有路徑以確認BTB錯失。
[0066]往回參考圖5,使用BIP索引預(yù)測,每個周期預(yù)測一個取用分支。BIP536得到索引且以與查找LI BTB 526相同的方式查找。查找的結(jié)果(預(yù)測目標PC 518)立即多路復(fù)用回至輸入(經(jīng)由多路復(fù)用器520)且在下一個周期中實現(xiàn)LI BTB 526的另一查找。預(yù)測目標PC518在準確度上比從LI BTB 526出來的目標PC 512差,但是當預(yù)測目標PC 518正確時,可每個周期作出一個預(yù)測。在下一個周期,對于各個預(yù)測,檢查從BIP 536出來的“快速”預(yù)測以確定其是否正確。如果其正確,那么無必要將其丟棄。如果其不正確,那么將其丟棄(通過不選擇從多路復(fù)用器520出來的預(yù)測)且回到每兩個周期預(yù)測一個分支的先前行為。
[0067]循序預(yù)測(例如,在不具有分支的一段代碼中)的潛在“問題”為即使不需要預(yù)測分支,但是處理仍受到BIP的嘗試性預(yù)測,此可能因花費兩個周期而減慢處理。但是總體上,存在凈性能增益。
[0068]利用正提取的地址的散列化版本的位對LIBTB 526加以索引。利用正提取的地址和被預(yù)測的最后若干分支的歷史的組合散列化LI HP 560。由于利用地址位和歷史位的組合散列化BIP 536,所以BIP 536就此事更像散列感知器。使用的歷史位的最佳數(shù)量為少數(shù);例如,如上文所述,在一個實施中使用兩個歷史位。將歷史位散列化至結(jié)果中幫助獲得比通過使用僅僅地址位可作出的更好的預(yù)測。
[0069]從BIP 536出來的預(yù)測目標PC 518是立即反饋至BIP 536和LI BTB 526中來用于下一個訪問的索引(而非僅僅為地址)。從BIP 536讀出預(yù)測索引且從LI BTB 526讀出可能地址528。兩個信息片段饋送至下一個周期且作出比較(在第一比較器534處)以確定目標地址(目標PC 512)和所得索引是否與預(yù)測索引(預(yù)測目標PC 518)匹配。
[0070]在預(yù)測管線中完成BIP536的一般訓(xùn)練。當獲得預(yù)測目標PC 518時,索引從其計算出且預(yù)測目標PC 518回寫至那個索引下的BIP 536。當執(zhí)行流返回至代碼中的相同點(例如,基于相同最近歷史),從BIP 536讀取的內(nèi)容反映(最后一次代碼在這個點的)那個時刻的認知。從分支由BIP 536預(yù)測時至其寫入至BIP來用于訓(xùn)練時,存在相當快速的周轉(zhuǎn)。因為此為推測性結(jié)構(gòu)且可被立即確認是否準確,所以快速訓(xùn)練的缺點并不大。
[0071]GHist 504和目標移位GHist(Target GHist_BP2)544供應(yīng)至第四多路復(fù)用器546,且選擇信號548用于選擇GHist 504或目標移位GHist 544來作為全局歷史預(yù)測(GHist_BPO) 550。選擇信號548基于來自EX單元或DE單元的重新導(dǎo)向或基于來自稍后BP管線中的較高優(yōu)先級預(yù)測。應(yīng)注意,雖然選擇信號548來源于處理器500的另一部分,但是為了清楚的目的,未示出至選擇信號548的電勢源的連接線。
[0072]第一 GHist移位器540施加預(yù)測GHist移位538以使全局歷史移位且產(chǎn)生預(yù)測目標全局歷史(Pred Target GHist_BPl)552AHist預(yù)測550和預(yù)測目標GHist 552供應(yīng)至第五多路復(fù)用器554且選擇信號556用于選擇GHist預(yù)測550或預(yù)測目標GHist 552來作為預(yù)測全局歷史(Pred GHist_BP0)558。選擇信號556基于來自EX單元或DE單元的重新導(dǎo)向,基于來自稍后BP管線中的較高優(yōu)先級預(yù)測或BP2周期中是否存在具有BIP誤預(yù)測的有效操作。應(yīng)注意,雖然選擇信號556來源于處理器500的另一部分,但是為了清楚的目的,未示出至選擇信號556的電勢源的連接線。
[0073]預(yù)測GHist 558供應(yīng)至LI散列感知器(HP)560,其產(chǎn)生取用/不取用信號532。取用/不取用信號532提供至取用/不取用GHist移位器562,其將取用/不取用信號532前送至第三多路復(fù)用器530且產(chǎn)生至第二比較器542和至第二 GHist移位器566的全局歷史移位值(GHist shift_BP2)564。第二GHist移位器566使用GHist移位值564以產(chǎn)生目標GHist 544且將目標GHist 544前送至第四多路復(fù)用器546。
[0074]第一比較器534將目標PC 512與預(yù)測目標PC 518相比較以確定其是否匹配且將匹配值568輸出至與門570。第二比較器542將預(yù)測GHist移位值538與GHist移位值564相比較以確定其是否匹配且將匹配信號572輸出至與門570。與門570輸出BIP匹配信號574。
[0075]如果兩個比較器534、542指示匹配,那么BIP匹配信號574指示正匹配(BIP 536作出正確預(yù)測)且沒有東西需要從管線清除。如果兩個比較器534、542并不指示匹配,那么BIP匹配信號574指示BIP預(yù)測不正確,且接著從管線清除出流且將目標地址512從BP2周期反饋回至BPO多路復(fù)用器510。
[0076]這在吞吐量方面是明顯改善。在無BIP536下,管線中將存在氣泡。如果分支預(yù)測器的前端限制機器的吞吐量,那么每個周期將存在氣泡。使用BIP 536塞住孔,所以存在連續(xù)指令串流且存在較少前端氣泡。因為嘗試通過幫助保持機器占滿而在每個周期處理更多指令,所以使用BIP的值隨著機器變更寬而增加。
[0077]圖7是使用BIP以產(chǎn)生BP匹配信號的方法700的流程圖。產(chǎn)生用于在BTB、BIP和HP中執(zhí)行查找的索引(步驟702)。應(yīng)注意,下面步驟(704、710和712)可以并行執(zhí)行,但是為了解釋的目的,分開描述。
[0078]索引用于在BTB中執(zhí)行查找以產(chǎn)生可能地址集(步驟704)。目標PC選自可能地址集(步驟706)。目標PC用于產(chǎn)生將在下一個流中使用的索引(步驟708),且方法700的這個部分返回至步驟702以產(chǎn)生用于下一個流的索引。
[0079]索引還用于在BIP中執(zhí)行查找以產(chǎn)生預(yù)測目標PC和全局歷史(GHist)移位(步驟710)。索引和GHist用于在HP中執(zhí)行查找以產(chǎn)生取用/不取用信號(步驟712)?;谌∮?不取用信號更新GHist(步驟714)且在HP的隨后查找中使用更新的GHist。取用/不取用信號還用于產(chǎn)生GHist移位(步驟716)。
[0080]來自BTB的目標PC和來自BIP的預(yù)測目標PC被比較以產(chǎn)生第一匹配信號(步驟718)。來自BIP的GHist移位和來自HP的GHist移位被比較以產(chǎn)生第二匹配信號(步驟720)。第一匹配信號和第二匹配信號在邏輯上一起進行與以產(chǎn)生BP匹配信號(步驟722)且方法終止(步驟724)。
[0081 ] LI BTB路徑預(yù)測器
[0082]BIP 536還用于如上文所描述以類似于索引預(yù)測的方式預(yù)測LI BTB路徑。BIP 536的輸出的部分(路徑預(yù)測608)告訴為了命中結(jié)果查看哪條“路徑”。除了預(yù)測LI BTB路徑之外的所有路徑被切斷以節(jié)省對LI BTB的讀取功率。L2 BTB(未在圖5中示出)路徑還被切斷以節(jié)省L2 BTB功率。
[0083]在BIP路徑預(yù)測608預(yù)測“1111”的情況下,除了讀取所有LI BTB路徑之外,L2 BTB被通電且讀取。此允許還預(yù)測BTB錯失情況。
[0084]如果不存在LIBTB命中且“111I”組合未被預(yù)測,因此在所有可能BTB位置中搜索,那么執(zhí)行BIP回流以確信存在BTB錯失。并非重新導(dǎo)向至目標PC,這種情況取消自身且進行LI重新導(dǎo)向回至自身,但是在使得整個LI BTB和整個L2 BTB被讀取的強制讀取條件下。
[0085]針對BIP的這個部分的訓(xùn)練更復(fù)雜。來自當前流的索引被取用且饋送至下一個流中。利用索引讀取BTB且確定BTB中下一個流在哪個路徑命中且此為讀出的路徑。
[0086]在管線結(jié)束時,收集用于這個預(yù)測的索引和下一個預(yù)測的目標或索引。下一個預(yù)測的索引放入BIP中,下一個流的BTB命中信息被聚集(以知道其在哪個路徑命中)且那個信息利用這個預(yù)測寫入至BIP中。
[0087]在第一實例中:代碼在循環(huán)中且給定分支在BTB的路徑3中。BIP被訓(xùn)練以指向那個索引和路徑3。接著在循環(huán)中進行各個迭代,而非讀取BTB的所有四個路徑以查找那個結(jié)果,只需要讀取路徑3。當預(yù)測正確時,因為預(yù)測到將存在命中且預(yù)測到命中在哪個路徑中,且非預(yù)測路徑可以斷電,所以此節(jié)省功率。L2 BTB結(jié)構(gòu)可以完全切斷,這是因為知道LI BTB中將存在命中,所以將不需要L2 BTB0
[0088]在第二實例中:在期望BTB中的錯失的情況下(如同無地址存儲于BTB中的循序提取),BIP被訓(xùn)練以讀取所有四個路徑。如果所有四個路徑從BTB讀出,那么可以確認不存在命中,此指示BIP路徑預(yù)測有用。
[0089]由于如果那個BIP指示讀取“路徑3”且存在錯失(意味著可能分支在其它路徑中的一個中),那么那個流需要重新進行以在所有路徑中尋找那個分支,所以存在缺點。通常,當BIP預(yù)測具有不正確路徑時,其還具有不正確索引,使得流在大多數(shù)時間已由BIP索引匹配機構(gòu)清除。
[0090]如本文描述的BIP路徑預(yù)測器從根本上不同于高速緩存路徑預(yù)測器。BIP的預(yù)測更像其索引預(yù)測器的延續(xù),即,索引預(yù)測器提供M位索引且路徑預(yù)測器在特定路徑下增加索引。BIP中的一個查找導(dǎo)向硬件的下一個BTB查找。所以使用BIP路徑預(yù)測的一個流將讀取一個BIP條目,其接著指向?qū)⒆x取的(若干)一個(或多個)BTB路徑。另一方面,高速緩存路徑預(yù)測器在高速緩存中具有用于各個條目的條目,其與數(shù)據(jù)和標簽串聯(lián)查找。對于N路徑組關(guān)聯(lián)高速緩存,將在路徑預(yù)測器中查找N個條目,希望這個查找的結(jié)果指示在高速緩存自身中存在少于N個條目。
[0091]IT和IC管的解耦
[0092]圖8是處理器800的一部分中的指令標簽(IT)和指令高速緩存(IC)管線的框圖。圖8只示出了實施IT管線和IC管線的處理器800的一部分;為了清楚的目的,存在未在圖8中示出的處理器800的其它元件。圖8底部處的標記一11'0、11'1、1了2、10)和1(:1一指示不同組件操作于IT管線和IC管線的哪個周期中。
[0093]預(yù)測PC 802供應(yīng)至LI ITLB 804和uTag查找設(shè)備806。如果LI ITLB中存在命中,那么LI ITLB輸出物理地址(PA)SOS13PA 808供應(yīng)至第一比較器810、選擇PA設(shè)備812、標簽查找設(shè)備814和第二比較器816。
[0094]uTag查找設(shè)備806使用預(yù)測PC 802以產(chǎn)生uTag 818,其供應(yīng)至第一比較器810。uTag查找開始于ITO周期中且完成于ITl周期中。第一比較器810將PA 808與uTag 818相比較以產(chǎn)生匹配信號820。匹配信號820供應(yīng)至標簽查找設(shè)備814和選擇路徑設(shè)備822。
[0095]選擇路徑設(shè)備822使用預(yù)測PC802和匹配信號820以選擇指令高速緩存826中的路徑824。來自第一比較器810的命中信息指示路徑824是IC 826中可能具有有用數(shù)據(jù)的路徑;命中基于那個高速緩存條目的標簽位的子集。選擇PA設(shè)備812使用預(yù)測PC 802和PA 808以產(chǎn)生所選PA 828。指令高速緩存826使用路徑824和所選PA 828以選擇用于處理的指令830。
[0096]標簽查找設(shè)備814使用PA 808和匹配信號820以選擇標簽832,其供應(yīng)至第二比較器816。第二比較器816使用PA 808和標簽832以產(chǎn)生命中信號834。
[0097]在IT2周期中,標簽查找完成。對于存在部分匹配的情況,讀出剩余標簽以確認存在全部匹配。接著將確切知道,高速緩存中的這個位置是具有正尋找的數(shù)據(jù)的位置。通常,部分命中具有可以用于控制從高速緩存讀出數(shù)據(jù)的足夠信息。如果部分標簽導(dǎo)致多個命中,那么對于各個路徑,剩余標簽讀出可以與全部地址相比較以獲得下一個周期中的全部限定命中信號(此為在IT和IC管線耦接時需要做的事情)。在此之后,可以重新讀取數(shù)據(jù)陣列(指令高速緩)以讀取正確條目。
[0098]在IT管線結(jié)束時,如果存在命中,那么將那個信息(其被發(fā)現(xiàn)所在的地址和路徑)存儲于PRQ中。稍后,那個數(shù)據(jù)需要從高速緩存讀出,不需要執(zhí)行全部標簽查找。僅先前命中所在的索引和路徑需要從PRQ讀出且那個信息可以用于訪問數(shù)據(jù)陣列。所以標簽管線和標簽訪問可以從訪問數(shù)據(jù)時分離。
[0099]在高速緩存錯失或提取得到多于一半高速緩存線(S卩,長提取)下,標簽管線將在各個地址(預(yù)測PC 802)從BP管線出現(xiàn)時立即運行。接著IC管線對于每個提取必須進行兩次挑選(而非一次),所以即使IC管線可以獨立地挑選,其落后于IT管線。
[0100]如果DE管線(其在IT和IC管線之后)填滿,那么仍可執(zhí)行標簽查找(以確定命中或錯失)而無需使數(shù)據(jù)陣列通電以將數(shù)據(jù)發(fā)送至DE管線。
[0101]如果IT管線在IC管線之前有若干提取,那么存在優(yōu)點。如果現(xiàn)在存在高速緩存錯失,此在IT管線中得知。請求發(fā)送至L2高速緩存,所以當IC管線追上且想要使用按個數(shù)據(jù)時,可能數(shù)據(jù)已從L2高速緩存回來(且可以與IT管線想要流動的地方對齊)。換句話說,可以獲得更多預(yù)取行為。
[0102]將IT管線和IC管線解耦的影響類似于機器的其它部分中所做的事情。即,將管線解耦隱藏氣泡或減少氣泡的影響。因為存在兩個不同管線(其各者可能因為獨立原因暫停),所以不期望氣泡的影響增加。在不解耦下,如果在一個管線中存在氣泡,那么其將前進通過管線且至其它依賴管線。
[0103]如果立即與IC管線一起挑選IT管線,那么比以別的方式為必要的更多的數(shù)據(jù)高速緩存的路徑必須通電,且此必須一直進行。標簽管線一在數(shù)據(jù)管線之前,數(shù)據(jù)管線就可以更精確地將其需要讀出數(shù)據(jù)所在的指令高速緩存數(shù)據(jù)陣列的部分通電。
[0104]解耦的副作用是使用PRQ以存儲可能已存在命中所在的索引和路徑。如果存在從高速緩存移除那個線的操作,那么此外,PRQ中的命中指示必須改變?yōu)椤拔疵小?。因為將必須維護這個記錄,所以以此方式使用PRQ將涉及一些記錄保持開銷(從IT管線出來的信息存儲于PRQ中)ο如果標簽條目失效,那么PRQ中的條目還必須失效。
[0105]應(yīng)理解,基于本文的公開內(nèi)容的許多變化是可行的。雖然上文以特定組合描述特征和元件,但是各個特征或元件可以在不具有其它特征和元件下單獨使用或以具有或不具有其它特征和元件的多種組合使用。
[0106]提供的方法可以實施于通用計算機、處理器或處理器核心。舉例來說,合適的處理器包括通用處理器、專用處理器、常規(guī)處理器、數(shù)字信號處理器(DSP)、多個微處理器、與DSP核心關(guān)聯(lián)的一個或多個微處理器、控制器、微控制器、專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)電路、任何其它類型的集成電路(IC)和/或狀態(tài)機。這樣的處理器可以通過使用處理的硬件描述語言(HDL)指令的結(jié)果和包括網(wǎng)表的其它中間數(shù)據(jù)(這樣的指令能夠存儲于計算機可讀介質(zhì)上)配置制造工藝來制造。這樣的處理的結(jié)果可以是掩膜作品,其接著在半導(dǎo)體制造工藝中用于制造實施實施方案的方面的處理器。
[0107]本文提供的方法或流程圖可以實施于非暫時性計算機可讀存儲介質(zhì)中并入以用于由通用計算機或處理器執(zhí)行的計算機程序、軟件或固件中。非暫時性計算機可讀存儲介質(zhì)的實例包括只讀存儲器(R0M)、隨機存取存儲器(RAM)、寄存器、高速緩沖存儲器、半導(dǎo)體存儲設(shè)備、磁介質(zhì)(諸如內(nèi)部硬盤和可卸除式磁盤、磁光介質(zhì))和光學(xué)介質(zhì)(諸如CD-ROM光盤和數(shù)字多用光盤(DVD))。
[0108]額外實施方案
[0109]1.—種處理器,其包括:指令標簽(IT)管線;和指令高速緩存(IC)管線,其與IT管線通信,但是與IT管線分開,使得IT管線和IC管線可以獨立于彼此操作。
[0110]2.根據(jù)實施方案I所述的處理器,其中IT管線包括:I級指令轉(zhuǎn)譯后備緩沖器(ITLB),其被配置來接收預(yù)測地址且輸出物理地址;和微標簽查找設(shè)備,其被配置來接收預(yù)測地址且輸出微標簽。
[0111]3.根據(jù)實施方案2所述的處理器,其中IT管線進一步包括第一比較器,其被配置來基于來自ITLB的物理地址和來自微標簽查找設(shè)備的微標簽的比較產(chǎn)生匹配信號。
[0112]4.根據(jù)實施方案3所述的處理器,其中IC管線包括選擇路徑設(shè)備,其被配置來基于預(yù)測地址和來自第一比較器的匹配信號選擇指令高速緩存中的路徑。
[0113]5.根據(jù)實施方案4所述的處理器,其中IC管線進一步包括選擇物理地址設(shè)備,其被配置來基于預(yù)測地址和來自ITLB的物理地址選擇物理地址。
[0114]6.根據(jù)實施方案5所述的處理器,其中指令高速緩存被配置來基于來自選擇選擇物理地址設(shè)備的所選物理地址和來自選擇路徑設(shè)備的所選路徑選擇指令。
[0115]7.根據(jù)實施方案3所述的處理器,其中IT管線進一步包括標簽查找設(shè)備,其被配置來基于預(yù)測地址和來自第一比較器的匹配信號選擇標簽。
[0116]8.根據(jù)實施方案7所述的處理器,其中IT管線進一步包括第二比較器,其被配置來基于來自ITLB的物理地址和來自標簽查找設(shè)備的所選標簽產(chǎn)生命中信號。
【主權(quán)項】
1.一種處理器,其包括: 前端單元,其包括: I級分支目標緩沖器(BTB),其被配置來預(yù)測目標地址; BTB索引預(yù)測器(BIP),其被配置來基于程序計數(shù)器和全局歷史產(chǎn)生預(yù)測,其中所述預(yù)測包括推測性部分目標地址、全局歷史值、全局歷史移位值和路徑預(yù)測;和 I級散列感知器(HP),其被配置來預(yù)測分支指令是取用還是不取用。2.根據(jù)權(quán)利要求1所述的處理器,其中所述BIP被進一步配置來組合所述程序計數(shù)器和所述全局歷史以產(chǎn)生所述預(yù)測。3.根據(jù)權(quán)利要求2所述的處理器,其中所述BIP被進一步配置來執(zhí)行異或操作以組合所述程序計數(shù)器和所述全局歷史。4.根據(jù)權(quán)利要求2所述的處理器,其中所述BIP被進一步配置來使用散列函數(shù)以組合所述程序計數(shù)器和所述全局歷史。5.根據(jù)權(quán)利要求1所述的處理器,其中來自所述BIP的所述推測性部分目標地址在所述預(yù)測之后緊接的周期中由所述BTB使用以預(yù)測所述BTB的索引且由所述HP使用以預(yù)測所述HP的索引。6.根據(jù)權(quán)利要求1所述的處理器,其中所述前端單元進一步包括: 第一選擇電路,其被配置來從輸入程序計數(shù)器選擇預(yù)測程序計數(shù)器,從所述BIP選擇所述推測性部分目標地址且從所述BTB選擇所述目標地址。7.根據(jù)權(quán)利要求1所述的處理器,其中所述前端單元進一步包括: 第二選擇電路,其被配置來從輸入全局歷史選擇預(yù)測全局歷史,從所述BIP選擇所述全局歷史值且選擇目標全局歷史。8.根據(jù)權(quán)利要求1所述的處理器,其中所述前端單元進一步包括: 第一比較器,其被配置來將來自所述BIP的所述推測性部分目標地址和來自所述BTB的所述目標地址相比較。9.根據(jù)權(quán)利要求8所述的處理器,其中所述前端單元進一步包括: 全局歷史移位器,其被配置來基于來自所述HP的取用/不取用預(yù)測產(chǎn)生全局歷史移位值;和 第二比較器,其被配置來將來自所述BIP的所述全局歷史移位值與來自所述全局歷史移位器的所述全局歷史移位值相比較。10.根據(jù)權(quán)利要求9所述的處理器,其中所述前端單元進一步包括: 邏輯門,其被配置來基于所述第一比較器的輸出和所述第二比較器的輸出產(chǎn)生匹配信號,其中所述匹配信號指示所述BIP是否作出正確預(yù)測。11.根據(jù)權(quán)利要求1所述的處理器,其中所述BTB被進一步配置來切斷除了由所述BIP預(yù)測的路徑之外的所有路徑。12.根據(jù)權(quán)利要求1所述的處理器,其中所述BTB被進一步配置來從緊接前一個周期基于由所述BIP預(yù)測的所述路徑讀取路徑。13.根據(jù)權(quán)利要求1所述的處理器,其進一步包括: 指令標簽(IT)管線;和 指令高速緩存(IC)管線,其與所述IT管線通信,但是與所述IT管線分開,使得所述IT管線和所述IC管線可以獨立于彼此操作。14.一種用于在處理器中執(zhí)行分支預(yù)測的方法,所述處理器包括I級分支目標緩沖器(BTB)和BTB索引預(yù)測器(BIP),所述方法包括: 產(chǎn)生索引以用來查找至所述BTB和所述BIP中; 使用所述索引在所述BTB中執(zhí)行查找以預(yù)測目標地址; 使用所述索引在所述BIP中執(zhí)行查找以預(yù)測推測性部分目標地址;且使用來自所述BTB的所述目標地址和來自所述BIP的所述推測性部分目標地址以產(chǎn)生用于下一個流的所述索引。15.根據(jù)權(quán)利要求14所述的方法,其中在所述BTB中所述執(zhí)行查找包括: 使用所述索引以產(chǎn)生可能地址集;且 從所述可能地址集選擇所述目標地址。16.根據(jù)權(quán)利要求14所述的方法,其中所述處理器進一步包括I級散列感知器(HP),且所述方法進一步包括: 使用所述索引在所述HP中執(zhí)行查找以預(yù)測分支是取用還是不取用;且 基于所述取用或不取用預(yù)測更新全局歷史。17.根據(jù)權(quán)利要求16所述的方法,其進一步包括: 通過使用所述索引在所述BIP中執(zhí)行查找來產(chǎn)生預(yù)測全局歷史移位; 通過所述HP使用所述取用或不取用預(yù)測產(chǎn)生全局歷史移位;且將來自所述BIP的所述預(yù)測全局歷史移位與來自所述HP的所述全局歷史移位相比較以產(chǎn)生第一匹配信號。18.根據(jù)權(quán)利要求17所述的方法,其進一步包括: 將來自所述BTB的所述目標地址與來自所述BIP的所述推測性部分目標地址相比較以產(chǎn)生第二匹配信號。19.根據(jù)權(quán)利要求18所述的方法,其進一步包括: 將所述第一匹配信號與所述第二匹配信號相比較以確定所述BIP是否做出正確預(yù)測。20.根據(jù)權(quán)利要求14所述的方法,其進一步包括: 預(yù)測由所述BTB使用的路徑,通過使用所述索引在所述BIP中查找來執(zhí)行所述預(yù)測。21.根據(jù)權(quán)利要求20所述的方法,其進一步包括: 切斷除了由所述BIP預(yù)測的路徑之外的所述BTB中的所有路徑。22.根據(jù)權(quán)利要求20所述的方法,其進一步包括: 從緊接前一個周期基于由所述BIP預(yù)測的所述路徑讀取所述BTB中的路徑。23.—種非暫時性計算機可讀存儲介質(zhì),其存儲用于由通用計算機執(zhí)行以在處理器中執(zhí)行分支預(yù)測的指令集,所述處理器包括I級目標緩沖器(BTB)和BTB索引預(yù)測器(BIP),所述指令集包括: 產(chǎn)生代碼段,其用于產(chǎn)生索引以用來查找至所述BTB和所述BIP中; 第一執(zhí)行代碼段,其用于使用所述索引在所述BTB中執(zhí)行查找以預(yù)測目標地址; 第二執(zhí)行代碼段,其用于使用所述索引在所述BIP中執(zhí)行查找以預(yù)測推測性部分目標地址;和 使用代碼段,其用于使用來自所述BTB的所述目標地址和來自所述BIP的所述推測性部分目標地址以產(chǎn)生用于下一個流的所述索引。24.根據(jù)權(quán)利要求23所述的非暫時性計算機可讀存儲介質(zhì),其中所述指令是用于設(shè)備制造的硬件描述語言(HDL)指令。
【文檔編號】G06F9/38GK106030516SQ201480065959
【公開日】2016年10月12日
【申請日】2014年10月24日
【發(fā)明人】道格拉斯·威廉姆斯, 薩希爾·阿羅拉, 尼基爾·古普塔, 陳威宇, 德比杰特·達斯薩爾馬, 馬呂斯·埃弗斯
【申請人】超威半導(dǎo)體公司