用于分支預測的基于置信度閾值的相對路徑執(zhí)行的制作方法
【專利說明】
【背景技術】
[0001]本發(fā)明一般地涉及計算機處理器中的分支預測,更具體地,涉及用于分支預測的基于置信度閾值的相對路徑(opposing path)執(zhí)行。
[0002]計算機系統(tǒng)中的處理器可以通過在一系列小的步驟或操作中執(zhí)行指令來處理指令。在某些情況下,為了提高處理器所處理的指令數(shù)目,并因而提高處理器的速度,可以對處理器流水線化。流水線化指的是在處理器中提供分離的階段(stage),其中,每個階段完成對于執(zhí)行一個指令來說所必須的小步驟中的一個或多個。作為在流水線中執(zhí)行指令的一個例子,當接收到第一指令時,第一流水線階段可以處理該指令的一小部分。當?shù)谝涣魉€階段完成對該小部分指令的處理時,第二流水線階段可以開始處理該第一指令的另一小部分,與此同時,第一流水線階段接收并開始處理第二指令的一小部分。這樣,處理器可以在同一時間并行地處理兩個或更多個指令。
[0003]計算機程序可以包括分支指令,如果滿足分支指令限定的條件,該分支指令使得計算機程序從一個指令分支到一個目標指令(從而跳過順序指令,如果有的話)。如果條件不滿足,則執(zhí)行在順序上在該分支指令之后的下一指令,而不分支到目標指令。典型地,直到該分支指令被執(zhí)行并且其條件被檢測,才知道被檢測的條件的結果。這樣,直到條件被檢測時,才知道要在分支指令之后執(zhí)行的正確的下一指令。
[0004]在利用流水線來執(zhí)行指令時,分支指令的結果直到分支解析(branchresolut1n)之后才能被知道,此時該分支指令已經(jīng)經(jīng)過了流水線的幾個階段。這樣,直到分支指令已經(jīng)經(jīng)過了確定條件的結果所必須的階段之后,才能夠知道在分支指令之后要被執(zhí)行的正確的下一指令。在某些情況下,流水線中的指令的執(zhí)行可能會被停頓(例如,可能不能使用在該分支指令之前的流水線的階段來執(zhí)行指令),直到分支解析。當流水線被停頓時,流水線不能用于并行地執(zhí)行很多指令,降低了整個處理器效率。
[0005]在另外一些情況下,為了提高處理器效率,可以使用分支預測來預測分支指令的結果。例如,在遇到一個分支指令時,處理器可以預測在知道了條件的結果之后哪個指令或路徑會被執(zhí)行。然后,在發(fā)出分支指令時,處理器不會停頓流水線,而是會繼續(xù)發(fā)出從該預測的下一指令開始的指令。分支指令的預測路徑可以被稱為主路徑,非預測路徑可以被稱為相對路徑。
[0006]然而,在某些情況下,分支預測可能是不正確的(例如,處理器可能預測了分支指令的一個結果,但在分支解析時,產(chǎn)生了相反的結果)。當分支指令的結果被錯誤預測時,會將基于該分支預測向流水線發(fā)出的預測指令從流水線移去,這些指令的原本要作為檢查點的效果被撤銷。這被稱為沖洗流水線。然后,在流水線被沖洗之后,對于該分支指令,會向流水線發(fā)出對應于相對路徑的正確的下一指令,并繼續(xù)指令的執(zhí)行。當分支指令的結果被錯誤地預測并且對應于主路徑的一組錯誤預測的指令被從流水線沖洗、從而撤銷流水線之前所做工作時,處理器的效率會降低。
【發(fā)明內(nèi)容】
[0007]實施例包括用于分支預測的基于置信度閾值的相對路徑執(zhí)行的系統(tǒng)、方法和計算機程序產(chǎn)品。一個方面包括,為在執(zhí)行第一線程期間所遇到的第一分支指令確定分支預測,其中,該分支預測為該第一分支指令指示主路徑和相對路徑。另一個方面包括,由第一線程執(zhí)行該主路徑。另一個方面包括,確定該分支預測的置信度,并將該分支預測的置信度與置信度閾值進行比較。又一個方面包括,基于該分支預測的置信度低于該置信度閾值,啟動執(zhí)行第一分支指令的相對路徑的第二線程,其中,第二線程與第一線程并行執(zhí)行。
【附圖說明】
[0008]作為實施例的主題在說明書后面的權利要求書中特別地指出并要求保護。這些實施例的前述和其他特征和優(yōu)點從結合附圖進行的下面的描述中變得明顯,其中:
[0009]圖1顯示了根據(jù)一個實施例的用于分支預測的基于置信度閾值的相對路徑執(zhí)行的計算機系統(tǒng);
[0010]圖2顯示了根據(jù)一個實施例的流水線;
[0011]圖3顯示了根據(jù)一個實施例的分支目標緩存器/分支歷史表;
[0012]圖4顯示了根據(jù)一個實施例的用于分支目標緩存器/分支歷史表的條目(entry);
[0013]圖5A-B顯示了根據(jù)一個實施例的用于分支預測的基于置信度閾值的相對路徑執(zhí)行的流程;
[0014]圖6顯示了根據(jù)一個實施例的用于分支預測的基于置信度閾值的相對路徑執(zhí)行的執(zhí)行;以及
[0015]圖7顯示了根據(jù)一個實施例的計算機程序產(chǎn)品。
【具體實施方式】
[0016]這里提供了用于分支預測的基于置信度閾值的相對路徑執(zhí)行的系統(tǒng)和方法的實施例,其例示性實施例將在下面詳細描述??梢砸愿咧眯哦然虻椭眯哦阮A測分支指令。可以基于在處理器中定義的置信度閾值來確定置信度級別。對于以低置信度預測的分支指令,預測路徑(即主路徑)和非預測路徑(即相對路徑)可以作為對應于包括該分支指令的程序的兩個單獨的線程并行地執(zhí)行。隨著分支指令的條件的解析,在正確路徑被確定時,對應于正確路徑的線程可以作為程序的主線程繼續(xù)執(zhí)行,而對應于錯誤路徑的線程可以被中止。如果確定相對路徑線程是正確路徑,相對路徑線程作為程序的主線程,替代被中止的主路徑線程。為了能夠相對精確地確定預測置信度,可以在分支目標緩沖器/分支歷史表(BTB/BHT)中為每個分支指令維護用來跟蹤正確的和錯誤的分支預測的計數(shù)器。
[0017]處理器可以包括同時多線程(SMT)處理器,其能夠并行地執(zhí)行多個線程。SMT處理器可以具有由SMT處理器一次能夠處理的最大數(shù)目的線程。處理器另外還可以包括事務存儲器資源。事務存儲器允許一組指令被定義為一個事務,執(zhí)行該事務的結果可以存儲在事務存儲器中,而不必存儲在處理器的高速緩沖存儲器中。如果事務被中止,處理器通過將事務存儲器中的事務結果無效并舍棄,可以將包含該事務的一組指令倒回到該事務的起始。如果該事務被成功完成,則事務的結果被提交(committed),即,從事務存儲器傳送到高速緩沖存儲器。對應于分支指令的相對路徑的線程可以運行為一個使用事務存儲器資源的事務。因此,如果在分支解析時確定該對應于相對路徑的線程是錯誤路徑,在該相對路徑線程被中止時,相對路徑線程的結果可以被倒回。另一方面,如果在分支解析時確定相對路徑線程是正確路徑,則事務結束,由相對路徑線程執(zhí)行的操作可以從事務存儲器提交到高速緩沖存儲器中。
[0018]圖1顯示了用于分支預測的基于置信度閾值的相對路徑執(zhí)行的計算系統(tǒng)100的例示性實施例。計算系統(tǒng)100包括具有流水線102的處理器101。處理器101與計算系統(tǒng)100的主存儲器108通信,在執(zhí)行諸如應用程序109的計算機程序期間發(fā)出的指令由流水線102處理。處理器101是SMT處理器,其能夠利用SMT資源103同時并行地運行多個線程。處理器101還包括事務存儲器104。對于被定義為事務的指令集合,由該事務執(zhí)行的所有操作的結果可以存儲在事務存儲器104中,直到該事務被提交,此時,可以將事務的結果從事務存儲器104傳送到高速緩存存儲器107。高速緩存存儲器107可以包括任何適當數(shù)目和類型的高速緩存器,包括但不限于指令高速緩存器和數(shù)據(jù)高速緩存器。分支預測由分支預測邏輯105處理。分支選擇緩沖器/分支歷史表BTB/BHT 106保持對應于用于分支預測的分支指令地址的條目,將在后面參考附圖3和4對其進行更詳細說明。分支預測邏輯105還基于根據(jù)BTB/BHT 106中的信息作出的分支預測的置信度,確定是否啟動分支指令的相對路徑的線程??梢曰谠诜种ьA測邏輯105中預定的置信度閾值以及正在由SMT資源103處理的線程個數(shù)來作出該確定。在某些實施例中,由分支預測邏輯105用來確定是否啟動相對路徑線程的置信度閾值可以包括可變的置信度閾值;在這樣的實施例中,置信度閾值可以基于正在由SMT資源103處理的并行線程的個數(shù)而變化。例如,如果只有主線程正在執(zhí)行,置信度閾值可以相對較低,隨著另外的相對線程開始執(zhí)行,置信度閾值可以增大。另外,在一些實施例中,基于與一個線程相關聯(lián)的預測置信度以及該線程是主線程還是相對線程,該線程在執(zhí)行期間對于處理器101的資源可以具有更高的訪問優(yōu)先級。分支預測邏輯105另外還可以啟動對在分支解析處確定為不正確的線程的中止。
[0019]圖2顯示了具有多個階段201 - 208的流水線200的例示實施例,其可以包括圖1中的流水線102。指令從取指(fetch)階段201到寫回階段208經(jīng)過流水線200。在取指、譯碼和調(diào)度(dispatch)階段201 — 203,指令是按序處理的。在發(fā)出/執(zhí)行階段204,隨著執(zhí)行指令所必須的數(shù)據(jù)可用,指令可以無序執(zhí)行。然后在重排序階段205將這些指令重新排序,并在完成、檢查點和寫回階段206 — 208按序執(zhí)行。在不同的實施例中,分支指令的分支預測可以在流水線的前端、例如在取指階段201、譯碼階段202或更早時執(zhí)行,而分支指令的分支解析可以發(fā)生在發(fā)出/執(zhí)行階段204。在檢查點階段207,確定在指令