本發明涉及處理器設計的領域,特別是涉及一種由塊地址和多個字節偏移形成的多個地址與分支指令歷史轉移通過散列運算形成的多個條件分支指令預測器索引的分支預測器。
背景技術:
::在處理器設計的領域中對分支指令預測器的預測精度要求越來越高是公知的。隨著處理器流水級、高速緩存存儲器訪問延遲和超標量體系結構中的指令發布寬度的增加,該需求更加強烈。分支指令預測器包括預測目標地址,和預測條件分支指令方向,即跳轉或者不跳轉。典型地,以相對大的塊為單位從指令高速緩存器中取指,例如,一次性從指令高速緩存取出16個字節指令。因此,在取出的指令塊中可能存在多個分支指令。需要精確地預測取出的塊中存在的分支指令,并預測它們的目標地址和它們的方向。因為塊內分支指令的位置是相對隨機的,所以這是有挑戰的。對于固定長度指令如此,但是對于允許指令是可變長度的指令集架構(例如,x86或者ARM)尤其如此。例如,一條x86分支指令可能位于與從指令高速緩存取出的指令字節塊的任何字節偏移處。技術實現要素:根據本發明的一方面,提供一種分支預測器。該分支預測器可以包括:可用于訪問處理器的指令高速緩存的指令字節塊的塊地址;所述指令字節塊內的第一字節偏移;所述指令字節塊內的第二字節偏移;散列邏輯,散列分支轉移歷史和由塊地址和第一字節偏移形成的第一地址以生成第一索引,以及散列分支轉移歷史和由塊地址和第二字節偏移形成的第二地址以生成第二索引;和條件分支預測器,接收第一索引和第二索引,并響應于此分別提供所述指令字節塊中的第一和第二條件分支指令的第一和第二方向預測。根據本發明的另一方面,提供一種用于操作分支預測器的方法。所述方法可以包括:使用塊地址以訪問處理器的指令高速緩存的指令字節塊;提供所述指令字節塊內的第一字節偏移和第二字節偏移;散列分支轉移歷史和由塊地址和第一字節偏移形成的第一地址以生成第一索引,和散列分支轉移歷史和由塊地址和第二字節偏移形成的第二地址以生成第二索引;和由條件分支預測器響應于接收第一索引和第二索引分別提供所述指令字節塊中的第一條件分支指令和第二條件分支指令的第一方向預測和第二方向預測。附圖說明圖1是圖示具有分支預測器的處理器的框圖。圖2是圖示圖1的分支預測器的操作的流程圖。圖3是圖示具有常規的分支預測器的處理器的框圖。圖4是圖示具有根據替代實施例的分支預測器的處理器的框圖。圖5是圖示圖4的分支預測器的操作的流程圖。具體實施方式詞匯散列(hash)兩個或更多個實體,比如地址和分支轉移歷史(branchpattern),指的是關于兩個或更多實體中的每一個的一個或多個位執行一個或多個與/或邏輯運算以生成具有比兩個或更多實體中最大的實體的位數更少位數的結果。一個或多個與/或邏輯運算可以包括,但不限于:實體的預定位的選擇;包括異或(XOR)、NAND、AND、OR、NOT、循環移位平移的布爾邏輯運算;和包括加、減、乘、除、取模的算術運算。為了通過示例圖示,假定100位分支轉移歷史,32位地址,且結果是10位索引。散列地址和分支轉移歷史(即,對地址和分支轉移歷史進行散列運算)可以包括將分支轉移歷史的位[9:0]和位[19:10]與分支指令地址的位[9:0]異或。實施例中的分支預測器,其通過使用條件分支指令地址與分支轉移歷史散列運算后的值為索引,得到的方向預測,精確度高于只使用條件分支指令的部分地址參與散列算法來索引條件分支預測器的結果。現在參考圖1,示出了具有分支預測器100的處理器103的框圖。處理器103包括取指單元101、指令高速緩存102和分支預測器100或者分支預測單元100。該分支預測器100包括分支轉移歷史104、散列邏輯106、分支目標地址高速緩存(branchtargetaddresscache,BTAC)108、條件分支預測器112和控制邏輯114。取指單元101生成提供給指令高速緩存102、BTAC108和散列邏輯106的塊地址122。指令高速緩存102響應于塊地址122提供架構指令字節塊124。在一個實施例中,指令字節塊124包括16個字節,雖然可考慮其他實施例。指令字節塊124可以包括多個架構分支指令,如以下更詳細地討論的。如果控制邏輯114將目標地址128或者最終結果128提供到取指單元101,則取指單元101基于目標地址128更新塊地址122,以從非順序程序位置取出,這被稱為重定向。否則,即,在沒有到目標地址128的重定向的情況下,取指單元101在從指令高速緩存102取出指令字節塊124之后遞增塊地址122。從處理器103向后面的流水線提供指令字節塊124。優選地,指令字節塊124由指令隊列(未示出)接收。指令字節從隊列輸出到指令譯碼器(未示出),該指令譯碼器將架構指令124翻譯為提供給執行流水線(未示出)以用于執行的微指令。隊列緩沖多個指令字節塊124以用于提供到指令譯碼器。只要指令緩存隊列中具有可以輸出給指令譯碼器的指令,指令譯碼器就可以把翻譯之后的微指令提供到執行流水線處理,處理器就能有效地利用執行流水線。因此,分支預測器100的目標是避免指令隊列過于接近地變空,以使得指令譯碼器不具有足夠的指令來翻譯以保持執行流水線良好地使用。在一個實施例中,執行流水線是包括一個或多個架構寄存器、寄存器重命名單元、重排序緩沖器、保留站、多個執行單元和用于發射微指令到執行單元的指令調度器的超標量亂序執行流水線。執行單元可以包括以下執行單元類型的一個或多個:整數單元、浮點單元、媒體單元、單指令多數據(SIMD)單元、分支執行單元、訪存單元。優選地,處理器103還包括存儲器子系統,其包括存儲器次序緩沖器、地址變換高速緩存(tanslation-lookasidebuffer,TLB)、tablewalk引擎、多級緩存和各種請求隊列,例如一個或多個存儲器訪問隊列、存儲器存儲隊列、填充隊列和/或存儲器監聽隊列。BTAC108之前執行過的歷史分支指令以及它們的分支目標地址、方向、在字節塊中的位置124,為當前的字節塊做預測。BTAC108包括條目的一個或多個存儲器陣列。優選地,該一個或多個存儲器陣列組織結構是多路組相聯的多側的高速緩存。如以下更詳細地描述的。每個條目保存與分支指令相關聯的分支歷史信息。在一個實施例中,BTAC108中的每個條目包括以下字段:有效位、標簽、分支類型、字節偏移、跨字節塊標志位和目標地址。分支指令的方向是分支是否跳轉。也就是,如果分支指令不跳轉,則程序流順序地進行,即,沿著指令不跳轉的方向,取該不跳轉分支指令后面的一條指令地址。進行到在不跳轉的分支指令的地址之后的地址順序跟隨分支指令的下一指令。但是,如果分支指令跳轉,則該分支指令指令處理器103將程序流轉向到目標地址而不是繼續正常的順序程序流。在無條件分支指令的情況下,比如調用、返回或者無條件跳轉指令,總是跳轉的。在條件分支指令的情況下,如果滿足由條件分支指令指定的條件則跳轉;否則,不跳轉。條件跳轉指令跳轉的條件通常是處理器的一些架構狀態,例如,架構條件標記是否滿足標準,例如,大于、小于、等于、負的、正的、進位、零、溢出等。可以以多種方式指定目標地址。在返回指令的情況下,目標地址(或者返回地址)典型地從堆棧彈出,該返回地址先前響應于先前執行的調用指令推入到該堆棧上。典型地,返回地址是調用指令之后的下一順序指令。目標地址也可以指定為相對于分支指令的地址本身的有符號偏移。目標地址也可以保存在由通常被稱為的間接分支指令的分支指令指定的架構寄存器中。有效位指示條目是否有效。當分支指令由執行流水線執行完畢之后,將關于所執行的分支指令的相關信息傳遞回到分支預測器100時,分支預測器100確定用于該分支指令的條目是否已經存在于BTAC108中。如果否,則分支預測器100為該分支指令在BTAC108中分配一個條目,并設置有效位,填充分配條目的各個字段。相反地,如果BTAC108的條目預測指令字節塊124中分支指令的存在,但執行流水線確定分支指令不再在指令字節塊124中,則分支預測器100使該條目無效。因為操作系統加載新程序到與指令字節塊124對應的存儲器位置中,或者執行自修改代碼,所以這是可能發生的。一旦用于分支指令的有效條目存在于BTAC108中,BTAC108就可以繼續做出關于隨后取出的指令字節塊124中分支指令的存在的預測,以及做出取出的分支指令的方向和目標地址的預測。但是,如以下更詳細地描述的,通常條件分支預測器112而不僅僅是BTAC108用于預測條件分支指令的方向。標簽字段保存分支指令的地址的高位。塊地址122的低位用于索引BTAC108中的組。塊地址122的高位與所選的組中的條目的標簽比較。如果有效條目的標簽匹配塊地址122的標簽位,則BTAC108指示匹配條目的命中,并提供命中的分支指令的所預測的方向、目標地址和字節偏移,如以下更詳細地描述的。分支類型指示分支指令的類型,比如調用(例如x86CALL指令)、返回(例如,x86RET指令)、無條件跳轉(例如,x86JMP指令)和條件跳轉(例如,x86Jcc指令)。在一個實施例中,條目還包括可以在分支類型字段中編碼的偏離位和強制偏離位(未示出)。當執行流水線第一次執行條件分支指令時,強制偏離位且以首次執行的正確方向填充偏離位。在后來包含該分支指令的塊再次被取出,即,保存分支指令預測信息的條目命中,如果強制偏離位為高,則使用BTAC108中偏離位為預測方向。第一次偏離位不正確地預測分支指令的方向時清除強制偏離位。優選地,每個BTAC108條目還包括用于做出方向預測的其他字段。在一個實施例中,每個條目包括2位飽和雙向計數器(saturatingup-downcounter),其每次分支跳轉向上計數且每次分支不跳轉向下計數。如果計數器的高位被置位,則BTAC108預測分支指令跳轉;否則,BTAC108預測分支指令不跳轉。字節偏移指定指令字節塊124內分支指令的位置。優選地,字節偏移指定指令字節塊124內分支指令的第一字節的位置。在一個實施例中,架構指令的長度是可變的,且特別地分支指令可以是不同長度,例如,如在x86指令集架構中那樣。在可變長度指令集架構的情況下,分支指令可以跨越其開始的指令字節塊124,以使得其在下一順序指令字節塊124中結束。在這種情況下,在分支指令的條目中置位跨塊位。控制邏輯114使用命中分支指令的字節偏移以確定指令字節塊124中首先看到、跳轉的分支指令(如果有的話)。“首先”指的是程序次序中的首先。“看到”指的是未看到位于當前架構指令指針值之前的分支指令的事實。因此,例如,如果對具有在不久將要取出的指令字節塊124內字節偏移7的分支目標128進行重定向,則未看到BTAC108預測在取出的指令字節塊124內存在的任何分支指令參見,即,即使它們預測為跳轉,它們不會被考慮,因為它們不在重定向的地址128處的指令的新線程中出現。如以下更詳細地描述的,圖1的實施例的散列邏輯106有效利用BTAC108預測出的字節偏移得到的地址來進行散列算法以產生到條件分支預測器112中的更精密的索引以盡可能潛在地改進條件分支預測器112的精度。目標地址是基于分支指令的執行歷史進行預測的分支指令轉移地址。優選地,當執行流水線執行分支指令時,分支預測器100以正確的目標地址更新分支指令的BTAC108條目。在一個實施例中,分支預測器100還包括用于預測返回指令的返回地址的調用/返回堆棧(未示出),且如果BTAC108指示分支指令的分支類型是返回指令,則控制邏輯114選擇由調用/返回堆棧而不是由BTAC108提供的返回地址。優選地,BTAC108布置為兩“側”,稱為側A和側B。對于從指令高速緩存102取出的給定指令字節塊124,BTAC108的每一側僅至多提供單個命中目標地址/字節偏移對。這是由于,對于從指令高速緩存102取出的給定指令字節塊124,更新BTAC108的邏輯允許BTAC108的一側中的至多一個條目,即,BTAC108更新邏輯僅允許取出的指令字節塊內的最多一個分支指令占有每一側的一個條目。因此,雖然BTAC108的一側可以具有相關性,即,具有多路組相聯更新邏輯也僅允許該側的多路中的一路有用于取出的指令字節塊124中的分支指令的有效條目。在一個實施例中,BTAC108具有兩側,且兩側中的每一個擁有具有兩條路的的存儲體。在替代實施例中,BTAC108擁有具有四條路的單個存儲器陣列,且其中兩條路被分組為一側且另外兩條路被分組為另一側。類似地,條件分支預測器112也可以在其一個或多個存儲器陣列中具有相關性,和對于從指令高速緩存102取出的給定指令字節塊124,條件分支預測器112每一側僅提供至多單個命中方向預測。這是由于,對于從指令高速緩存102取出的給定指令字節塊,條件分支預測器112更新邏輯允許條件分支預測器112的一側中的至多一個條目,即,條件分支預測器112更新邏輯僅允許取出的指令字節塊內的單個分支指令具有每一側中的條目。響應于塊地址122,BTAC108輸出命中指示器132,側A目標地址A144和側B目標地址B146(集合地稱為目標地址144/146),和側A字節偏移A154和側B字節偏移B156(集合地稱為字節偏移154/156),將其全部提供給控制邏輯114。優選地,命中指示器132指示BTAC108中哪一路中的標簽與塊地址中標簽匹配上了。雖然未示出,優選地BTAC108還向控制邏輯114提供對于每一側的方向預測。在圖1的實施例中,有益地,字節偏移154/156也被提供給散列邏輯106。散列邏輯106除了塊地址122和字節偏移154/156之外,還接收也被稱為分支路徑歷史104的分支轉移歷史104。假定N位的分支轉移歷史104,分支轉移歷史104是以程序次序的最近N個分支指令中的每一個的方向的全局歷史。在一個實施例中,如果跳轉相應的分支指令則設置分支轉移歷史104的位,且如果不跳轉分支指令則清除。在一個實施例中,N是100。如以下描述的,分支轉移歷史104可以以分支指令的地址(或者在相對于圖3和圖4描述的實施例的情況下其近似)進行散列,以獲得到條件分支預測器112中的索引,以便不僅包括正被討論的分支指令的歷史,而且包括它周圍的其他分支指令的全局歷史,以增加預測分支指令的結果的精度。在一個實施例中,每次分支指令提交時都用執行后的正確方向更新到分支轉移歷史104。在替代實施例中,每次預測分支指令時以預測的方向更新分支轉移歷史104,即使預測的方向可能是推測性的。前一實施例具有更精確這個優勢,在于其僅包含可以提交的那些分支指令的信息,而不包含僅從預測時的預測方向而不考慮分支指令是否可以提交的角度更新分支轉移歷史的信息。前一實施例的缺點在于在當從指令高速緩存102取出分支指令X的實例時和當分支指令X的實例提交時之間可能有數十量級的時鐘周期;因此,對于在取出分支指令X的實例之后和提交分支指令X的實例之前取出的分支指令做出的任何預測將不具有包括分支指令X的實例的方向的全局分支歷史的益處。相反地,后一實施例具有的優點在于使用包括全部N個先前分支指令的全局分支轉移歷史104做出分支指令的預測,雖然其缺點在于分支轉移歷史104中可能包含那些最終不會得到提交的分支指令的歷史。散列邏輯106接收塊地址122、字節偏移154/156和分支轉移歷史104并散列它們以生成第一索引A164和第二索引B166。更具體地說,優選地,散列邏輯106加上側A字節偏移A154與塊地址122以形成指令字節塊124中第一條件分支指令的存儲器地址,并散列分支轉移歷史104和第一條件分支指令的地址以生成第一索引A164;類似地,散列邏輯106加上側B字節偏移B156與塊地址122以形成指令字節塊124中第二條件分支指令的存儲器地址,并散列分支轉移歷史104和第二條件分支指令的地址以生成第二索引B166。將索引164/166提供給條件分支預測器112。優選地,散列邏輯106是可綜合的組合邏輯。以下在條件分支預測器112的描述之后更加詳細地描述散列。條件分支預測器112從散列邏輯106接收索引154/156并從取指單元101接收塊地址122,且響應于該塊地址生成命中指示器172,側A方向預測A174和側B方向預測B176。條件分支預測器112包括保存用于做出條件分支指令的方向預測的信息的至少一個存儲器陣列。在一個實施例中,類似BTAC108,條件分支預測器112布置為兩側,稱為側A和側B。優選地,條件分支預測器112中的每個條目包括方向預測位。在一個實施例中,方向預測位是每次條件分支指令跳轉則遞增且每次條件分支指令不跳轉則遞減的飽和雙向計數器(例如,3位)的最高有效位。在替代實施例中,飽和雙向計數器的更新是通過依賴于條件分支指令是否正確預測的結果的狀態機控制的。優選地,條件分支預測器112存儲器陣列是包括兩個端口的雙端口存儲器陣列,一個端口用于側A且一個端口用于側B,其接收各個側A/B的索引164/166并響應于此提供各個側A/B的方向預測174/176。在一個實施例中,條件分支預測器112的每個條目包括標簽。由索引164/166選擇的組中每一路中的標簽與塊地址122的標簽部分比較以確定是否發生有效條目命中。在一個實施例中,不是簡單地是分支指令地址的高位,每個標簽是通過以分支指令地址的高位散列分支轉移圖案的位而生成的值。來自每一側的命中條目的方向預測位作為各個方向預測174/176提供,將其與命中指示器172一起提供給控制邏輯114。在一個實施例中,條件分支預測器112包括多個存儲器陣列,也稱為表,其生成每一側的相應的多個方向預測,且對于每一側僅多個方向預測之一被選為方向預測174/176。在這種實施例中,散列邏輯106生成多對索引164/166,并將它們提供到條件分支預測器112。例如,如果條件分支預測器112具有五個表,則散列邏輯106將五對索引164/166提供到條件分支預測器112。在一個實施例中,條件分支預測器112是標簽的幾何長度(TAGE)預測器。在TAGE預測器實施例中,多個表中的每一個是單個雙端口靜態隨機存取存儲器(SRAM)。另外,表中的每個條目包括與塊地址122的標簽部分比較的標簽。此外,每個表以由散列邏輯106生成的它自己的不同的一對索引164/166來索引,且使用不同長度的分支轉移歷史104生成索引。更具體地說,TAGE預測器的基本表簡單地以由塊地址122和字節偏移154/156的相加結果形成的條件分支指令地址的低位進行索引,即,不以分支轉移歷史104進行散列。然而,其他表從散列邏輯106接收它們各自的索引對164/166,且已經使用與其他表不同位數的分支轉移歷史104散列得到了每個表的索引對164/166。也就是,用每一個塊地址對應的地址對與不同長度的分支轉移歷史進行散列運算以生成用于不同表的不同索引對164/166。例如,假定每個表的索引164/166是10位且分支轉移歷史104是100位。對于第一個表,散列邏輯106關于分支轉移歷史104的位[9:0]與分支指令地址的位[9:0]執行布爾異或(XOR)運算;對于第二個表,散列邏輯106執行分支轉移歷史104的位[9:0]與分支轉移歷史104的位[19:10]再與分支指令地址的位[9:0]的XOR的散列運算;對于第三個表,散列邏輯106執行分支轉移歷史104的位[9:0]與分支轉移歷史104的位[19:10]再與分支轉移歷史104的位[29:20]再與分支轉移歷史104的位[39:30]再與分支指令地址的位[9:0]的XOR的散列運算;以此類推。本實施例是舉例性表示了分支轉移歷史和分支指令地址的散列算法,,其它實施例可以使用其他的散列算法,其中散列邏輯106使用分支轉移歷史和/或分支指令地址的位的不同集合并執行XOR以外的其他算術運算和/或邏輯運算。控制邏輯114跳轉BTAC命中指示器132、目標地址154/156、字節偏移154/156、條件分支預測器命中指示器172和方向預測174/176,并以程序次序確定指令字節塊124中第一個有效、看到、跳轉的分支指令(如果有的話)。如果找到這種分支指令,則控制邏輯114用信號通知取指單元101以將程序流重定向到由控制邏輯114生成的最終結果128;否則,取指單元101從下一順序塊地址122取出指令字節塊124。現在參考圖2,示出了圖示圖1的分支預測器100的操作的流程圖。圖2意在圖示以向下方式的時間的推移,和在水平地彼此平行的塊中執行的動作實質上彼此并行地發生。流程始于塊202。在塊202,取指單元101生成塊地址122并將其提供到圖1的指令高速緩存102、BTAC108和散列邏輯106。流程并行地進行到塊204和206。在塊204,指令高速緩存102輸出指令字節塊124。在一個實施例中,指令高速緩存102具有從聲明塊地址122的時間直到指令高速緩存102提供指令字節塊124為止3個時鐘周期的等待時間,雖然可考慮其他實施例。流程進行到塊208。在塊206,BTAC108輸出到每一側,即,對于側A和側B的預測的目標地址144/146、字節偏移154/156和命中132。在一個實施例中,BTAC108也具有從聲明塊地址122的時間直到BTAC108提供其輸出為止3個時鐘周期的等待時間,雖然可考慮其他實施例。流程進行到塊208。在塊208,散列邏輯106以分支轉移歷史104散列由塊地址122和字節偏移154/156形成的兩個分支指令地址中的每一個以生成側A和側B的索引164/166。流程進行到塊212。在塊212,條件分支預測器112接收索引164/166并響應于此生成側A和側B的方向預測174/176和命中172。流程進行到塊214。在塊214,控制邏輯114從其輸入決定BTAC108和條件分支預測器112是否一起參與指令字節塊124中可能存在的有效、跳轉分支指令的方向預測。如果是的話,則控制邏輯114將其輸出的最終結果,該側預測的第一條有效跳轉分支指令的分支目標地址144/146提供給取指單元101,以將程序流重定向到所選的目標地址144/146。流程在塊214結束。為了理解圖1的分支預測器100的優點,現在將相對于圖3描述常規的分支預測器300。圖3的常規的分支預測器300在許多方面類似于圖1的分支預測器100。但是,圖3的散列邏輯306不從BTAC108接收字節偏移154/156且不使用它們來形成每個條件分支指令的地址。而是,圖3的散列邏輯306以分支轉移歷史104和塊地址122進行散列,以生成提供給各個側A和B的兩個單獨的條件分支預測器312A和312B兩者的公用索引364。更具體地說,每一側具有單獨的存儲器陣列,且常規的分支預測器300在其預測信息位于BTAC108的側A中的條件分支指令的執行時更新側A條件分支預測器112A,并在其預測信息位于BTAC108的側B中的條件分支指令的執行時更新側B條件分支預測器112B。如可能觀察到的,圖1的分支預測器100具有由其散列邏輯106生成的索引164/166可能比由常規的散列邏輯306生成的索引364更精確的優點,因為常規的散列邏輯306僅使用塊地址122進行散列,然而因為如上所述,圖1的實施例的散列邏輯106具有使用條件分支指令的字節偏移154/156的益處,該散列邏輯106使用每一個條件分支指令的精確地址進行散列。如另外可能觀察到的,圖1的分支預測器100具有每一索引164/166能夠在比常規的分支預測器300更大的存儲器陣列中查找方向預測信息的潛在優點。也就是,假定與圖3的兩個陣列312A和312B中條目的組合數目相同的圖1的單個陣列112中的條目數目N,且給定圖3的兩個陣列312A和312B分開地更新且因此包括不同信息,圖1的實施例的兩個索引164/166每個開始搜索全部N個條目,然而常規的分支預測器300使得單個索引364搜索圖3的兩個陣列312A和312B的N個條目的每一半。應當理解,可能獲得該潛在的優點作為因為圖1的實施例的單個陣列112是雙端口的然而圖3的兩個陣列312A和312B中的每一個可能是單端口的而圖1的實施例的單個陣列112可能更大的事實的折衷。如上所述,分支預測器100具有等待時間,即,其在接收塊地址122和分支轉移歷史104之后可能需要多個時鐘周期以將取指單元101重定向到最終預測的目標地址128。假定分支預測器100的等待時間是N個時鐘周期。在一個實施例中,當取指單元101重定向時,取指單元101在目標地址128啟動指令字節塊124的取出,且對于下一N-1時鐘周期啟動順序取出,同時分支預測器100生成在重定向的目標地址128取出的指令字節塊124的預測。也就是,取指單元101假定分支不跳轉。如果在N個時鐘周期之后分支預測器100重定向,這指示該假定不正確,則使順序地不正確地取出的N-1個指令字節塊124無效,即,實際上從指令隊列去除,這可能導致隊列不提供足夠的指令給指令譯碼器以保持執行流水線良好地使用。因此,應該另外理解圖1的實施例的潛在優點可以作為以下事實的折衷獲得:在一些實現中,BTAC108和散列邏輯106的等待時間可能充分地大以使得分支預測器100需要相對常規的分支預測器300的附加的時鐘周期,這可能具有更頻繁地保持隊列較不滿的后果。但是,特定的實現是否導致該折衷取決于處理技術、時鐘周期時段和邏輯門路徑長度。現在描述的實施例具有的潛在優點在于它可以通過使用兩個不同的分支指令地址生成兩個分開的索引,來增加條件分支指令方向預測的精度,如圖1的實施例所做的,但是不會導致與等待BTAC108生成字節偏移154/156以執行散列以生成索引164/166相關聯的延遲的產生,且因此更不可能增加分支預測器100的總體等待時間。應當理解,可以以比圖1的實施例更少精度的代價(則是由于以分支轉移歷史104散列的兩個形成的條件分支指令地址的更小精度),潛在地獲得第二個優點,如以下更詳細地描述的。現在參考圖4,示出了圖解根據替代實施例的具有分支預測器100的處理器103的框圖。圖4的實施例在許多方面與圖1的實施例類似。但是,圖4的散列邏輯406接收用于形成以分支轉移歷史104散列的兩個不同的分支指令地址的兩個預定值以生成提供給條件分支預測器112的側A索引A164和側B索引B166,而不是從BTAC108接收字節偏移154/156。在圖4中示出的實施例中,兩個預定值是零(“0”)454和一(“1”)456。優選地,散列邏輯106通過級聯該零值454與塊地址122而形成第一分支指令地址,并通過級聯該一值456與塊地址122而形成第二分支指令地址,并以分支轉移歷史104散列這兩個地址中的每一個以生成索引164/166。優選地,散列邏輯106以類似于相對于圖1描述的方式執行兩個散列,雖然可考慮其他散列實施例。圖1和圖4的實施例之間的另一差異在于,與控制邏輯114關聯方向A174與目標地址A144和字節偏移A154并關聯方向B176與目標地址B146和字節偏移B156的圖1的實施例不同,圖4的實施例的控制邏輯414關聯方向A174與兩個目標地址144/146中具有兩個字節偏移154/156中最小的字節偏移的一側,并關聯方向B146與兩個目標地址144/146中具有兩個字節偏移154/156中最大的字節偏移的一側。圖1和圖4的實施例之間的又一差異在于,與條件分支指令的實際地址用于更新條件分支預測器112的圖1的實施例不同,圖4的實施例也保持由散列邏輯106計算的索引164/166,并使用他們中適當的一個來在已經執行了條件分支指令之后更新條件分支預測器112。現在參考圖5,示出了圖示圖4的分支預測器100的操作的流程圖。類似圖2,圖5意在圖示以向下方式的時間的推移,和在水平地彼此平行的塊中執行的動作實質上彼此并行地發生。流程始于塊202。在塊202,取指單元101生成塊地址122并將其提供到圖4的指令高速緩存102、BTAC108和散列邏輯406。流程并行地進行到塊204、206和508。在塊204,指令高速緩存102輸出指令字節塊124。流程進行到塊514。在塊206,BTAC108輸出對于每一側,即,對于側A和側B的預測的目標地址144/146、字節偏移154/156和命中132。流程進行到塊514。在塊508,散列邏輯406以分支轉移歷史104散列由塊地址122和零值454和一值456形成的兩個分支指令地址中的每一個以生成側A和側B的索引164/166。流程進行到塊212。在塊212,條件分支預測器112接收索引164/166并響應于此生成側A和側B的方向預測174/176和命中172。流程進行到塊514。在塊514,控制邏輯414檢查字節偏移154/156以確定哪一個較小和哪一個較大。控制邏輯414關聯方向預測A174與其BTAC108的一側具有兩個字節偏移154/156中較小的字節偏移的目標地址154/156,并關聯方向預測B176與其BTAC108的一側具有兩個字節偏移154/156中較大的字節偏移的目標地址154/156。基于此,控制邏輯414確定BTAC108和條件分支預測器112是否一起預測在指令字節塊124中存在有效、看到、跳轉的分支指令。如果是的話,則控制邏輯414在最終結果128上向取指單元101輸出具有首個有效、看到、跳轉的分支指令的一側的目標地址144/146,以將程序流重定向到所選的目標地址144/146。流程在塊514結束。圖4的實施例的潛在優點在于因為條件分支預測器112不使用由BTAC108生成的字節偏移154/156且因此不需要等待BTAC108產生它們,所以條件分支預測器112在與BTAC108產生其輸出的同一時鐘周期中產生方向174/176(和命中172)。因此,在一些實現中,圖4的分支預測器100能夠使得其最終預測128比圖1的分支預測器100早一時鐘周期。在由于由散列邏輯406散列的分支指令地址的更小精度導致的潛在地更小的分支預測精度的缺點上理解該優點,這是因為使用恒定的零和一值而不是由BTAC108提供的實際的字節偏移154/156形成分支指令地址。另外,在當新分支指令分配到BTAC108中時的潛在缺點上理解該優點。如上所述,這是因為圖4的實施例的控制邏輯414基于它們關聯的字節偏移154/156的相對大小來關聯方向174/176與目標地址144/146的事實。更具體地說,新分支指令可能具有與它替換的分支指令的字節偏移不同的字節偏移。因此,相對于BTAC108的另一側的剩余字節偏移,指令字節塊124內的兩個分支指令的相對位置可能有改變(即,從較小的偏移改變為較大的偏移或者反之亦然),以使得分支預測器100對于兩個分支指令的幾個實例可能使用錯誤的預測信息直到更新分支歷史信息為止。雖然在這里已經描述了本發明的各種實施例,應當理解它們已經通過示例的方式呈現,而不是限制。對于相關計算機領域中的普通技術人員很明顯可以在其中做出形式和細節的各種改變而不脫離本發明的范圍。例如,軟件例如可以使能在這里描述的設備和方法的功能、制造、建模、模擬、描述和/或測試。這可以通過通用編程語言(例如,C,C++)、包括VerilogHDL、VHDL等的硬件描述語言(HDL)或者其他可用程序的使用實現。這種軟件可以以任何已知的計算機可用介質配置,比如磁帶、半導體、磁盤或者光盤(例如,CD-ROM、DVD-ROM等)、網絡,有線線路或者其他通信介質。在這里描述的設備和方法的實施例可以包括在半導體知識產權核心中,比如處理器核心(例如,以HDL具實現或者指定)和可以變換為集成電路的生產中的硬件。另外,在這里描述的設備和方法可以具體表現為硬件和軟件的組合。因此,本發明不應該由在這里描述的任何示例性實施例限制,而是應該僅根據以下權利要求和它們的等同物來定義。特別地,本發明可以在通用計算機中使用的處理器裝置內實現。最終,本領域技術人員應該認可,他們可以容易地使用公開的概念和特定實施例作為設計或者修改其他結構以進行本發明的相同目的的基礎,而不脫離本發明如所附權利要求所定義的精神和保護范圍。當前第1頁1 2 3 當前第1頁1 2 3