專利名稱::通過循環結束分支來抑制分支歷史寄存器的更新的制作方法
技術領域:
:本發明大體上涉及處理器領域,且更確切地說涉及一種通過用循環結束分支指令抑制對分支歷史寄存器的更新而改進分支預測的方法。技術背景微處理器在廣泛的應用中執行計算任務。幾乎始終需要改進的處理器性能以允許通過軟件變化來實現較快的操作和/或增加的功能性。在許多嵌入式應用(例如,便攜式電子裝置)中,節省功率也是處理器設計和實施的一個目標。許多現代處理器使用管線結構,其中連續的指令(各具有多個執行步驟)在執行時重疊。為了實現改進的性能,指令應當連續流動穿過管線。任何導致指令在管線中停滯的情形均可對性能造成不利影響。如果從管線中沖洗(flush)指令并隨后重新取得指令,那么性能和功率消耗均會受到損害。大多數程序包含條件分支指令,直到在管線深處評估指令時才會知道其實際分支行為。為了避免因等待對分支指令的實際評估而產生的停滯,現代處理器可采用某種形式的分支預測,借此在管線中早期預測條件分支指令的分支行為。基于預測出的分支評估,處理器以推測方式從預測出的地址取得(預取)并執行指令,所述預測出的地址是分支目標地址(如果預測會采用分支)或分支指令之后的下一順序地址(如果預測不會采用分支)。當確定了實際分支行為時,如果分支被錯誤預測,那么必須從管線中沖洗以推測方式取得的指令,并從下一正確地址取得新的指令。響應于錯誤的分支預測而預取指令可對處理器性能和功率消耗造成不利影響。因此,改進分支預測的準確性是一個重要的設計目標。已知的分支預測技術包含靜態和動態兩種預測。可通過編程器和/或編譯器來靜態地預測一些分支指令的可能行為。分支預測的一個實例是錯誤檢驗例行程序。代碼通常會正確執行,且錯誤是罕見的。因此,實施"遇錯誤分支(branchcmerror)"的分支指令將在非常高的百分比的時間中評估"不采用"。此種指令可在操作碼中包含靜態分支預測位,所述預測位是由編程器或編譯器在知道分支條件的最可能結果的情況下設定的。動態預測一般基于正被預測的分支指令和/或同一代碼中的其它分支指令的分支評估歷史(且在一些情況下是分支預測準確性歷史)。對實際代碼的廣泛分析指示,最近過去的分支評估模式可能是對未來分支指令的評估的良好指示。圖1中描繪的一種己知形式的動態分支預測利用分支歷史寄存器(BHR)100來存儲過去n個分支評估。在簡單的實施方案中,BHR30包括移位寄存器。將最近的分支評估結果移入(例如,1指示采用分支且O指示不采用分支),而寄存器中的最早過去的評估被取代。處理器可針對每個分支指令維持局部BHRIOO。或者(或另外),BHR100可含有對所有條件分支指令的最近過去的評估,其有時在此項技術中稱為全局BHR或GHR。如本文所使用,BHR指代局部和全局分支歷史寄存器兩者。如圖1中所描繪,BHRIOO可將分支預測器表(BPT)102編索引,所述BPT102同樣可以是局部的或全局的。BHRIOO可直接將BPT102編索引,或者可在BPT索引邏輯104中與例如分支指令的程序計數器(PC)的其它信息組合。另外可利用對BPT索引邏輯104的其它輸入。BPT索引邏輯104可將輸入鏈接在一起(此項技術中通常稱為gselect),對輸入進行異或運算(gshare),執行散列函數,或以多種方式組合或轉換輸入。在一個實例中,BPT102可包括多個飽和計數器,其MSB充當雙模態分支預測^H。舉例來說,每個表條目可包括2位計數器,所述計數器采用四種狀態中的一種,所述四種狀態中的每一者被指派有加權預測值,例如ll一強力預測采用IO—弱預測采用Ol—弱預測不采用OO—強力預測不采用每當相應的分支指令評估"采用"時,所述計數器遞增,且每當指令評估"不采用"時,所述計數器遞減。計數器的MSB是雙模態分支預測器,其將預測一個分支是采用還是不采用,而不管基礎預測的強度或權重如何。飽和計數器減少不頻繁的分支評估的預測錯誤。始終單向評估的分支將使計數器飽和。相反地不頻繁評估將改變計數器值(以及預測的強度),但不是雙模態預測值。因此,不頻繁的評估將只錯誤預測一次而不是兩次。飽和計數器的表只是說明性實例,一般來說,BHT可將含有多種分支預測機制的表編索引。不論在BPT102中采用哪種分支預測機制,BHR100(單獨的或與例如分支指令PC的其它信息組合)將BPT102編索引以獲得分支預測。通過在BHR100中存儲先前分支評估并在分支預測中使用所述評估,使正被預測的分支指令與過去的分支行為相關一一在局部BHR100的情況下為其自身的過去行為而在全局BHR100的情況下為其它分支指令的行為。這種相關至少在高度重復的代碼的情況下可能是準確的分支預測的關鍵。請注意,圖1描繪存儲在BHR100中的分支評估,即對條件分支指令的實際評估,其可能只有在管線深處(例如在執行管級中)才被了解。雖然這是最終結果,但在實踐中,許多高性能處理器將來自BPT102的預測出的分支評估存儲在BHR100中,并之后在證實預測錯誤時作為錯誤預測恢復操作的一部分而對BHRIOO進行校正。為了清晰起見,附圖未反映這種實施特征。可能會降低采用BHR100的分支預測器的功效的一種常用代碼結構是循環。循環以測試循環結束條件的條件分支指令結束,所述循環結束條件例如為每次通過循環時遞增的索引變量是否己達到循環結束值。如果沒有,那么執行形成分支回到循環的開始處以進行另一次迭代和另一次循環結束條件分支評估。相對于n位BHR100,存在關于循環的三種相關情況循環不執行;循環通過m次迭代執行(其中iiKn);和循環執行m次(其中m>=n)。如果循環不執行,那么循環開始處的就向分支在循環主體上形成分支,從而產生一個采用的分支評估。這對BHRIOO具有最小影響,因為BHR100中的過去分支評估歷史只由一個分支評估取代(實際上,預測準確性可通過與這個分支評估的相關來改進)。如果循環通過m次迭代來執行(其中m〉-n),那么循環結束分支指令的"采用"后向分支使BHR100飽和。也就是說,在循環結束時,n位BHR將始終含有恰好n—l個一且后面跟著單個零,這對應于由循環迭代產生的較長系列的采用的評估,且在循環終止時以單個未采用評估結束。這實際上損害BHR100的功效,因為與先前分支評估(對于局部或全局BHR100)的所有相關全部丟失。在此情況下,BHRIOO將很可能映射到相同的BPT102條目以獲取給定的分支指令(視對BPT索引邏輯104的其它輸入而定),而不是映射到含有反映分支指令與先前分支評估的相關的分支預測的條目。此外,飽和的BHR100可增加BPT102中的混淆。也就是說,如果BHR100直接將BPT102編索引,那么具有許多迭代的循環之后的所有分支指令將映射到相同的BPT102條目。即使在BHR100與其它信息組合的情況下,混淆的可能性也會增加。這不但對于循環之后的分支指令而且對于混淆到其在BPT102中的條目的所有分支指令,均會不利地影響預測準確性。如果循環通過m次迭代執行(其中m<n),那么BHR100不飽和且保持某一先前分支評估歷史。然而,代表先前分支評估歷史的位被m個位位置取代。特別在m變化的情況下,這對分支預測具有兩個有害影響。首先,分支指令將映射到BPT102中的更大數目的條目,以俘獲與先前分支評估的相同相關,從而與沒有循環結束分支影響BHR30的情況下將需要的BPT102相比,對于相同數目的分支指令需要更大的BPT102來支持相同的準確性。第二,BPT102中的分支預測器將花費較長時間來"訓練",從而增加了在BPT102開始提供準確的分支預測之前必須執行的代碼量。舉例來說,考慮8位BHR100和一代碼段,其具有分支指令A-H,接著是循環,且接下來是分支指令X。分支X與分支G和H的評估歷史強力相關。插入的循環的各種迭代將在預測X時產生下表1中呈現的BHR結果。<table>tableseeoriginaldocumentpage7</column></row><table>表h各種數目的循環迭代之后的BHR100內容在此實例中,每種情況下BHR100中均存在正被預測的分支指令X與對分支G和H的先前評估之間的所需相關。然而,其位于BHR100中的不同位置,且因此每種情況將映射到不同的BPT102條目。這會浪費BPT102空間,增加分支預測訓練時間,并增加BPT102中的混淆的可能性,所有這些都會降低預測準確性。
發明內容在一個或一個以上實施例中,通過識別循環結束分支指令并響應于循環結束指令而抑制對BHR的更新來改善在BHR中存儲循環結束的分支指令評估的不良影響。以多種方式識別循環結束指令。在一個實施例中,分支預測方法包含響應于分支指令的性質而在分支指令執行時視情況抑制對BHR的更新。在另一實施例中,處理器包含分支預測器,其可操作以預測對條件分支指令的評估;以及指令執行管線,其可操作以基于來自分支預測器的預測以推測方式取得和執行指令。所述處理器還包含BHR,其可操作以存儲對條件分支指令的評估;以及控制電路,其可操作以響應于分支指令的性質而抑制存儲對條件分支指令的評估。在又一實施例中,可操作以響應于程序代碼而產生指令的編譯器或匯編器包含可操作以指示終止代碼循環的條件分支指令的循環結束分支指令標記功能。圖1是現有技術分支預測器電路的功能方框圖。圖2是處理器的功能方框圖。圖3是執行分支指令的方法的流程圖。圖4是包含一個或一個以上最后分支PC寄存器的分支預測器電路的功能方框圖。具體實施方式圖1描繪處理器10的功能方框圖。處理器IO根據控制邏輯14在指令執行管線12中執行指令。在一些實施例中,管線12可為超標量設計,其具有多個并行管線。管線12包含組織成管級的各種寄存器或鎖存器16,以及一個或一個以上算術邏輯單元(ALU)18。通用寄存器(GPR)文件20提供包括存儲器層級的頂部的寄存器。管線12從指令高速緩沖存儲器(I-cache)22取得指令,其中由指令側轉譯后備緩沖器(ITLB)24來管理存儲器地址轉譯和許可。當在管線12中早i解碼條件分支指令時,分支預測器26預測分支行為,并向指令預取單元28提供預測。指令預取單元28對于"采用的"分支預測在管線12中計算出的分支目標地址處或對于預測為"不采用"的分支在下一順序地址處以推測方式從指令高速緩沖存儲器22取得指令。在任一情況下,均將預取的指令加載到管線12中以用于推測性執行。分支預測器26包含分支歷史寄存器(BHR)30、分支預測器表(BPT)32、BPT索引邏輯34以及BHR更新邏輯36。分支預測器26可額外包含一個或一個以上最后分支PC寄存器38,本文下文中對其進行更充分描述。從數據高速緩沖存儲器(D-cache)40存取數據,其中由主轉譯后備緩沖器(TLB)42管理存儲器地址轉譯和許可。在各種實施例中,ITLB24可包括TLB42的一部分的副本。或者,ITLB24與TLB42可集成。類似地,在處理器10的各種實施例中,I-cache22與D-cache40可集成或合并。I-cache22和/或D-cache40中的未中導致在存儲器接口46的控制下存取主(芯片外)存儲器44。處理器10可包含輸入/輸出(I/O)接口46,其控制對各種外圍裝置50的存取。所屬領域的技術人員將認識到,處理器10的許多變化形式是可能的。舉例來說,處理器10可包含用于I-cache22和D-cache40中的任一者或兩者的第二層(L2)高速緩沖存儲器。此外,特定實施例中可省略處理器10中描繪的功能塊中的一者或一者以上。根據一個或一個以上實施例,通過防止循環結束分支破壞分支預測器26中的一個或一個以上BHR30來改進分支預測準確性。圖3中將這個過程描繪成流程圖。將條件分支指令解碼(方框52)。確定分支是否為循環結束分支(方框54)。如果不是,那么更新BHR30以記錄分支評估(方框56),即,分支指令評估為"采用"還是"不采用"。執行接著分別在分支目標地址或下一順序地址處繼續(方框58)。如果分支不是循環結束分支,那么抑制更新BHR30以記錄對循環結束分支指令的分支評估(如從方框54到方框58的路徑所指示)。以此方式,循環迭代分支不會通過取代相關分支評估歷史而破壞BHR30的內容。查詢(方框54)將分支指令識別為循環結束分支指令,所述步驟可通過多種方式來實現。循環通過從循環結束處向后向循環開始處形成分支來迭代。根據一個實施例,假設每個分支目標地址小于分支指令地址或PC的條件分支指令(即后向分支)是循環結束分支指令,且防止其更新BHR30。這個實施例提供簡化的優點。在BHR30更新時間,當分支指令實際上在管線中評估時將分支指令PC與分支目標地址(BTA)進行比較。如果BTA<PC,那么不更新B'HR30。這個實施例具有以下缺點當確定分支目標地址時需要進行地址比較,且一些不是循環結束分支的后向分支將不使其評估記錄在BHR30中。另一種檢測循環結束分支的方式是辨別對同一分支指令的重復執行。在圖4中描繪的一個實施例中,最后分支PC(LBPC)寄存器38存儲其評估被存儲在BHR30中的最后分支指令的PC。在簡單循環的情況下,如果分支指令的PC與LBPC38匹配(也就是說,分支指令是所評估的最后分支指令),那么假設分支指令是循環結束分支指令,且抑制對BHR30的進一步更新。如上文參看圖1所論述,雖然圖4描繪在任何給定實施方案中將LBPC38的內容與BHR更新邏輯36中的實際分支評估進行比較,但可將LBPC38與預測的分支評估進行比較,其中在錯誤預測的情況下對BHR30進行校正。這個實施例只存儲循環的第一次迭代,只從BHR30中取代一個先前分支評估。這個實施例不需要編譯器支持,且不需要在BHR30更新時間確定分支的方向。循環可含有一個或一個以上嵌套循環,或者可在循環內包含其它分支。在此情況下,可通過LBPC方法抑制內部循環使BHR30飽和;然而,外部循環結束分支仍然將被存儲在BHR30中。在一個實施例中,可提供兩個或兩個以上LBPC寄存器38,其中將連續評估的分支指令的PC存儲在相應的LBPC寄存器(LBPCo,LBPQ,...LBPCM)38中。如果分支指令的PC與LBPCw寄存器38中的任一者匹配,那么可抑制對BHR30的更新。也可由編譯器或匯編器靜態地標記循環結束分支指令。在一個實施例中,編譯器產生只用于循環結束分支的特定類型的分支指令,例如"BRLP"。辨別BRLP指令,且當BRPE指令在執行管級中評估時決不更新BHR30。在另一實施例中,編譯器或匯編器可例如通過在操作碼中設定一個或一個以上預界定的位而在分支指令中嵌入循環結束分支指示。檢測循環結束分支位,且當所述分支指令在執行管級中評估時抑制對BHR30的更新。對循環結束分支的靜態識別通過將循環結束識別功能移動到編譯器或匯編器中而減小硬件和計算復雜性。條件分支指令可具有許多性質,其中包含(例如)分支指令地址或PC、指令類型和操作碼中是否存在指示位。如本文所使用,將分支操作的性質和/或與分支有關的程序的性質視為分支指令的性質。舉例來說,分支指令PC是否與一個或一個以上LBPC寄存器38的內容匹配以及分支目標地址相對于分支指令PC是正向還是后向的,這些是分支指令的性質。雖然本文中已就本發明的特定特征、方面和實施例描述了本發明,但將了解,在本發明的廣泛范圍內可能有許多變化、修改和其它實施例,且因此,應認為所有變化、修改和實施例均在本發明的范圍內。因此,應在所有方面均將當前實施例理解為說明性的而非限制性的,且希望屬于所附權利要求書的意義和等效范圍內的所有變化均包含在其中。權利要求1.一種分支預測方法,其包括響應于分支指令的性質,在執行所述分支指令時視情況抑制對分支歷史寄存器(BHR)的更新。2.根據權利要求l所述的方法,其中所述分支指令的性質為所述分支是后向的。3.根據權利要求1所述的方法,其中所述分支指令的性質為所述分支是循環結束分支。4.根據權利要求3所述的方法,其中所述分支指令的PC與存儲最后分支指令的PC的最后分支PC(LBPC)寄存器的內容匹配以更新所述BHR。5.根據權利要求4所述的方法,其中所述分支指令的PC與存儲最后多個分支指令的PC的多個LBPC寄存器中的任一者的內容匹配以更新所述BHR。根據權利要求3所述的方法,其中所述分支指,的性質為所述分支指令是由編譯器針產生以用于結束分支的唯一分支指令。6.7.根據權利要求3所述的方法,其中所述分支指令的性質為所述分支指令包含指示其為循環結束分支指令的一個或一個以上位。8.—種處理器,其包括分支預測器,其可操作以預測對條件分支指令的評估;指令執行管線,其可操作以基于來自所述分支預測器的預測以推測方式取得并執行指令;分支歷史寄存器(BHR),其可操作以存儲所述對條件分支指令的評估;以及控制電路,其可操作以響應于所述分支指令的性質而抑制存儲所述對條件分支指令的評估。9.根據權利要求8所述的處理器,其進一步包括最后分支PC(LBPC)寄存器,所述LBPC寄存器可操作以存儲更新所述BHR的分支指令的PC,且其中所述控制電路可操作以在所述分支指令的PC與所述LBPC寄存器的內容匹配時抑制存儲所述對條件分支指令的評估。10.根據權利要求9所述的方法,其進一步包括多個LBPC寄存器,所述多個LBPC寄存器可操作以存儲更新所述BHR的多個分支指令的PC,且其中所述控制電路可操作以在所述分支指令的PC與任何LBPC寄存器的內容匹配時抑制存儲所述對條件分支指令的評估。11.根據權利要求8所述的方法,其中所述控制電路可操作以在所述分支指令包含其為循環結束指令的指示時抑制存儲所述對條件分支指令的評估。12.根據權利要求11所述的方法,其中所述分支指令為循環結束指令的所述指示為指令類型。13.根據權利要求8所述的方法,其中所述控制電路可操作以在分支指令目標地址小于所述分支指令PC時抑制存儲所述對條件分支指令的評估。14.一種編譯器或匯編器,其包括-編譯器或匯編器,其可操作以響應于程序代碼而產生指令;以及循環結束分支指令標記功能,其可操作以指示終止代碼循環的條件分支指令。15.根據權利要求14所述的編譯器或匯編器,其中所述循環結束分支指令標記功能可操作以產生唯一類型的分支指令來結束每一循環。16.根據權利要求14所述的編譯器或匯編器,其中所述循環結束分支指令標記功能可操作以在結束循環的每一條件分支指令中插入循環結束措示符。17.根據權利要求16所述的編譯器或匯編器,其中所述循環結束指示符包括插入在所述條件分支指令操作碼中的預定字段中的一個或一個以上位。18.—種使用存儲對先前條件分支指令的評估的分支歷史寄存器(BHR)的分支預測方法,其包括檢測循環結束分支;以及抑制對將存儲對相關聯分支指令的評估的BHR的更新。19.根據權利要求18所述的方法,其中檢測循環結束分支包括檢測所述相關聯分支指令的PC與存儲最后分支指令的PC的最后分支PC(LBPC)寄存器的內容之間的匹配以更新所述BHR。20.根據權利要求18所述的方法,其中檢測循環結束分支包括檢測所述相關聯分支指令的PC與存儲最后多個分支指令的PC的多個LBPC寄存器中的任一者的內容之間的匹配以更新所述BHR。21.根據權利要求18所述的方法,其中檢測循環結束分支包括解碼由編譯器產生以用于結束分支的唯一分支指令。22.根據權利要求18所述的方法,其中檢測循環結束分支包括檢測所述相關聯分支指令操作碼中指示其為循環結束分支指令的一個或一個以上位。全文摘要檢測終止代碼循環的條件分支指令,且防止分支歷史寄存器(BHR)更新以存儲循環結束分支評估。這防止實施循環迭代的分支從所述BHR中取代其它分支評估歷史。可通過編譯器使用特定類型分支指令或在循環結束分支指令的操作碼中插入指示位來靜態地檢測所述循環結束分支。循環結束分支指令可被動態地檢測為任何后向分支,或者通過在更新所述BHR時存儲最后一個或若干個分支指令的PC并對照最后分支PC(LBPC)寄存器檢驗分支指令的所述PC而動態地檢測。如果所述分支PC匹配,那么抑制對所述BHR的更新。將循環迭代分支保持在所述BHR之外會改進分支預測訓練時間和準確性。文檔編號G06F9/38GK101160561SQ200680012619公開日2008年4月9日申請日期2006年2月24日優先權日2005年2月24日發明者博胡斯拉夫·雷赫利克申請人:高通股份有限公司