專利名稱:無預(yù)測延時的分支預(yù)測控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種嵌入式處理器的分支處理過程。
背景技術(shù):
目前,包括嵌入式處理器在內(nèi)的所有處理器,都使用流水線方式 使指令的執(zhí)行可以重疊進行以提高效率。而程序中分支指令的存在, 導(dǎo)致了流水線的停頓,破壞了指令的并行執(zhí)行。分支預(yù)測的引入,使 分支指令后面的指令可以投機的執(zhí)行,無需等待后級流水線返回分支 指令的跳轉(zhuǎn)信息,從而提高了處理器的效率。
分支預(yù)測的準確率很大程度上影響了處理器的性能,為提高分支 預(yù)測的準確率,分支預(yù)測機制經(jīng)歷了從簡單的靜態(tài)預(yù)測機制到動態(tài)預(yù) 測機制的發(fā)展過程。目前常見的動態(tài)分支預(yù)測機制有局部分支預(yù)測機 制、全局分支預(yù)測機制、結(jié)合歷史相關(guān)和地址相關(guān)的兩級分支預(yù)測機
機制的組合機制如Alpha21264處理器中的分支預(yù)測器。分析這些分支 預(yù)測機制,發(fā)現(xiàn)對于較短的分支預(yù)測,只有在前續(xù)分支預(yù)測結(jié)果被后 級流水線確認的情況下,才能對當(dāng)前分支指令做出準確的預(yù)測,即都 為有延時的分支預(yù)測。
發(fā)明內(nèi)容
為了克服已有的嵌入式處理器的分支預(yù)測機制的存在預(yù)測延時問 題、預(yù)測準確率較低的不足,本發(fā)明提供一種消除預(yù)測延時,提高預(yù)測準確率的無預(yù)測延時的分支預(yù)測控制方法。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是
一種無預(yù)測延時的分支預(yù)測控制方法,所述分支預(yù)測控制方法包
括
1) 、設(shè)置兩級分支預(yù)測機制
設(shè)置用于記錄經(jīng)過后級流水線確認的分支預(yù)測歷史信息的全局歷 史寄存器,以及用于記錄預(yù)測邏輯產(chǎn)生的未經(jīng)后級流水線確認的預(yù)測 歷史信息的虛擬歷史寄存器;設(shè)置用于記錄分支預(yù)測信息的分支預(yù)測 存儲器;
虛擬歷史寄存器作為分支預(yù)測存儲器的全局讀索引,全局歷史寄
存器作為分支預(yù)測存儲器的全局寫索引;
2) 、如果前續(xù)分支指令的預(yù)測結(jié)果尚未被后級流水線確認,虛擬歷史 寄存器讀取預(yù)測結(jié)果,進行分支預(yù)測;
當(dāng)分支預(yù)測出現(xiàn)錯誤時,用全局歷史寄存器的值更新虛擬歷史寄 存器以及分支預(yù)測存儲器的分支預(yù)測信息。
作為優(yōu)選的一種方案將分支跳轉(zhuǎn)歷史記錄作為分支預(yù)測的全局 相關(guān)索引,索引當(dāng)前分支預(yù)測器所在的存儲區(qū);分支在程序中的空間 地址作為局部相關(guān)索引,索引當(dāng)前分支預(yù)測器所在特定存儲區(qū)下的特 定位置。
作為優(yōu)選的另一種方案在上述優(yōu)選的方案基礎(chǔ)上設(shè)置用于記錄
預(yù)測邏輯產(chǎn)生的未經(jīng)后級流水線確認的預(yù)測歷史信息的虛擬歷史寄存 器,當(dāng)虛擬歷史寄存器的值被錯誤預(yù)測結(jié)果污染時,用全局歷史寄存 器實現(xiàn)對于虛擬歷史寄存器的更新,后續(xù)預(yù)測繼續(xù)正確的預(yù)測分支跳轉(zhuǎn)。
進一步,所述的全局歷史寄存器為第一移位寄存器,分支指令被 后級流水線執(zhí)行單元執(zhí)行后,分支跳轉(zhuǎn)的結(jié)果被保存進入所述第一移 位寄存器的最低位或最高位,所述第一移位寄存器中原先保持的跳轉(zhuǎn) 歷史信息各左移或右移一位,記錄最近若干次跳轉(zhuǎn)的真實歷史信息。
再進一步,所述虛擬歷史寄存器為第二移位寄存器,在每次分支 預(yù)測后,將當(dāng)前未經(jīng)后級流水線確認的分支預(yù)測的結(jié)果保存進入所述 第二移位寄存器的最低位或最高位,所述第二移位寄存器中原先保持 的分支預(yù)測歷史信息各左移或右移一位,記錄最近若干次分支預(yù)測的 歷史信息。
所述第一移位寄存器和第二移位寄存器具有同樣大小的存儲空間。
在分支預(yù)測預(yù)測出現(xiàn)錯誤時,分支預(yù)測存儲器內(nèi)的預(yù)測器的預(yù)測 結(jié)果需要被更新,用記錄分支跳轉(zhuǎn)正確信息的全周歷史寄存器作為索 引,改寫預(yù)測器的預(yù)測值。
本發(fā)明的技術(shù)構(gòu)思為在前續(xù)分支預(yù)測結(jié)果未得到后級流水線確 認的情況下,利用虛擬歷史寄存器可以繼續(xù)下一次準確的預(yù)測,從而 實現(xiàn)了無延時的分支預(yù)測。
本發(fā)明的有益效果主要表現(xiàn)在克服了兩級分支預(yù)測機制中存在 的預(yù)測延時問題,從而可以處理更短的分支預(yù)測,提高了分支預(yù)測器 預(yù)測的準確率。
圖1是無預(yù)測延時分支預(yù)測機制的結(jié)構(gòu)圖。圖2是兩級分支預(yù)測機制的框架圖。
具體實施例方式
下面結(jié)合附圖對本發(fā)明作進一步描述。
參照圖1, 一種無預(yù)測延時的分支預(yù)測控制方法,所述分支預(yù)測 控制方法包括
1) 、設(shè)置兩級分支預(yù)測機制
設(shè)置用于記錄經(jīng)過后級流水線確認的分支預(yù)測歷史信息的全局歷 史寄存器,以及用于記錄預(yù)測邏輯產(chǎn)生的未經(jīng)后級流水線確認的預(yù)測 歷史信息的虛擬歷史寄存器;設(shè)置用于記錄分支預(yù)測信息的分支預(yù)測 存儲器;
虛擬歷史寄存器作為分支預(yù)測存儲器的全局讀索引,全局歷史寄
存器作為分支預(yù)測存儲器的全局寫索引;
2) 、如果前續(xù)分支指令的預(yù)測結(jié)果尚未被后級流水線確認,虛擬歷史 寄存器讀取預(yù)測結(jié)果,進行分支預(yù)測;
當(dāng)分支預(yù)測出現(xiàn)錯誤時,用全局歷史寄存器的值更新虛擬歷史寄 存器以及分支預(yù)測存儲器的分支預(yù)測信息。
將分支跳轉(zhuǎn)歷史記錄作為分支預(yù)測的全局相關(guān)索引,索引當(dāng)前分 支預(yù)測器所在的存儲區(qū);分支在程序中的空間地址作為局部相關(guān)索引, 索引當(dāng)前分支預(yù)測器所在特定存儲區(qū)下的特定位置。
當(dāng)虛擬歷史寄存器的值被錯誤預(yù)測結(jié)果污染時,用全局歷史寄存 器實現(xiàn)對于虛擬歷史寄存器的更新,后續(xù)預(yù)測繼續(xù)正確的預(yù)測分支跳 轉(zhuǎn)。
本實施例采用兩級分支預(yù)測機制,設(shè)置了全局歷史寄存器和虛擬歷史寄存器,分別用于記錄經(jīng)確認的分支跳轉(zhuǎn)信息和未經(jīng)確認的分支 預(yù)測歷史信息。采用虛擬歷史寄存器作為分支預(yù)測存儲器的讀索引, 在前續(xù)分支指令的預(yù)測結(jié)果尚未被后級流水線確認的情況下可繼續(xù)進 行準確的分支預(yù)測。當(dāng)分支預(yù)測出現(xiàn)錯誤時,使用全局分支預(yù)測器作 為分支預(yù)測存儲器的寫索引,更新預(yù)測器分支預(yù)測信息,同時去更新 虛擬歷史寄存器,從而保證了后續(xù)分支預(yù)測的準確性。無預(yù)測延時的 分支預(yù)測機制的框架結(jié)構(gòu)如圖1所示。
兩級分支預(yù)測機制是一種經(jīng)典的分支預(yù)測框架,如圖2所示。它 利用分支跳轉(zhuǎn)歷史記錄作為分支預(yù)測的全局相關(guān)索引,索引當(dāng)前分支
預(yù)測器所在的存儲區(qū);分支在程序中的空間地址作為局部相關(guān)索引,
索引當(dāng)前分支預(yù)測器所在特定存儲區(qū)下的特定位置。它很好的運用了 分支的歷史信息完成分支預(yù)測,從而提髙了分支預(yù)測的準確率。 無預(yù)測延時的分支預(yù)測機制設(shè)置全局歷史寄存器,用于記錄經(jīng)過
后級流水線確認的分支預(yù)測歷史信息;它由一個移位寄存器實現(xiàn),分 支指令被后級流水線執(zhí)行單元執(zhí)行后,分支跳轉(zhuǎn)的結(jié)果被保存進入移 位寄存器的最低位(或最高位),移位寄存器中原先保持的跳轉(zhuǎn)歷史信 息各左移(或右移) 一位,始終記錄最近若干次跳轉(zhuǎn)的真實歷史信息。 無預(yù)測延時的分支預(yù)測機制設(shè)置虛擬歷史寄存器用于記錄預(yù)測邏 輯產(chǎn)生的未經(jīng)后級流水線確認的預(yù)測歷史信息;它是一個和全局歷史 寄存器有同樣大小的移位寄存器實現(xiàn),在每次分支預(yù)測后,將當(dāng)前未 經(jīng)后級流水線確認的分支預(yù)測的結(jié)果保存進入移位寄存器的最低位 (或最高位),移位寄存器中原先保持的分支預(yù)測歷史信息各左移(或 右移) 一位,始終記錄最近若干次分支預(yù)測的歷史信息。無預(yù)測延時的分支預(yù)測機制在進行分支預(yù)測時,利用虛擬歷史寄 存器所保存的預(yù)測歷史信息作為全局讀索引,從分支預(yù)測存儲器中讀 取當(dāng)前分支所對應(yīng)的分支預(yù)測的結(jié)果,在前續(xù)分支預(yù)測結(jié)果尚未被后 級流水線確認的情況下的可繼續(xù)進行準確的分支預(yù)測。
在分支預(yù)測預(yù)測出現(xiàn)錯誤時,分支預(yù)測存儲器內(nèi)的預(yù)測器的預(yù)測 結(jié)果需要被更新,用記錄分支跳轉(zhuǎn)正確信息的全局歷史寄存器作為索 引,實現(xiàn)預(yù)測器預(yù)測值的改寫。
同時,虛擬歷史寄存器的值被錯誤預(yù)測結(jié)果污染,導(dǎo)致了虛擬歷 史寄存器記錄的跳轉(zhuǎn)歷史信息與真實跳轉(zhuǎn)歷史信息不一致,此時用記 錄真實歷史信息的全局歷史寄存器實現(xiàn)對虛擬歷史寄存器的更新,后 續(xù)預(yù)測可繼續(xù)正確的預(yù)測分支跳轉(zhuǎn)。
權(quán)利要求
1、一種無預(yù)測延時的分支預(yù)測控制方法,其特征在于所述分支預(yù)測控制方法包括1)、設(shè)置兩級分支預(yù)測機制設(shè)置用于記錄經(jīng)過后級流水線確認的分支預(yù)測歷史信息的全局歷史寄存器,以及用于記錄預(yù)測邏輯產(chǎn)生的未經(jīng)后級流水線確認的預(yù)測歷史信息的虛擬歷史寄存器,設(shè)置用于記錄分支預(yù)測信息的分支預(yù)測存儲器;虛擬歷史寄存器作為分支預(yù)測存儲器的全局讀索引,全局歷史寄存器作為分支預(yù)測存儲器的全局寫索引;2)、如果前續(xù)分支指令的預(yù)測結(jié)果尚未被后級流水線確認,虛擬歷史寄存器讀取預(yù)測結(jié)果,進行分支預(yù)測;當(dāng)分支預(yù)測出現(xiàn)錯誤時,用全局歷史寄存器的值更新虛擬歷史寄存器以及分支預(yù)測存儲器的分支預(yù)測信息。
2、 如權(quán)利要求1所述的無預(yù)測延時的分支預(yù)測控制方法,其特征在于 將分支跳轉(zhuǎn)歷史記錄作為分支預(yù)測的全局相關(guān)索引,索引當(dāng)前分支預(yù) 測器所在的存儲區(qū);分支在程序中的空間地址作為局部相關(guān)索引,索 引當(dāng)前分支預(yù)測器所在特定存儲區(qū)下的特定位置。
3、 如權(quán)利要求1或2所述的無預(yù)測延時的分支預(yù)測控制方法,其特征 在于當(dāng)虛擬歷史寄存器的值被錯誤預(yù)測結(jié)果污染時,用全局歷史寄 存器實現(xiàn)對于虛擬歷史寄存器的更新,后續(xù)預(yù)測繼續(xù)正確的預(yù)測分支 跳轉(zhuǎn)。
4、 如權(quán)利要求3所述的無預(yù)測延時的分支預(yù)測控制方法,其特征在于所述的全局歷史寄存器為第一移位寄存器,分支指令被后級流水線執(zhí) 行單元執(zhí)行后,分支跳轉(zhuǎn)的結(jié)果被保存進入所述第一移位寄存器的最 低位或最高位,所述第一移位寄存器中原先保持的跳轉(zhuǎn)歷史信息各左 移或右移一位,記錄最近若干次跳轉(zhuǎn)的真實歷史信息。
5、 如權(quán)利要求3所述的無預(yù)測延時的分支預(yù)測控制方法,其特征在于 所述虛擬歷史寄存器為第二移位寄存器,在每次分支預(yù)測后,將當(dāng)前 未經(jīng)后級流水線確認的分支預(yù)測的結(jié)果保存進入所述第二移位寄存器 的最低位或最高位,所述第二移位寄存器中原先保持的分支預(yù)測歷史 信息各左移或右移一位,記錄最近若干次分支預(yù)測的歷史信息。
6、 如權(quán)利要求4所述的無預(yù)測延時的分支預(yù)測控制方法,其特征在于所述虛擬歷史寄存器為第二移位寄存器,在每次分支預(yù)測后,將當(dāng)前 未經(jīng)后級流水線確認的分支預(yù)測的結(jié)果保存進入所述第二移位寄存器 的最低位或最高位,所述第二移位寄存器中原先保持的分支預(yù)測歷史信息各左移或右移一位,記錄最近若干次分支預(yù)測的歷史信息;所述第一移位寄存器和第二移位寄存器具有同樣大小的存儲空間。
7、 如權(quán)利要求1或2所述的無預(yù)測延時的分支預(yù)測控制方法,其特征在于在分支預(yù)測預(yù)測出現(xiàn)錯誤時,分支預(yù)測存儲器內(nèi)的預(yù)測器的預(yù)測結(jié)果需要被更新,用記錄分支跳轉(zhuǎn)正確信息的全局歷史寄存器作為 索引,改寫預(yù)測器的預(yù)測值。
8、 如權(quán)利要求6所述的無預(yù)測延時的分支預(yù)測控制方法,其特征在于在分支預(yù)測預(yù)測出現(xiàn)錯誤時,分支預(yù)測存儲器內(nèi)的預(yù)測器的預(yù)測結(jié)果 需要被更新,用記錄分支跳轉(zhuǎn)正確信息的全局歷史寄存器作為索引, 改寫預(yù)測器的預(yù)測值。
全文摘要
一種無預(yù)測延時的分支預(yù)測控制方法,包括1)設(shè)置兩級分支預(yù)測機制設(shè)置用于記錄經(jīng)過后級流水線確認的分支預(yù)測歷史信息的全局歷史寄存器,以及用于記錄預(yù)測邏輯產(chǎn)生的未經(jīng)后級流水線確認的預(yù)測歷史信息的虛擬歷史寄存器,設(shè)置用于記錄分支預(yù)測信息的分支預(yù)測存儲器;虛擬歷史寄存器作為分支預(yù)測存儲器的全局讀索引,全局歷史寄存器作為分支預(yù)測存儲器的全局寫索引;2)如果前續(xù)分支指令的預(yù)測結(jié)果尚未被后級流水線確認,虛擬歷史寄存器讀取預(yù)測結(jié)果,進行分支預(yù)測;當(dāng)分支預(yù)測出現(xiàn)錯誤時,用全局歷史寄存器的值更新虛擬歷史寄存器以及分支預(yù)測存儲器的分支預(yù)測信息。本發(fā)明消除了預(yù)測延時,提高了預(yù)測準確率。
文檔編號G06F9/38GK101477455SQ20091009578
公開日2009年7月8日 申請日期2009年1月22日 優(yōu)先權(quán)日2009年1月22日
發(fā)明者嚴曉浪, 孟建熠, 葛海通, 項曉燕 申請人:浙江大學(xué)