執(zhí)行期間是否發(fā)生了錯誤(例如,晶體管經(jīng)歷了意外的位翻轉(zhuǎn))。如果未發(fā)生錯誤,可以將指令結(jié)果在寫回階段208寫到處理器的高速緩沖存儲器107中。圖2僅僅出于例示目的;在不同的實(shí)施例中,流水線可以具有任何合適數(shù)目的階段。
[0020]圖3顯示了系統(tǒng)300的一個實(shí)施例,該系統(tǒng)300包括BTB/BHT 302以及相關(guān)邏輯,BTB/BHT 302可以包括圖1中的BTB/BHT 106。圖3所示的BTB/BHT 302包括一個全關(guān)聯(lián)的BTB/BHTo由BTB/BHT 302在檢索地址輸入301從分支預(yù)測邏輯105接收一個包括分支指令地址的檢索地址,并確定條目303A-N中的任何一個是否對應(yīng)于在檢索地址輸入301接收的檢索地址。如果確定在BTB/BHT 302中存在匹配該檢索地址的條目、例如條目303A,則命中邏輯304確定目標(biāo)地址和預(yù)測數(shù)據(jù)并在目標(biāo)地址和預(yù)測輸出305將其從條目303A輸出到分支預(yù)測邏輯105。預(yù)測數(shù)據(jù)可以包含分支方向預(yù)測、目標(biāo)地址預(yù)測和置信度數(shù)據(jù),將在下面參考附圖4更加詳細(xì)地討論。圖3僅僅出于例示目的;BTB/BHT可以包括任何適當(dāng)數(shù)目的條目,并且,在不同的實(shí)施例中,可以將這些條目組織成兩個或更多個同余類(congruenceclasses)。
[0021]圖4顯示了 BTB/BHT條目400的一個實(shí)施例,其可以包含如圖3所示的BTB/BHT條目303A-N中的每一個。BTB/BHT條目400包括對應(yīng)于分支指令的指令地址的標(biāo)簽401 ;如果標(biāo)簽401匹配檢索地址,則確定條目303A-N中的一個條目與在檢索地址輸入301所接收的特定檢索地址相匹配。BTB/BHT條目400還包括目標(biāo)地址402,其包括要在對應(yīng)于條目400的選擇分支指令之后執(zhí)行的目標(biāo)指令、即下一個指令的地址。飽和預(yù)測計數(shù)器403指示對應(yīng)于目標(biāo)地址402的指令是預(yù)測或主路徑,還是非預(yù)測或相對路徑。在一些實(shí)施例中,飽和預(yù)測計數(shù)器403可以包括一個2位的飽和計數(shù)器;飽和預(yù)測計數(shù)器403可以包括可以用于分支預(yù)測的任何合適的計數(shù)器,并且可以已任何適當(dāng)?shù)姆绞皆龃蠛蜏p小。
[0022]由于處理器101中執(zhí)行額外線程的SMT資源103有限,只有置信度低于置信度閾值的分支指令才會啟動新的相對路徑線程。正確計數(shù)器404和錯誤計數(shù)器405跟蹤對應(yīng)于條目400的分支指令的正確預(yù)測和錯誤預(yù)測的數(shù)目,并用于確定由飽和預(yù)測計數(shù)器403給出的分支預(yù)測的置信度。由飽和預(yù)測計數(shù)器403給出的分支預(yù)測的置信度可以由正確計數(shù)器404的值除以正確計數(shù)器404的值與錯誤計數(shù)器405的值之和來給出。如果在對應(yīng)于條目400的分支指令的分支解析處確定分支方向已由飽和預(yù)測計數(shù)器403正確地預(yù)測,則正確計數(shù)器404增大;如果確定分支方向已被錯誤地預(yù)測,則錯誤計數(shù)器405增大??梢栽趯?yīng)于條目400的分支指令的分支解析之后的任何合適的點(diǎn)及時地進(jìn)行正確計數(shù)器404或錯誤計數(shù)器405的增大以及飽和預(yù)測計數(shù)器403的增大/減小。在一些實(shí)施例中,正確計數(shù)器404和錯誤計數(shù)器405中每個可以包括4位計數(shù)器,并且,如果正確/錯誤計數(shù)器404/405中的一個飽和(即,達(dá)到最大計數(shù)值),兩個計數(shù)器404/405都被除以二,將計數(shù)器值向右移動一位,并保留作為最高有效位的位。
[0023]圖5A-B顯示了用于分支預(yù)測的基于置信度閾值的相對路徑執(zhí)行的方法500的流程。參考附圖1 一 4對方法500進(jìn)行討論。首先,在圖5A的方框501,在執(zhí)行對應(yīng)于計算機(jī)程序的主線程期間,遇到分支指令,在BTB/BHT 106/302中檢索具有對應(yīng)于分支指令的指令地址的標(biāo)簽401的條目。當(dāng)在BTB/BHT 106/302中確定一個對應(yīng)的條目(例如,條目303A/400),則在方框502,基于所確定的條目303A/400中的飽和預(yù)測計數(shù)器403,對分支指令作出分支預(yù)測。飽和預(yù)測計數(shù)器403指示對應(yīng)于目標(biāo)地址402的指令是否是預(yù)測的下一指令(即,選擇指令)。接著,在方框503,由分支預(yù)測邏輯105基于正確計數(shù)器404和錯誤計數(shù)器405為在方框502作出的分支預(yù)測確定置信度。置信度可以等于正確計數(shù)器404的值除以正確計數(shù)器404的值與錯誤計數(shù)器405的值之和。接著,流程進(jìn)行到方框504,其中,由分支預(yù)測邏輯105將在方框503確定的置信度與一個置信度閾值進(jìn)行比較。在不同的實(shí)施例中,置信度閾值可以是任何適當(dāng)?shù)闹?,并且在一些?shí)施例中可以包括可變的置信度閾值。在這樣的實(shí)施例中,置信度閾值可以基于目前正被SMT資源103所處理的并行線程的個數(shù)來變化。
[0024]在方框504,如果確定所確定的置信度大于置信度閾值,流程進(jìn)行到方框505,其中,如方框502所作出的預(yù)測所指示的,主線程繼續(xù)沿主路徑執(zhí)行計算機(jī)程序。主路徑線程可以對應(yīng)于在對應(yīng)于計算機(jī)程序中的條目303A/400的不選擇分支指令之后的下一指令,或者經(jīng)由選擇分支到達(dá)對應(yīng)于在條目303A/400中限定的目標(biāo)地址402的指令,這取決于在方框502由飽和預(yù)測計數(shù)器403所給出的分支預(yù)測。然后,當(dāng)在方框505中啟動的主路徑線程到達(dá)方框506中的分支解析時,確定在方框502作出的預(yù)測是否正確,并根據(jù)分支解析更新對應(yīng)于該分支指令的BTB/BHT條目303A/400中的計數(shù)器。如果預(yù)測正確,對應(yīng)于分支指令的BTB/BHT條目303A/400中的正確計數(shù)器404被增大。如果預(yù)測錯誤,流水線102被沖洗,對應(yīng)于分支指令的BTB/BHT條目303A/400中的錯誤計數(shù)器405被增大。飽和預(yù)測計數(shù)器403也被更新,以反映正確或錯誤的分支預(yù)測。
[0025]然而,如果在方框504確定分支預(yù)測的置信度小于置信度閾值,則流程從方框504進(jìn)行到方框507,主線程對應(yīng)于主路徑繼續(xù)執(zhí)行,并由分支預(yù)測邏輯105為非預(yù)測(即相對)路徑開始一個新的并行線程。相對路徑線程可以對應(yīng)于計算機(jī)程序中在對應(yīng)于條目303A/400的分支指令之后的下一個順序指令,也可以對應(yīng)于在對應(yīng)于條目303A/400中限定的目標(biāo)地址402的指令,這取決于在方框502由飽和預(yù)測計數(shù)器403所給出的預(yù)測。由SMT資源103處理相對路徑線程??梢詫?yīng)于相對路徑線程的一組指令定義為采用事務(wù)存儲器104的事務(wù),這樣,由相對路徑線程完成的操作的結(jié)果可以存儲在事務(wù)存儲器104中,直到分支完成。
[0026]在方框507啟動相對路徑線程受限于目前正由處理器101中的SMT資源103處理的線程數(shù)目,因?yàn)镾MT資源103 —次能夠處理的線程會有一個最大數(shù)目限制。如果在處理器101中執(zhí)行的線程數(shù)目在其最大數(shù)目上,則在一些實(shí)施例中,不能在方框507啟動相對路徑線程。在其他實(shí)施例中,可以將在方框503為相對路徑線程確定的置信度與另一個已經(jīng)存在的目前正在由SMT資源103執(zhí)行的相對路徑線程的置信度進(jìn)行比較,如果當(dāng)前相對路徑線程的置信度低于已經(jīng)存在的相對路徑線程,則中止已經(jīng)存在的相對路徑線程,在該處啟動當(dāng)前相對路徑線程。在一些實(shí)施例中,主路徑線程可以具有高于相對路徑線程的優(yōu)先級。在一些實(shí)施例中,還可以基于在方框503確定的置信度來分配優(yōu)先級。
[0027]流程從方法500的方框507進(jìn)行到圖5B中的方框508,其中,對應(yīng)于BTB/BHT條目400/303A的分支指令的分支解析出現(xiàn)在流水線102/200中,并且知道了分支指令的正確路徑。接著,在方框509,基于方框508的分支解析,確定在方框502為分支指令作出的分支預(yù)測是否正確。如果在方框509確定分支預(yù)測是正確的,流程進(jìn)行到方框510,在這里,分支預(yù)測邏輯105使得相對路徑線程中止。中止相對路徑線程可以包括由事務(wù)存儲器104退回對應(yīng)于相對路徑線程的事務(wù)。主路徑線程繼續(xù)計算機(jī)程序的執(zhí)行。最后,在方框511,對應(yīng)于分支指令的BTB/BHT條目303A/400中的正確計數(shù)器404被增大,飽和預(yù)測計數(shù)器403也被更新,以反映正確的分支預(yù)測。
[0028]然而,如果在方框508基于方框507的分支解析確定在方框502為分支指令作出的分支預(yù)測是錯誤的,則流程從方框509進(jìn)行到方框512,在這里,分支預(yù)測邏輯105使得主路徑線程中止。在一些實(shí)施例中,中止主路徑線程可以包括沖洗流水線101/200中對應(yīng)于主路徑線程的任何指令。接著,在方框513,對應(yīng)于分支指令的BTB/BHT條目303A/400中的錯誤計數(shù)器405被增大,飽和預(yù)測計數(shù)器403也被更新,以反映錯誤的分支預(yù)測。最后,在方框514,對應(yīng)于相對路徑線程的事務(wù)被結(jié)束,并從事務(wù)存儲器104提交給高速緩沖存儲器107,相對路徑線程作為計算機(jī)程序的主線程繼續(xù)執(zhí)行。可以在分支到達(dá)流水線102/200中的完成階段206之后提交該事務(wù),因?yàn)榉种Ы馕鍪菬o序執(zhí)行的,而完成是按序執(zhí)行的。在一些情況下,有可能對于對應(yīng)于一個較早分支的另一個線程,確定分支預(yù)測錯誤,并在較晚分支已經(jīng)到達(dá)分支解析之后并且該較晚分支到達(dá)完成之前,沖洗掉這個較晚的分支。
[0029]如在圖5A-B的方法500的方框510和512中所執(zhí)行的,中止線程使得SMT資源103的專用于被中止的線程的一部分能夠被恢復(fù)到自由池中,以供用于為將來的低置信度分支預(yù)測啟動相對路徑線程。取決于處理器101