專利名稱:用于多模式分支預(yù)測器的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于多模式分支預(yù)測器的系統(tǒng)和方法。
背景技術(shù):
在計(jì)算機(jī)體系結(jié)構(gòu)中,超標(biāo)量計(jì)算機(jī)(即,每一時(shí)鐘周期可以執(zhí)行多于一個(gè)指令 的具有多個(gè)處理組件的計(jì)算機(jī))可以被用于高級的、計(jì)算密集的應(yīng)用。通常,超標(biāo)量計(jì)算機(jī) 會采用一個(gè)或多個(gè)流水線處理器,其可以被用于低級指令"擠壓(crunching)",以更好地處 理某些計(jì)算密集的過程。在計(jì)算機(jī)編程的層級中,這種過程可以被實(shí)現(xiàn)為指令集,所述指令 集是稱為指令分支或更簡單地稱為分支的子程序的一部分。通過這樣的方式,分支可以執(zhí) 行或者也可以不執(zhí)行,這取決于整個(gè)程序的各個(gè)方面的執(zhí)行。為了幫助這種計(jì)算密集的分 支,有時(shí)在程序執(zhí)行期間遇到分支的指令之前提前執(zhí)行該分支的指令。分支預(yù)測器可以是 流水線處理器的一部分,或可以與流水線處理器協(xié)同工作,并且可以幫助確定計(jì)算機(jī)程序 中的條件分支是否可能被采用。 預(yù)測是否預(yù)先執(zhí)行分支經(jīng)常被稱作分支預(yù)測。分支預(yù)測器在用于實(shí)現(xiàn)更好性能的 當(dāng)今的現(xiàn)代超標(biāo)量處理器中是很普遍的。有效的分支預(yù)測器允許處理器取出并執(zhí)行指令 集,而不必首先等待分支被執(zhí)行或解析。許多流水線處理器執(zhí)行某種形式的分支預(yù)測,因?yàn)?通過使用未分配的計(jì)算資源(即,流水線)提前開始執(zhí)行復(fù)雜的分支可以節(jié)省執(zhí)行時(shí)間。通 過正確地預(yù)測當(dāng)操作程序到達(dá)分支時(shí)分支將被執(zhí)行允許節(jié)省時(shí)間,因?yàn)槲捶峙涞挠?jì)算能力 較早地而不是較遲地被占用。照此,任何分支預(yù)測器盡可能地精確可能是有利的。也就是 說,開始執(zhí)行最終沒有被采用的分支中的指令集,使得開始執(zhí)行最終沒有采用的分支的任 何流水線處理器可能不得不清除(flush)(即,刪除)其計(jì)算是對計(jì)算時(shí)間和功率的浪費(fèi)。 也就是說,這種提前執(zhí)行沒有采用的分支中的指令一般不會提供有用的結(jié)果。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一方面,提供了一種計(jì)算模塊,包括第一分支預(yù)測模塊,用于根據(jù) 第一分支預(yù)測模式產(chǎn)生對應(yīng)于分支預(yù)測的第一預(yù)測值;第二分支預(yù)測模塊,用于根據(jù)第二 分支預(yù)測模式產(chǎn)生對應(yīng)于分支預(yù)測的第二預(yù)測值;以及計(jì)算模塊,用于基于第一分支預(yù)測 值和第二分支預(yù)測值產(chǎn)生對應(yīng)于數(shù)學(xué)計(jì)算的第三預(yù)測值。 根據(jù)本發(fā)明的一方面,提供了一種用于預(yù)測執(zhí)行分支指令的方法,該方法包括基 于第一預(yù)測模式,產(chǎn)生第一臨時(shí)預(yù)測值;基于第二分支預(yù)測模式,產(chǎn)生第二臨時(shí)分支預(yù)測 值;基于第一和第二臨時(shí)分支預(yù)測值,計(jì)算最終分支預(yù)測值;以及如果最終分支預(yù)測滿足 預(yù)定條件,執(zhí)行該分支指令。 根據(jù)本發(fā)明的一方面,提供了一種分支預(yù)測器,包括程序計(jì)數(shù)寄存器,用于存儲 程序計(jì)數(shù)值;分支歷史寄存器,用于存儲分支歷史值;具有多個(gè)預(yù)測值的預(yù)測哈希表,每一 個(gè)預(yù)測值唯一對應(yīng)于多個(gè)存儲位置;以及預(yù)測組件,用于接收與第一存儲位置有關(guān)的第一 預(yù)測值,其對應(yīng)于程序計(jì)數(shù)值;接收與第二存儲位置有關(guān)的第二預(yù)測值,其對應(yīng)于程序計(jì)數(shù)
5值和分支歷史值的邏輯組合;以及基于第一和第二預(yù)測值產(chǎn)生整體預(yù)測值。
根據(jù)本發(fā)明的一方面,提供了一種流水線處理器,包括處理器控制器;以及處理
器,其具有與所述控制器耦合的分支預(yù)測器,該分支預(yù)測器還包括第一分支預(yù)測模塊,用
于根據(jù)第一分支預(yù)測模式產(chǎn)生對應(yīng)于分支預(yù)測的第一預(yù)測值;第二分支預(yù)測模塊,用于根
據(jù)第二分支預(yù)測模式產(chǎn)生對應(yīng)于分支預(yù)測的第二預(yù)測值;以及計(jì)算模塊,用于基于第一分
支預(yù)測值和第二分支預(yù)測值產(chǎn)生對應(yīng)于數(shù)學(xué)計(jì)算的第三預(yù)測值。 根據(jù)本發(fā)明的一方面,提供了一種計(jì)算機(jī)系統(tǒng),包括處理單元;通過系統(tǒng)總線與 處理單元耦合的存儲器;以及流水線處理器,其被布置為處理單元的一部分,且用于與存儲 器通信,該流水線處理器還用于通過以下步驟預(yù)測指令分支的執(zhí)行基于第一預(yù)測模式,產(chǎn) 生第一臨時(shí)預(yù)測值;基于第二分支預(yù)測模式,產(chǎn)生第二臨時(shí)分支預(yù)測值;基于第一和第二 臨時(shí)分支預(yù)測值,計(jì)算最終分支預(yù)測值;以及如果最終分支預(yù)測值超過閾值,傳送執(zhí)行該指 令分支的指令。 根據(jù)本發(fā)明的一方面,提供了一種具有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所 述計(jì)算機(jī)可執(zhí)行指令用于基于第一預(yù)測模式,產(chǎn)生第一臨時(shí)預(yù)測值;基于第二分支預(yù)測 模式,產(chǎn)生第二臨時(shí)分支預(yù)測值;基于第一和第二臨時(shí)分支預(yù)測值,計(jì)算最終分支預(yù)測值; 以及如果最終分支預(yù)測滿足預(yù)定條件,執(zhí)行分支指令。
當(dāng)結(jié)合附圖時(shí),參考下列詳細(xì)說明,在此公開的主題的實(shí)施例將變得更容易領(lǐng)會,
同時(shí)變得更好理解。
圖1是根據(jù)在此公開的主題的實(shí)施例的適合的超標(biāo)量計(jì)算環(huán)境的示圖,其中可以
實(shí)現(xiàn)用于分支預(yù)測的系統(tǒng)和方法。 圖2是使用一般被稱為Gshare預(yù)測模式的預(yù)測模式的分支預(yù)測器的示圖。
圖3是根據(jù)在此公開的主題的實(shí)施例的使用第一和第二分支預(yù)測模式的組合以 產(chǎn)生分支預(yù)測值的分支預(yù)測器的示圖。 圖4是根據(jù)在此公開的主題的實(shí)施例的預(yù)測執(zhí)行分支的可能性的方法的流程圖。
具體實(shí)施例方式
以下提供的討論使本領(lǐng)域技術(shù)人員能夠作出和使用在此公開的主題。此處所述的 一般原理可以應(yīng)用于除以上詳細(xì)描述以外的實(shí)施例和應(yīng)用,而沒有脫離在此公開的主題的 精神和范圍。本公開不打算限于所示的實(shí)施例,而是與符合在此公開或建議的原理和特征 的最寬范圍相一致。 通過以下關(guān)于圖3更詳細(xì)描述的實(shí)施例的概述,分支預(yù)測器可以包括用來存儲程 序計(jì)數(shù)值的程序計(jì)數(shù)寄存器,以及用來存儲分支歷史值的分支歷史寄存器。此外,分支預(yù)測 器可以包括具有多個(gè)預(yù)測值的預(yù)測哈希表,每個(gè)預(yù)測值唯一地對應(yīng)于多個(gè)存儲位置。利用 這些組件,分支預(yù)測器可以產(chǎn)生對應(yīng)于程序計(jì)數(shù)值的第一預(yù)測值,并且可以產(chǎn)生對應(yīng)于程 序計(jì)數(shù)值和分支歷史值的邏輯組合的第二預(yù)測值。利用從兩個(gè)不同的預(yù)測模式中獲得的這 兩個(gè)預(yù)測值,分支預(yù)測器可以更適于基于第一和第二預(yù)測值產(chǎn)生整體預(yù)測值,該整體預(yù)測 值比基于單一預(yù)測模式的單一預(yù)測值更精確。以下關(guān)于圖l-4更詳細(xì)地描述以上組件和概念。 圖1及以下論述旨在提供適當(dāng)?shù)挠?jì)算環(huán)境的簡短的一般說明,在該計(jì)算環(huán)境中在 此公開的主題可以被實(shí)現(xiàn)。盡管沒有要求,該系統(tǒng)和方法的各方面將在計(jì)算機(jī)可執(zhí)行指令 的一般環(huán)境中描述,所述計(jì)算機(jī)可執(zhí)行指令諸如通過基于計(jì)算機(jī)的軟件組件、基于計(jì)算機(jī) 的硬件組件或邏輯組件執(zhí)行的程序或計(jì)算模塊。 一般來講,計(jì)算模塊可以包括執(zhí)行特定的 任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等。此外,本領(lǐng)域技術(shù) 人員將理解在此公開的主題可以利用其他的計(jì)算機(jī)系統(tǒng)配置實(shí)現(xiàn),包括手持設(shè)備、蜂窩或
移動電話、多處理器系統(tǒng)、基于微處理器的或可編程的消費(fèi)者電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算 機(jī)、主計(jì)算機(jī)等。各種方法還可以在分布式計(jì)算環(huán)境中實(shí)現(xiàn),其中通過經(jīng)由通信網(wǎng)絡(luò)鏈接的 遠(yuǎn)程處理設(shè)備執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,計(jì)算模塊可以位于本地和遠(yuǎn)程存儲器存儲 設(shè)備中。 參考圖l,用于實(shí)現(xiàn)在此公開的系統(tǒng)和方法的示例性系統(tǒng)包括計(jì)算機(jī)120形式的 通用計(jì)算設(shè)備,其包括一個(gè)或多個(gè)處理單元121、系統(tǒng)存儲器122和耦合包括系統(tǒng)存儲器的 各種系統(tǒng)組件到處理單元121的系統(tǒng)總線123。該處理單元121可以包括組成流水線處理 單元190的一個(gè)或多個(gè)子處理器,其使處理單元121能夠在每一時(shí)鐘周期執(zhí)行多于一個(gè)指 令。這種流水線處理單元190可以包括單個(gè)集成電路芯片或可以被布置為若干集成電路上 的若干電路。 一般,具有流水線操作能力的處理器121被設(shè)計(jì)成利用可以半獨(dú)立地執(zhí)行相 關(guān)指令的若干相關(guān)邏輯處理鏈。處理器121的這種計(jì)算機(jī)構(gòu)(organization)允許整個(gè)處 理時(shí)間被顯著地減少。進(jìn)一步,處理器121可以是向量處理器,其可以在大數(shù)據(jù)集上執(zhí)行相 同的指令。 系統(tǒng)總線123可以是若干類型總線結(jié)構(gòu)中的任何一種,包括使用多種總線體系 結(jié)構(gòu)的任何一種的存儲器總線或存儲控制器、外圍總線和本地總線。舉例來說,而不是 限制,這種體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(ISA)總線、微通道體系結(jié)構(gòu)(MCA)總線、增強(qiáng)的 ISA (EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(VESA)本地總線和外圍組件互連(PCI)總線,其也被稱 為Mezzanine總線。 系統(tǒng)存儲器包括只讀存儲器(ROM) 124和隨機(jī)存取存儲器(RAM) 125。包含例如在 啟動期間幫助在個(gè)人計(jì)算機(jī)120內(nèi)的元件之間傳輸信息的基本例程的基本輸入/輸出系統(tǒng) (BIOS) 126被存儲在ROM 124中。個(gè)人計(jì)算機(jī)120還包括硬盤驅(qū)動器127,用于從硬盤(未 示出)讀出和寫入到硬盤;磁盤驅(qū)動器128,用于從可移動磁盤129讀出或?qū)懭氲娇梢苿哟?盤129 ;以及光盤驅(qū)動器130,用于從可移動光盤131(諸如CD R0M或其他光學(xué)介質(zhì))讀出或 寫入到可移動光盤131。硬盤驅(qū)動器127、磁盤驅(qū)動器128和光盤驅(qū)動器130分別通過硬盤 驅(qū)動器接口 132、磁盤驅(qū)動器接口 133和光驅(qū)接口 134而連接到系統(tǒng)總線123。驅(qū)動器及其 相關(guān)的計(jì)算機(jī)可讀介質(zhì)提供用于個(gè)人計(jì)算機(jī)120的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊 和其他數(shù)據(jù)的非易失性存儲。盡管此處所述的示例性環(huán)境采用硬盤、可移動磁盤129和可 移動光盤131,本領(lǐng)域技術(shù)人員應(yīng)該理解,可以存儲由計(jì)算機(jī)可訪問的數(shù)據(jù)的其他類型的計(jì) 算機(jī)可讀介質(zhì)也可以用于該示例性操作環(huán)境,諸如磁帶、閃存卡、數(shù)字多用途盤、Bernoulli 盒式磁帶、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)等。 許多程序或計(jì)算模塊可以被存儲在硬盤、磁盤129、光盤131、 ROM 124或RAM 125 上,包括操作系統(tǒng)135、一個(gè)或多個(gè)應(yīng)用程序136、其他程序模塊137和程序數(shù)據(jù)138。用戶定點(diǎn)(pointing)裝置142的輸入設(shè)備輸入命令和信息到個(gè)人計(jì) 算機(jī)120中。這些和其他輸入設(shè)備常常通過耦合到系統(tǒng)總線的串行端口接口 146而連接到 處理單元121,但也可以通過其他接口連接,例如并行端口 、高速數(shù)據(jù)端口或通用串行總線 (USB)。監(jiān)視器147或其他類型的顯示裝置也可以經(jīng)由諸如視頻適配器148之類的接口與 系統(tǒng)總線123連接。 在圖1的計(jì)算機(jī)系統(tǒng)120的環(huán)境中,分支預(yù)測器可以用存儲器內(nèi)的程序模塊的形 式實(shí)現(xiàn)??蛇x地,這種分支預(yù)測器可以被實(shí)現(xiàn)為在處理單元的基于硬件的組件內(nèi)的計(jì)算模 塊。以下關(guān)于圖2-4描述用于分支預(yù)測的方法的系統(tǒng)的各種實(shí)施例。 圖2是使用稱作Gshare預(yù)測模式的單一預(yù)測模式的分支預(yù)測器200的示圖。正 如本領(lǐng)域中可以理解的,圖2的分支預(yù)測器200可以被實(shí)現(xiàn)為在存儲器內(nèi)實(shí)現(xiàn)的計(jì)算模塊 或計(jì)算模塊組,或?qū)崿F(xiàn)為可以是圖1的處理單元121的一部分的邏輯組件。進(jìn)一步,這種分 支預(yù)測器200可以通過在專用集成電路(IC)上的邏輯組件實(shí)現(xiàn),其可以是諸如圖1的流水 線處理單元190的子處理器的一部分??梢栽O(shè)想其他實(shí)施例。 任何分支預(yù)測器,特別地,圖2的分支預(yù)測器200,可以利用許多分支的行為可能 與其他最近采用的分支的歷史有密切關(guān)系的概念。因此,分支預(yù)測器200可以包括分支歷 史寄存器212,其包括關(guān)于其它最近遇到的分支是否已被采用的數(shù)據(jù)。這種最近的歷史數(shù)據(jù) 然后可以被用于預(yù)測下一分支是否將被采用。 如上所述,希望盡可能地增加分支預(yù)測器的效率,因?yàn)闉樽罱K未被采用的特定分 支開始的任何指令執(zhí)行需要從流水線中清除(即,丟棄到?jīng)]用的結(jié)果)。因而,Gshare分支 預(yù)測器200可以利用來自程序計(jì)數(shù)寄存器210的程序計(jì)數(shù)值以及來自分支歷史寄存器212 的分支歷史值,以在分支預(yù)測寄存器260處產(chǎn)生分支預(yù)測值。該分支預(yù)測值然后可以被用 于預(yù)測是否將采用該特定分支。 在程序操作期間,當(dāng)滿足觸發(fā)條件時(shí),可以實(shí)現(xiàn)分支預(yù)測。觸發(fā)條件可以是任意數(shù) 目的典型的操作情況,諸如在程序計(jì)數(shù)寄存器210達(dá)到特定值(例如,分支指令本身,在分 支指令之前的五個(gè)指令),前一相關(guān)分支已經(jīng)開始執(zhí)行,等等。因此,當(dāng)滿足觸發(fā)條件時(shí),來 自程序計(jì)數(shù)寄存器210的當(dāng)前程序計(jì)數(shù)值和來自分支歷史寄存器212的當(dāng)前分支歷史值可 被用于產(chǎn)生如下進(jìn)一步所述的索引值。 該索引值可以是程序計(jì)數(shù)值和分支歷史值的邏輯組合(或其他數(shù)學(xué)組合)。在一 個(gè)實(shí)施例中,這兩個(gè)值的邏輯組合可以是這兩個(gè)值的每一位的異或函數(shù)220(X0R函數(shù))。因 此,當(dāng)產(chǎn)生索引值時(shí),索引值的每一位可以根據(jù)在相應(yīng)操作數(shù)中的每一位,(即,來自相應(yīng)程 序計(jì)數(shù)值和分支歷史值的每一位)產(chǎn)生。分支寄存器值的第一位可以與程序計(jì)數(shù)值的第一 位相比較,以產(chǎn)生結(jié)果索引值的第一位。如果這兩個(gè)值相同(即,都是0或都是1),那么在 產(chǎn)生的索引值中的結(jié)果位可以被設(shè)置為O。然而如果一個(gè)位或另一位可能是l,那么在產(chǎn)生 的索引值中的結(jié)果位可能是1。該操作可以對在相應(yīng)操作數(shù)的值中的每一位執(zhí)行,使得結(jié)果 索引值可以是程序計(jì)數(shù)值和分支歷史值的異或函數(shù)。 —旦產(chǎn)生索引值,它可以在預(yù)測哈希表230(raT)中被交叉引用,以識別對應(yīng)的預(yù) 測值。該P(yáng)HT 230可以是具有若干預(yù)測值234的查找表,每一個(gè)預(yù)測值唯一對應(yīng)于具有任何 可能的索引值232中的每一個(gè)的存儲位置。因此,對于可以是n位長的索引值,PHT 230可 以具有2n個(gè)索引值232條目,每一個(gè)條目具有唯一相關(guān)的預(yù)測值234。每個(gè)預(yù)測值234可以
8是對應(yīng)于整數(shù)0、1、2或3的2位二進(jìn)制值。隨著在raT 230中產(chǎn)生和識別索引值232(即, 存儲位置基于索引值240被識別),結(jié)果預(yù)測值234可以被識別。如圖2的例子中所示,結(jié) 果索引值240 "010011100101"被識別,且預(yù)測值234a "OO"可以被預(yù)測。
預(yù)測值234a然后可以被用于確定該分支是否應(yīng)該被加載到處理組件中(即,預(yù)測 開始執(zhí)行該分支)或不應(yīng)該被加載(即,預(yù)測不加載該分支)。在一個(gè)實(shí)施例中,預(yù)測值O 或1可能對應(yīng)于不加載該分支的預(yù)測,而預(yù)測值2或3可能對應(yīng)于加載該分支的預(yù)測。在 圖2的例子中,2位二進(jìn)制值"00"可以是對應(yīng)于不提前開始執(zhí)行該分支的預(yù)測的預(yù)測值0。
圖2的分支預(yù)測器具有的一個(gè)特定問題是索引值240的產(chǎn)生可能不總是得到要采 用的特定預(yù)測的唯一識別。例如,取決于分支歷史寄存器212的內(nèi)容,相同的索引值234可 以基于兩個(gè)不同的預(yù)測請求產(chǎn)生。這種非獨(dú)占性可能對僅僅使用Gshare預(yù)測模式(S卩,單 一預(yù)測模式)識別預(yù)測值234的分支預(yù)測器200是固有的。結(jié)果,可能導(dǎo)致精確預(yù)測分支 是否被采用的可度量誤差率,因?yàn)樘囟ㄋ饕?40可能被分支歷史寄存器212和程序計(jì)數(shù) 寄存器210的多于一個(gè)的邏輯組合交叉引用。通過簡單的4位例子,當(dāng)進(jìn)行索引時(shí),程序計(jì) 數(shù)值"1101"(其可能對應(yīng)于分支A的觸發(fā)條件)和分支歷史值"1010"(其可以表示上四 個(gè)分支是采用_不采用_采用_不采用)產(chǎn)生XOR索引值"Ol 11 "。類似地,當(dāng)進(jìn)行索引時(shí), 明顯不同的程序計(jì)數(shù)值"0110"(其可能對應(yīng)于觸發(fā)條件分支B)和分支歷史值"0001"同樣 產(chǎn)生XOR索引值"0111 "。因此,對于這兩個(gè)對應(yīng)于需要兩個(gè)不同分支的預(yù)測的單獨(dú)的觸發(fā) 條件,可以產(chǎn)生相同的索引值240。這導(dǎo)致raT 230干擾,因?yàn)榭赡軟]有方法區(qū)分是分支A 還是分支B正在被預(yù)測。預(yù)測中的這種誤差可能以不可接受的比率發(fā)生。然而,可以通過 引入如以下圖3中所示的實(shí)施例所描述的第二預(yù)測模式而減少這種誤差率。
圖3是根據(jù)在此公開的主題的實(shí)施例使用第一和第二分支預(yù)測模式產(chǎn)生分支預(yù) 測值的分支預(yù)測器300的示圖。這種分支預(yù)測器300可以以硬件或軟件實(shí)現(xiàn)。在這個(gè)實(shí)施 例中,當(dāng)滿足觸發(fā)條件時(shí),來自程序計(jì)數(shù)寄存器310的程序計(jì)數(shù)值311和來自分支歷史寄存 器312的分支歷史值313可被用于產(chǎn)生兩個(gè)索引值。如上所述,第一索引值340可以是程 序計(jì)數(shù)值311和分支歷史值313的邏輯組合。不同于圖2的分支預(yù)測器200,可以產(chǎn)生第二 索引值341,其例如逐位地對應(yīng)于程序計(jì)數(shù)寄存器310中的程序計(jì)數(shù)值311。通過這樣的方 式,兩個(gè)索引值340和341可被用于產(chǎn)生如以下進(jìn)一步描述的整體結(jié)果預(yù)測值。
如圖3的實(shí)施例中所示,程序計(jì)數(shù)寄存器310和分支歷史寄存器312被顯示為12 位寄存器。本領(lǐng)域技術(shù)人員可以理解,可以使用任意大小的寄存器,并且所用的寄存器的大 小可以不必等于全局程序計(jì)數(shù)器(未示出)的大小。為了節(jié)省大小和計(jì)算的問題,圖3的 寄存器的大小可以對應(yīng)于全局程序計(jì)數(shù)器的字大小的截去值(truncated value),例如64 位程序計(jì)數(shù)器的12個(gè)最低有效位。 在產(chǎn)生第一索引值340中,程序計(jì)數(shù)寄存器310和分支歷史寄存器312中的值的 邏輯組合也可以是這兩個(gè)值的每一位的異或函數(shù)320(X0R函數(shù))。在可選實(shí)施例中,除XOR 函數(shù)以外的邏輯操作可被用于產(chǎn)生第一索引值340。例如,該邏輯操作可以是0R函數(shù)或AND 函數(shù)。 此外,第二索引值341也可以被識別。在這個(gè)實(shí)施例中,第二索引值341可能逐位 地對應(yīng)于程序計(jì)數(shù)值311或根據(jù)第一預(yù)測模式的某些其它的識別值。 —旦產(chǎn)生每個(gè)索引值340和341,每一個(gè)可以被交叉引用到預(yù)測哈希表330(raT)中的相應(yīng)存儲位置,以識別相應(yīng)預(yù)測值334。如前所述,PHT 330可以是具有若干預(yù)測值334 的查找表,每一個(gè)預(yù)測值唯一對應(yīng)于任何可能的索引值332。再次,每個(gè)預(yù)測值334可以是 對應(yīng)于整數(shù)0、1、2或3的2位二進(jìn)制值。隨著可在raT 330中產(chǎn)生和識別索引值332,結(jié)果 預(yù)測值334可以被識別。如圖3的例子中所示,"010011100001 "的第一結(jié)果索引值340可 以被識別,且"00"(即0)的預(yù)測值334a可以被預(yù)測。類似地,"010011101011"的第二結(jié) 果索引值341可以被識別(其可以是與程序計(jì)數(shù)寄存器310中的同一值),且"11"(即3) 的預(yù)測值334b可以被預(yù)測。這兩個(gè)預(yù)測值可以被稱為臨時(shí)(interim)預(yù)測值。
—旦兩個(gè)臨時(shí)預(yù)測值334a和334b的每一個(gè)都被識別( 一個(gè)對應(yīng)于利用第一預(yù)測 模式的第一索引值340, 一個(gè)對應(yīng)于利用第二預(yù)測模式的第二索引值341),函數(shù)單元350可 以數(shù)學(xué)上基于這兩個(gè)臨時(shí)值產(chǎn)生整體預(yù)測值。該整體預(yù)測值也可以被稱為最終預(yù)測值。在 一個(gè)實(shí)施例中,函數(shù)單元350可以包含求和函數(shù),其將兩個(gè)臨時(shí)預(yù)測值334a和334b加在一 起,使得每個(gè)2位臨時(shí)值可被用于產(chǎn)生3位最終預(yù)測值。也就是說,由0、1、2或3的2位二 進(jìn)制值表示的第一和第二臨時(shí)值334a和334b可以被加在一起,以產(chǎn)生可能是0_7的值的 3位二進(jìn)制最終預(yù)測值。 通過利用兩個(gè)預(yù)測模式產(chǎn)生兩個(gè)臨時(shí)預(yù)測值334a和334b,用于確定是否開始執(zhí) 行分支的預(yù)定條件或閾值還可以通過因子2來調(diào)節(jié)。因此,可以被發(fā)送到預(yù)測寄存器360 的是0-7的3位二進(jìn)制值的最終預(yù)測值,如果該值是4、5、6或7可以產(chǎn)生執(zhí)行分支的預(yù)測, 且如果該值是0、1、2或3可以產(chǎn)生不開始執(zhí)行分支的預(yù)測。 在可選實(shí)施例中,函數(shù)單元350可以是平均值函數(shù),這樣每個(gè)臨時(shí)預(yù)測的整數(shù)值 可以被求和并除以2(例如兩個(gè)臨時(shí)值的平均)。這可能導(dǎo)致非整數(shù),且預(yù)測寄存器360可 以是能夠存儲非整數(shù)的浮點(diǎn)寄存器。因此,如果預(yù)測寄存器360持有等于或大于2. 0的數(shù) 值,可以作出開始執(zhí)行該分支的預(yù)測。如果預(yù)測寄存器360持有小于2. 0的數(shù)值,可以作出 不加載該分支以執(zhí)行的預(yù)測。 更進(jìn)一步,可以在函數(shù)單元350實(shí)現(xiàn)附加的函數(shù),諸如加權(quán)和,其中對第一臨時(shí)預(yù) 測值的加權(quán)可以是,第二臨時(shí)預(yù)測值的例如兩倍。 當(dāng)作出預(yù)測,通常進(jìn)行程序的整體執(zhí)行。如果作出采用分支的預(yù)測,那么分支指令 被加載到流水線處理器(等等)中以立即執(zhí)行。如果分支實(shí)際上在整體程序的環(huán)境內(nèi)被采 用,那么該預(yù)測是正確的。當(dāng)然,如果分支最終沒有被采用,那么該預(yù)測是不正確的,且流水 線被清除,使得已經(jīng)執(zhí)行的任何指令都被丟棄。為了提供更好的預(yù)測率,可以根據(jù)該特定分 支實(shí)際上是否被采用而更新分支歷史寄存器312和與第一和第二索引值相關(guān)的特定預(yù)測 值。 當(dāng)更新分支歷史寄存器312時(shí),移位寄存器370可被用于移位到分支歷史寄存器 312的最高有效位371。也就是說,可以用正被移位的新值替換最高有效位,且每位可以被 右移一位,使得最低有效位可以被移出并丟棄。因此,如果分支實(shí)際上被采用,位l可以被 移到分支歷史寄存器312中,而如果分支最終沒有被采用,那么位0可以被移到分支歷史寄 存器312中。進(jìn)一步,在另一個(gè)實(shí)施例中,分支歷史寄存器312的最低有效位可以被移位 (從而,丟棄已有的最高有效位,同時(shí)所有其他的左移)。 在一個(gè)實(shí)施例中,分支歷史寄存器312是全局寄存器。也就是說,表示分支是否已 經(jīng)被采用的位對應(yīng)于所有分支。例如,如果分支A、B、C和D是要預(yù)測的最后四個(gè)分支,且實(shí)
10際上所有四個(gè)被采用,那么移位到分支歷史寄存器中的最后四位將全部是1 。在其它實(shí)施例 中,每個(gè)分支可以與它自己的專用分支歷史寄存器312有關(guān)。盡管沒有在圖3示出,在程序 中的每個(gè)分支可能有一個(gè)分支歷史寄存器。在這方面,包含在特定分支歷史寄存器中的僅 有數(shù)據(jù)將是對應(yīng)于一個(gè)特定分支的歷史的數(shù)據(jù)。 進(jìn)一步,對于特定分支,也可以根據(jù)該分支實(shí)際上是否被采用而更新對應(yīng)于第一 和第二索引值340和341的PHT預(yù)測值334a和334b。在一個(gè)實(shí)施例中,如果相關(guān)預(yù)測值 334a和334b小于閾值,且該分支實(shí)際上被采用,那么這個(gè)值可能被增加1。同樣地,如果該 分支實(shí)際上沒有被采用,且預(yù)測值大于閾值,那么每個(gè)預(yù)測值可能被減小1。
在另一個(gè)實(shí)施例中,相關(guān)預(yù)測值334a和334b可以相應(yīng)地被增加或減小,無論當(dāng)前 預(yù)測值334a和334b是大于還是小于閾值。也就是說,如果分支被采用,每個(gè)相關(guān)預(yù)測值可 以增加1 (只要該值還未達(dá)到最大值3),且如果分支沒有被采用,那么每個(gè)關(guān)聯(lián)預(yù)測值可以 減小1(同樣,只要該預(yù)測值還未達(dá)到最小值0)。以下描述在圖4的程序流程圖的環(huán)境中的 這些及其他概念。 圖4是根據(jù)在此公開的主題的實(shí)施例預(yù)測執(zhí)行分支的可能性的方法的流程圖。在 該方法中,可以基于來自具有第一值的第一位置(例如,程序計(jì)數(shù)寄存器)的數(shù)據(jù)以及來自 具有第二值的第二位置(例如,分支歷史寄存器)的數(shù)據(jù)作出特定分支是否將被執(zhí)行的預(yù) 測。該方法起始于步驟400,并繼續(xù)到步驟402,其中觸發(fā)條件可以被滿足,使得分支預(yù)測器 基于上述數(shù)據(jù)集而產(chǎn)生預(yù)測。這種觸發(fā)條件可以是通過程序計(jì)數(shù)器中的特定地址位置,或 可以是預(yù)測相關(guān)分支將被采用(或已經(jīng)被采用)。設(shè)想任意數(shù)目的觸發(fā)條件,但為了簡便起 見不進(jìn)一步討論。 —旦滿足觸發(fā)條件,該方法移到步驟404,其中可以基于要預(yù)測的特定分支確定第 一值(例如程序計(jì)數(shù)值)。該值可以是對應(yīng)于要預(yù)測的分支的地址,或可以是另一個(gè)相關(guān)地 址,諸如觸發(fā)條件的地址。 一旦已經(jīng)確定第一值,兩個(gè)附加的步驟然后可以發(fā)生。
首先,在步驟410,第一值可以通過算法用第二值進(jìn)行修改。如上所述,該函數(shù)可以 是XOR函數(shù),該XOR函數(shù)邏輯上組合第一值和第二值,產(chǎn)生結(jié)果索引值。然后,對于結(jié)果索 引值可以確定PHT地址,其中對應(yīng)于該P(yáng)HT地址的預(yù)測值可以在步驟412確定。如上所述, 該值可以是對應(yīng)于0、1、2或3的二位二進(jìn)制值。 此外,在步驟406,第一值還可以被用于直接存取在PHT中的另一個(gè)特定條目。也 就是說,沒有以任何方式修改第一值,使得對應(yīng)于該P(yáng)HT地址的特定預(yù)測值可以被確定。在 這兩個(gè)步驟后,獲取兩個(gè)不同的預(yù)測值,一個(gè)對應(yīng)于第一索引值(即,XOR結(jié)果),一個(gè)對應(yīng) 于第二索引值(即,第一值)。 接下來,在步驟420,兩個(gè)檢索的預(yù)測值的每一個(gè)可以在數(shù)學(xué)上被組合在一起。該 組合可以是對應(yīng)于該相關(guān)預(yù)測值的該兩個(gè)二進(jìn)制值的簡單相加。因而,可以基于兩個(gè)取得 的預(yù)測值的算術(shù)組合確定最終預(yù)測值。 在判定步驟425,比較器確定整體預(yù)測值是否滿足特定條件。例如,最終預(yù)測值可 以等于或大于閾值(例如,等于或大于4)。如果是這樣,那么可以預(yù)測將采用該分支。然后 在步驟430,指令可以被傳送到控制處理器,以啟動加載分支的指令到流水線處理器等。然 而如果整體預(yù)測值不滿足特定條件,(例如,該值小于或等于3),那么可能不采取動作,即 不像在步驟430中的那樣傳送加載分支的指令。
設(shè)想其它實(shí)施例,其中第一值可以對應(yīng)于分支歷史值,第二值可以對應(yīng)于程序計(jì) 數(shù)值。進(jìn)一步,其他與程序相關(guān)的值可以被用作參與作出預(yù)測的值,諸如具有偏移量的全局 程序計(jì)數(shù)器、PC地址計(jì)數(shù)器、子例程計(jì)數(shù)器等等。更進(jìn)一步,多于兩個(gè)的值可以被組合以產(chǎn) 生臨時(shí)值之一。因而分支歷史寄存器、程序計(jì)數(shù)值和PC地址計(jì)數(shù)器的邏輯組合可被用于確 定用于預(yù)測的臨時(shí)值。 在又一個(gè)實(shí)施例中,多于兩個(gè)的臨時(shí)預(yù)測值可以被確定,其中每個(gè)臨時(shí)預(yù)測值可 以用數(shù)學(xué)方式被組合,以確定整體預(yù)測值。 接下來,可以根據(jù)分支實(shí)際上是否被采用而更新PHT預(yù)測值和分支歷史寄存器兩 者。在判定步驟435,可以確定特定分支實(shí)際上是否被采用(與預(yù)測無關(guān))。如果該分支被 采用,那么在步驟440,在對應(yīng)于這兩個(gè)索引值的PHT的兩個(gè)位置中的預(yù)測值可以以二進(jìn)制 方式增加1 (例如,00增加到01, 10增加到11等)。進(jìn)一步,該方法繼續(xù)到步驟445,其中對 應(yīng)于該分支實(shí)際上是否被采用的值可以被移位到分支歷史寄存器。也就是說,如果該分支 實(shí)際上被采用,那么l可以被移位到分支歷史寄存器的最低有效位。當(dāng)然,這使寄存器中的 每一位也左移一個(gè)有效位,且最高有效位可以被移出寄存器并丟棄。 然而,如果該分支最終沒有被采用,那么在步驟450,在對應(yīng)于這兩個(gè)索引值的
PHT的兩個(gè)位置中的預(yù)測值可以以二進(jìn)制方式減小1(例如,01減小到00,10減小到01等)。
進(jìn)一步,該方法繼續(xù)到步驟455,其中對應(yīng)于該分支實(shí)際上是否被采用的值可以被移位到分
支歷史寄存器中。也就是說,如果該分支沒有被采用,O可以被移位到分支歷史寄存器的最
低有效位。在更新PHT表和分支歷史寄存器后,該方法在步驟460結(jié)束。 雖然在此討論的主題易受各種修改和可選結(jié)構(gòu),其某些舉例說明的實(shí)施例在附圖
中示出,并已經(jīng)如上被詳細(xì)描述。此外,本領(lǐng)域技術(shù)人員將理解,在并非所有實(shí)施例內(nèi)描述
的各個(gè)方面可以存在于任意實(shí)施例中。然而應(yīng)該理解,不打算限制該主題為公開的特定形
式,相反,打算覆蓋全部落在公開的主題的精神和范圍內(nèi)的修改、可選結(jié)構(gòu)和等價(jià)物。
權(quán)利要求
一種計(jì)算模塊,包括第一分支預(yù)測模塊,用于根據(jù)第一分支預(yù)測模式產(chǎn)生對應(yīng)于分支預(yù)測的第一預(yù)測值;第二分支預(yù)測模塊,用于根據(jù)第二分支預(yù)測模式產(chǎn)生對應(yīng)于分支預(yù)測的第二預(yù)測值;以及計(jì)算模塊,用于基于第一分支預(yù)測值和第二分支預(yù)測值產(chǎn)生對應(yīng)于數(shù)學(xué)計(jì)算的第三預(yù)測值。
2. 如權(quán)利要求1所述的計(jì)算模塊,其中第一預(yù)測模式包括產(chǎn)生對應(yīng)于程序計(jì)數(shù)值的預(yù) 測值,第二預(yù)測模式包括產(chǎn)生對應(yīng)于程序計(jì)數(shù)值和另一值的邏輯組合的預(yù)測值。
3. 如權(quán)利要求2所述的計(jì)算模塊,其中邏輯組合還包括程序計(jì)數(shù)值和分支歷史值的 X0R函數(shù)。
4. 如權(quán)利要求1所述的計(jì)算模塊,還包括預(yù)測哈希表,其用于存儲多個(gè)預(yù)測值,每一個(gè) 預(yù)測值唯一對應(yīng)于存儲位置。
5. 如權(quán)利要求1所述的計(jì)算模塊,還包括歷史寄存器,用于存儲多個(gè)位,每一位對應(yīng)于 分支的前次執(zhí)行。
6. 如權(quán)利要求5所述的計(jì)算模塊,還包括與分支歷史寄存器耦合的移位寄存器,該移 位寄存器用于基于分支的執(zhí)行來將位值移位到歷史寄存器的最低有效位。
7. 如權(quán)利要求1所述的計(jì)算模塊,還包括執(zhí)行模塊,用于響應(yīng)于滿足預(yù)定條件的第三 預(yù)測值開始執(zhí)行指令。
8. 如權(quán)利要求1所述的計(jì)算模塊,其中第一預(yù)測模式包括產(chǎn)生對應(yīng)于第一值的預(yù)測 值,第二預(yù)測模式包括產(chǎn)生對應(yīng)于第一值、第二值和第三值的邏輯組合的預(yù)測值。
9. 根據(jù)權(quán)利要求1的計(jì)算模塊,還包括第三分支預(yù)測模塊,用于根據(jù)第三分支預(yù)測模式產(chǎn)生對應(yīng)于分支預(yù)測的第四預(yù)測值; 以及其中計(jì)算模塊還用于基于第一分支預(yù)測值、第二分支預(yù)測值和第四分支預(yù)測值產(chǎn)生對應(yīng)于 數(shù)學(xué)計(jì)算的第三預(yù)測值。
10. —種用于預(yù)測執(zhí)行分支指令的方法,該方法包括 基于第一預(yù)測模式,產(chǎn)生第一臨時(shí)預(yù)測值; 基于第二分支預(yù)測模式,產(chǎn)生第二臨時(shí)分支預(yù)測值; 基于第一和第二臨時(shí)分支預(yù)測值,計(jì)算最終分支預(yù)測值;以及 如果最終分支預(yù)測滿足預(yù)定條件,執(zhí)行該分支指令。
11. 如權(quán)利要求io所述的方法,其中產(chǎn)生第一預(yù)測值還包括基于識別對應(yīng)于程序計(jì)數(shù)值的存儲位置,從預(yù)測哈希表中檢索預(yù)測值。
12. 如權(quán)利要求IO所述的方法,其中產(chǎn)生第二預(yù)測值還包括基于識別對應(yīng)于程序計(jì)數(shù) 值和分支歷史值的數(shù)學(xué)組合的存儲位置,從預(yù)測哈希表中檢索預(yù)測值。
13. 如權(quán)利要求10所述的方法,還包括如果最終預(yù)測值等于或大于2,執(zhí)行分支指令。
14. 根據(jù)權(quán)利要求10的方法,還包括 確定分支指令是否已經(jīng)被執(zhí)行;以及更新存儲在預(yù)測哈希表中的對應(yīng)于執(zhí)行的分支指令的預(yù)測值。
15. 如權(quán)利要求14所述的方法,還包括如果執(zhí)行相關(guān)的分支指令,增加存儲的預(yù)測值;以及 如果沒有執(zhí)行相關(guān)的分支指令,減小存儲的預(yù)測值。
16. 根據(jù)權(quán)利要求10的方法,還包括 確定分支指令是否已經(jīng)被執(zhí)行;以及通過將位值移位到分支歷史寄存器中,更新存儲在分支歷史寄存器中的分支歷史值。
17. 如權(quán)利要求14所述的方法,還包括如果分支指令最終被執(zhí)行則移位位值l,且如果 分支指令最終沒有被執(zhí)行則移位位值0。
18. —種分支預(yù)測器,包括 程序計(jì)數(shù)寄存器,用于存儲程序計(jì)數(shù)值; 分支歷史寄存器,用于存儲分支歷史值;具有多個(gè)預(yù)測值的預(yù)測哈希表,每一個(gè)預(yù)測值唯一對應(yīng)于多個(gè)存儲位置;以及 預(yù)測組件,用于接收與第一存儲位置有關(guān)的第一預(yù)測值,其對應(yīng)于程序計(jì)數(shù)值;接收與第二存儲位置有關(guān)的第二預(yù)測值,其對應(yīng)于程序計(jì)數(shù)值和分支歷史值的邏輯組 合;以及基于第一和第二預(yù)測值產(chǎn)生整體預(yù)測值。
19. 如權(quán)利要求18所述的分支預(yù)測器,其中預(yù)測哈希表包括多個(gè)索引值,每一個(gè)索引 值唯一對應(yīng)于相應(yīng)的存儲位置和相關(guān)預(yù)測值,其中每個(gè)預(yù)測值包括0、 1、2或3的二進(jìn)制值。
20. 如權(quán)利要求18所述的分支預(yù)測器,其中最終值的產(chǎn)生是基于第一和第二預(yù)測值的 求和函數(shù)。
21. 如權(quán)利要求18所述的分支預(yù)測器,其中最終值的產(chǎn)生是基于第一和第二預(yù)測值的 平均函數(shù)。
22. —種流水線處理器,包括 處理器控制器;以及處理器,其具有與所述控制器耦合的分支預(yù)測器,該分支預(yù)測器還包括第一分支預(yù)測模塊,用于根據(jù)第一分支預(yù)測模式產(chǎn)生對應(yīng)于分支預(yù)測的第一預(yù)測值;第二分支預(yù)測模塊,用于根據(jù)第二分支預(yù)測模式產(chǎn)生對應(yīng)于分支預(yù)測的第二預(yù)測值;以及計(jì)算模塊,用于基于第一分支預(yù)測值和第二分支預(yù)測值產(chǎn)生對應(yīng)于數(shù)學(xué)計(jì)算的第三預(yù) 測值。
23. 如權(quán)利要求22所述的流水線處理器,還包括單一集成電路芯片。
24. —種計(jì)算機(jī)系統(tǒng),包括 處理單元;通過系統(tǒng)總線與處理單元耦合的存儲器;以及流水線處理器,其被布置為處理單元的一部分,且用于與存儲器通信,該流水線處理器 還用于通過以下步驟預(yù)測指令分支的執(zhí)行基于第一預(yù)測模式,產(chǎn)生第一臨時(shí)預(yù)測值; 基于第二分支預(yù)測模式,產(chǎn)生第二臨時(shí)分支預(yù)測值; 基于第一和第二臨時(shí)分支預(yù)測值,計(jì)算最終分支預(yù)測值;以及如果最終分支預(yù)測值超過閾值,傳送執(zhí)行該指令分支的指令。
25. —種具有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令用于 基于第一預(yù)測模式,產(chǎn)生第一臨時(shí)預(yù)測值; 基于第二分支預(yù)測模式,產(chǎn)生第二臨時(shí)分支預(yù)測值; 基于第一和第二臨時(shí)分支預(yù)測值,計(jì)算最終分支預(yù)測值;以及 如果最終分支預(yù)測滿足預(yù)定條件,執(zhí)行分支指令。
全文摘要
一種用于多模式分支預(yù)測器的系統(tǒng)和方法。一種用于預(yù)測計(jì)算機(jī)可執(zhí)行指令的分支的執(zhí)行的系統(tǒng)和方法。在實(shí)施例中,分支預(yù)測器可以包括程序計(jì)數(shù)寄存器,用于存儲程序計(jì)數(shù)值,以及分支歷史寄存器,用于存儲分支歷史值。此外,分支預(yù)測器可以包括具有多個(gè)預(yù)測值的預(yù)測哈希表,每個(gè)預(yù)測值唯一地對應(yīng)于多個(gè)存儲位置。利用這些組件,分支預(yù)測器可以產(chǎn)生對應(yīng)于程序計(jì)數(shù)值的第一預(yù)測值,并且可以產(chǎn)生對應(yīng)于程序計(jì)數(shù)值和分支歷史值的邏輯組合的第二預(yù)測值。利用從兩個(gè)不同的預(yù)測模式中獲得的這兩個(gè)預(yù)測值,分支預(yù)測器可以更好地適于基于第一和第二預(yù)測值產(chǎn)生整體預(yù)測值,其比基于單一預(yù)測模式的單一預(yù)測值更精確。
文檔編號G06F9/38GK101763248SQ20081019096
公開日2010年6月30日 申請日期2008年12月25日 優(yōu)先權(quán)日2008年12月25日
發(fā)明者孫紅霞, 王凱峰 申請人:世意法(北京)半導(dǎo)體研發(fā)有限責(zé)任公司