專利名稱:支持多路并行預(yù)測的分支預(yù)測裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機系統(tǒng),更具體地說,涉及一種使用分支預(yù)測表進(jìn)行分支預(yù)測的處理器。
背景技術(shù):
目前,包括嵌入式處理器在內(nèi)的所有處理器,都是用流水線方式,指令處理分為一系列的操作,且由各個的流水線執(zhí)行相應(yīng)的操作。不同的流水線級同時對不同的指令進(jìn)行操作,使得指令的執(zhí)行可以重疊進(jìn)行以提高效率。為了充分利用這個指令執(zhí)行能力,必須由正確的執(zhí)行路徑想該處理器提供足夠的指令,而分支跳轉(zhuǎn)指令的存在,將導(dǎo)致流水線的停頓。預(yù)測機制的出現(xiàn)使處理器可以以投機執(zhí)行的方式繼續(xù)執(zhí)行指令,從而提高了執(zhí)行的效率。
在有指令多發(fā)機制的嵌入式處理器中,在同一級流水線有一條或多于一條的指令需要處理。當(dāng)只有一條分支跳轉(zhuǎn)指令時,傳統(tǒng)的非并行的結(jié)合歷史相關(guān)的分支預(yù)測裝置可以很好地預(yù)測。但當(dāng)遇到同時有多條分支跳轉(zhuǎn)指令時,預(yù)測將出現(xiàn)問題。這是因為歷史相關(guān)的分支預(yù)測中,前一條分支跳轉(zhuǎn)的跳轉(zhuǎn)情況將影響后一條分支跳轉(zhuǎn)的預(yù)測。而在同一級流水線中的前后幾條分支跳轉(zhuǎn)指令的互相影響并不能做到及時獲取預(yù)測信息,造成了預(yù)測效率的低下。發(fā)明內(nèi)容
為了克服已有的嵌入式處理器的分支預(yù)測機制存在的對多發(fā)處理器支持不力導(dǎo)致的預(yù)測準(zhǔn)確率較低的不足,本發(fā)明提供一種解決多條分支跳轉(zhuǎn)指令同時預(yù)測,提高預(yù)測準(zhǔn)確率的支持多路并行預(yù)測的分支預(yù)測裝置。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是
一種支持多路并行預(yù)測的分支預(yù)測裝置,所述分支預(yù)測裝置包括
—個指令預(yù)取單元,用于在一個時鐘周期內(nèi)并行預(yù)取η條指令,η為自然數(shù),且 η彡2 ;
η路并行預(yù)測單元,用于設(shè)置η路并行預(yù)測子單元,對η條分支跳轉(zhuǎn)指令進(jìn)行并行預(yù)測;
一個控制電路,用于檢測整個分支預(yù)測裝置的狀態(tài),連接分支預(yù)測存儲器,為其提供讀使能信號和寫使能信號,連接索引選擇器,為其提供選通信號;
所述并行預(yù)測子單元包括
分支預(yù)測存儲器,用于記錄分支跳轉(zhuǎn)指令的分支預(yù)測信息,并輸出預(yù)測的分支結(jié)果,所述分支跳轉(zhuǎn)指令包含在Π條指令中;
全局歷史移位寄存器,用于記錄經(jīng)過后級流水線確認(rèn)的擁有特定低位PC地址的跳轉(zhuǎn)指令跳轉(zhuǎn)歷史信息,為對應(yīng)的分支預(yù)測存儲器提供寫索引,每個全局歷史移位寄存器的位寬為j位,其中存儲著最近j條分支跳轉(zhuǎn)指令執(zhí)行完成時是否跳轉(zhuǎn)的結(jié)果;
虛擬歷史移位寄存器,用于記錄擁有特定低位PC地址的跳轉(zhuǎn)指令跳轉(zhuǎn)與否預(yù)測軌跡,每個虛擬歷史移位寄存器的位寬為j位,其中存儲著最近j條分支跳轉(zhuǎn)指令是否跳轉(zhuǎn)的預(yù)測結(jié)果;
索引選擇器,連接于全局歷史移位寄存器和虛擬歷史移位寄存器的輸出端和存儲器的輸入端之間,從全局歷史移位寄存器或虛擬歷史移位寄存器中選取j作為最終的分支預(yù)測存儲器的索引。
進(jìn)一步,所述控制電路使用分支跳轉(zhuǎn)指令用低m位的PC地址來區(qū)分不同的分支跳轉(zhuǎn)指令,其中η = 2m,一路分支預(yù)測裝置的預(yù)測結(jié)果只能用于其對應(yīng)的特定的分支跳轉(zhuǎn)指令。
再進(jìn)一步,所述并行預(yù)測子單元中,使用虛擬歷史移位寄存器的全部共j位用于索引對應(yīng)的預(yù)測存儲器,對分支預(yù)測存儲器進(jìn)行讀操作,讀取預(yù)測信息。
更進(jìn)一步,所述控制電路中,當(dāng)分支跳轉(zhuǎn)指令的預(yù)測結(jié)果經(jīng)過后級流水線確認(rèn)正確之后,更新此分支跳轉(zhuǎn)指令所對應(yīng)的全局歷史寄存器,將正確的分支結(jié)果寫入全局歷史移位寄存器的最高位或者最低位,全局歷史移位寄存器則相應(yīng)的左移或者右移一位。
所述控制電路中,對分支跳轉(zhuǎn)指令作出預(yù)測之后,將立即用這條指令的預(yù)測信息更新這條分支跳轉(zhuǎn)指令所對應(yīng)的虛擬歷史寄存器,將預(yù)測的分支結(jié)果寫入虛擬歷史移位寄存器的最高位或者最低位,虛擬歷史移位寄存器則相應(yīng)的左移或者右移一位。
所述控制電路中,當(dāng)分支跳轉(zhuǎn)指令的預(yù)測結(jié)果經(jīng)過后級流水線確認(rèn)錯誤之后,控制電路控制選擇此分支跳轉(zhuǎn)指令所對應(yīng)的分支預(yù)測存儲器進(jìn)行寫操作,此分支跳轉(zhuǎn)指令所對應(yīng)的全局歷史移位寄存器的全部共j位用于索引,將正確的分支結(jié)果寫入分支結(jié)果存儲ο
所述控制電路中,當(dāng)分支跳轉(zhuǎn)指令的預(yù)測結(jié)果經(jīng)過后級流水線確認(rèn)錯誤之后,每一路分支預(yù)測裝置將使用預(yù)測信息更新此分支跳轉(zhuǎn)指令所對應(yīng)的全局歷史寄存器,將跳轉(zhuǎn)結(jié)果寫入全局歷史移位寄存器的最高位或者最低位,全局歷史移位寄存器則相應(yīng)的左移或者右移一位,并用更新后的全局歷史移位寄存器全j位更新對應(yīng)的虛擬歷史移位寄存器的全j位。
本發(fā)明的有益效果為解決多條分支跳轉(zhuǎn)指令同時預(yù)測,提高預(yù)測準(zhǔn)確率。
圖1為多路并行預(yù)測信息和指令對應(yīng)示意圖2為每一路分支預(yù)測裝置結(jié)構(gòu)示意圖3為每路預(yù)測裝置的預(yù)測流程示意圖4為多路預(yù)測裝置的預(yù)測流程示意圖5為每一路的預(yù)測都相對獨立的預(yù)測流程示意圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明做進(jìn)一步說明。
參照圖1 圖2所示,一種支持多路并行預(yù)測的分支預(yù)測裝置,主要分為兩大部分,包括多路并行預(yù)測單元和并行指令取指單元。并行指令取指單元負(fù)責(zé)在一個周期內(nèi)取得多條指令。在一個時鐘周期同時取得多條指令之后,對多條指令的預(yù)測信息才能體現(xiàn)出優(yōu)勢。
參照圖1所示,多路分支預(yù)測單元同時做出η路的預(yù)測信息,并行取指單元同時取得η條指令。每一路的預(yù)測信息和單獨的一條指令相互對應(yīng),以指令的低m位pc來區(qū)分, η = 2m。每一路的預(yù)測信息由一路的分支預(yù)測單元給出,即每路的分支預(yù)測器只對應(yīng)特定低m位pc的分支跳轉(zhuǎn)指令,其讀寫操作都取決于這條特定低位pc分支跳轉(zhuǎn)指令的預(yù)測跳轉(zhuǎn)情況和真實跳轉(zhuǎn)情況,具體情況下文將會詳細(xì)解釋。
參照圖2所示,每一路分支預(yù)測裝置包括一個分支預(yù)測存儲器、一個j位的 GHR(全局歷史移位寄存器)、一個j位的VGHR(虛擬歷史移位寄存器),一個索引選擇器, 和一個控制電路。其中,預(yù)測結(jié)果來自于分支預(yù)測存儲器,實際跳轉(zhuǎn)結(jié)果來自于后級流水線給出的關(guān)于此路分支預(yù)測裝置對應(yīng)的跳轉(zhuǎn)指令是否跳轉(zhuǎn)的真實信息。GHR用于記錄實際跳轉(zhuǎn)結(jié)果。VGHR用于記錄特定低位PC地址的跳轉(zhuǎn)指令跳轉(zhuǎn)與否預(yù)測軌跡。索引選擇器連接于GHR和VGHR的輸出端和存儲器的輸入端之間,從GHR或VGHR中選取j作為最終的分支預(yù)測存儲器的索引??刂齐娐酚糜跈z測整個分支預(yù)測裝置的狀態(tài),連接分支預(yù)測存儲器, 為其提供讀使能信號和寫使能信號,連接索引選擇器,為其提供選通信號。VGHR的全部共j 位用于索引對應(yīng)的預(yù)測存儲器,對分支預(yù)測存儲區(qū)進(jìn)行讀操作,讀取預(yù)測信息。跳轉(zhuǎn)指令的預(yù)測結(jié)果經(jīng)過后級流水線確認(rèn)正確之后,更新GHR,將正確的分支結(jié)果寫入GHR的最高位或者最低位,GHR則相應(yīng)的左移或者右移一位。對分支跳轉(zhuǎn)指令作出預(yù)測之后將立即用這條指令的預(yù)測信息更新VGHR,將預(yù)測的分支結(jié)果寫入VGHR的最高位或者最低位,VGHR則相應(yīng)的左移或者右移一位。當(dāng)分支跳轉(zhuǎn)指令的預(yù)測結(jié)果經(jīng)過后級流水線確認(rèn)錯誤之后,控制電路控制分支預(yù)測存儲器進(jìn)行寫操作,GHR的全部共j位用于索引,將正確的分支結(jié)果寫入分支結(jié)果存儲器;更新GHR,將正確的分支結(jié)果寫入GHR的最高位或者最低位,GHR則相應(yīng)的左移或者右移一位,然后用GHR的值更新對應(yīng)的VGHR。
參照圖3所示,每路預(yù)測裝置的預(yù)測流程首先由取指和取得預(yù)測信息開始。然后判斷這條指令是否一條條件跳轉(zhuǎn)分支跳轉(zhuǎn)指令。如果不是一條條件分支跳轉(zhuǎn)指令,預(yù)測信息將沒有意義,預(yù)測內(nèi)容保持不變。如果是一條條件分支跳轉(zhuǎn)指令,將使用預(yù)測結(jié)果更新 VGHR。新的VGHR將用來索引分支預(yù)測存儲器,并讀出新的預(yù)測信息。于此同時分支跳轉(zhuǎn)指令將流到后級流水線,后級流水線將會判斷這條指令的跳轉(zhuǎn)情況。如果預(yù)測正確,更新 GHR0如果預(yù)測錯誤,先使用GHR索引分支預(yù)測存儲器,并用實際跳轉(zhuǎn)結(jié)果更新存儲器的值, 之后用跳轉(zhuǎn)結(jié)果更新GHR,再用更新后的GHR更新VGHR。
參照圖4和圖5,進(jìn)一步體現(xiàn)出本發(fā)明的優(yōu)勢。如圖4所示,傳統(tǒng)的非并行的結(jié)合歷史相關(guān)的分支預(yù)測裝置在對多條指令進(jìn)行預(yù)測時,后一條指令要根據(jù)前一條指令的跳轉(zhuǎn)信息來索引分支預(yù)測存儲器,才能為后一條的分支跳轉(zhuǎn)指令得到新的預(yù)測信息。由于這是一個串行的過程,這種方式預(yù)測效率大大降低,預(yù)測的必要性也接近于0,只能采取對后面的指令放棄預(yù)測等方式。而結(jié)合圖5來看,每一路的預(yù)測都相對獨立,前一次的預(yù)測結(jié)果或跳轉(zhuǎn)信息都不會對后一次的預(yù)測造成太大的影響。這種相對的獨立性保證了在并行取得多條指令時,預(yù)測信息的快速取得,不會因為指令條數(shù)的增加而使預(yù)測效率降低,從而保證了預(yù)測裝置的功能性和必要性。
權(quán)利要求
1.一種支持多路并行預(yù)測的分支預(yù)測裝置,其特征在于所述分支預(yù)測裝置包括一個指令預(yù)取單元,用于在一個時鐘周期內(nèi)并行預(yù)取η條指令,η為自然數(shù),且η ^ 2 ;η路并行預(yù)測單元,用于設(shè)置η路并行預(yù)測子單元,對η條分支跳轉(zhuǎn)指令進(jìn)行并行預(yù)測;一個控制電路,用于檢測整個分支預(yù)測裝置的狀態(tài),連接分支預(yù)測存儲器,為其提供讀使能信號和寫使能信號,連接索引選擇器,為其提供選通信號;所述并行預(yù)測子單元包括分支預(yù)測存儲器,用于記錄分支跳轉(zhuǎn)指令的分支預(yù)測信息,并輸出預(yù)測的分支結(jié)果,所述分支跳轉(zhuǎn)指令包含在η條指令中;全局歷史移位寄存器,用于記錄經(jīng)過后級流水線確認(rèn)的擁有特定低位PC地址的跳轉(zhuǎn)指令跳轉(zhuǎn)歷史信息,為對應(yīng)的分支預(yù)測存儲器提供寫索引,每個全局歷史移位寄存器的位寬為j位,其中存儲著此移位寄存器對應(yīng)位置的最近執(zhí)行j條分支跳轉(zhuǎn)指令在執(zhí)行完畢后是否跳轉(zhuǎn)的結(jié)果;虛擬歷史移位寄存器,用于記錄擁有特定低位PC地址的跳轉(zhuǎn)指令跳轉(zhuǎn)與否預(yù)測軌跡, 每個虛擬歷史移位寄存器的位寬為j位,其中存儲著最近j條分支跳轉(zhuǎn)指令是否跳轉(zhuǎn)的預(yù)測結(jié)果;索引選擇器,連接于全局歷史移位寄存器和虛擬歷史移位寄存器的輸出端和存儲器的輸入端之間,從全局歷史移位寄存器或虛擬歷史移位寄存器中選取j作為最終的分支預(yù)測存儲器的索引。
2.如權(quán)利要求1所述的支持多路并行預(yù)測的分支預(yù)測裝置,其特征在于所述控制電路使用分支跳轉(zhuǎn)指令用低m位的PC地址來區(qū)分不同的分支跳轉(zhuǎn)指令,其中η = 2m,一路分支預(yù)測裝置的預(yù)測結(jié)果只能用于其對應(yīng)的特定的分支跳轉(zhuǎn)指令。
3.如權(quán)利要求1或2所述的支持多路并行預(yù)測的分支預(yù)測裝置,其特征在于所述并行預(yù)測子單元中,使用虛擬歷史移位寄存器的全部共j位用于索引對應(yīng)的預(yù)測存儲器,對分支預(yù)測存儲器進(jìn)行讀操作,讀取預(yù)測信息。
4.如權(quán)利要求1或2所述的支持多路并行預(yù)測的分支預(yù)測裝置,其特征在于所述控制電路中,當(dāng)分支跳轉(zhuǎn)指令的預(yù)測結(jié)果經(jīng)過后級流水線確認(rèn)正確之后,更新此分支跳轉(zhuǎn)指令所對應(yīng)的全局歷史寄存器,將正確的分支結(jié)果寫入全局歷史移位寄存器的最高位或者最低位,全局歷史移位寄存器則相應(yīng)的左移或者右移一位。
5.如權(quán)利要求1或2所述的支持多路并行預(yù)測的分支預(yù)測裝置,其特征在于所述控制電路中,對分支跳轉(zhuǎn)指令作出預(yù)測之后,將立即用這條指令的預(yù)測信息更新這條分支跳轉(zhuǎn)指令所對應(yīng)的虛擬歷史寄存器,將預(yù)測的分支結(jié)果寫入虛擬歷史移位寄存器的最高位或者最低位,虛擬歷史移位寄存器則相應(yīng)的左移或者右移一位。
6.如權(quán)利要求1或2所述的支持多路并行預(yù)測的分支預(yù)測裝置,其特征在于所述控制電路中,當(dāng)分支跳轉(zhuǎn)指令的預(yù)測結(jié)果經(jīng)過后級流水線確認(rèn)錯誤之后,控制電路控制選擇此分支跳轉(zhuǎn)指令所對應(yīng)的分支預(yù)測存儲器進(jìn)行寫操作,此分支跳轉(zhuǎn)指令所對應(yīng)的全局歷史移位寄存器的全部共j位用于索引,將正確的分支結(jié)果寫入分支結(jié)果存儲器。
7.如權(quán)利要求1或2所述的支持多路并行預(yù)測的分支預(yù)測裝置,其特征在于所述控制電路中,當(dāng)分支跳轉(zhuǎn)指令的預(yù)測結(jié)果經(jīng)過后級流水線確認(rèn)錯誤之后,每一路分支預(yù)測裝置將使用預(yù)測信息更新此分支跳轉(zhuǎn)指令所對應(yīng)的全局歷史寄存器,將跳轉(zhuǎn)結(jié)果寫入全局歷史移位寄存器的最高位或者最低位,全局歷史移位寄存器則相應(yīng)的左移或者右移一位,并用更新后的全局歷史移位寄存器全j位更新對應(yīng)的虛擬歷史移位寄存器的全j位。
全文摘要
一種支持多路并行預(yù)測的分支預(yù)測裝置,所述分支預(yù)測裝置包括一個指令預(yù)取單元,用于在一個時鐘周期內(nèi)并行預(yù)取n條指令,n為自然數(shù),且n≥2;n路并行預(yù)測單元,用于設(shè)置n路并行預(yù)測子單元,對n條分支跳轉(zhuǎn)指令進(jìn)行并行預(yù)測;一個控制電路,用于檢測整個分支預(yù)測裝置的狀態(tài),連接分支預(yù)測存儲器,為其提供讀使能信號和寫使能信號,連接索引選擇器,為其提供選通信號;本發(fā)明提供一種解決多條分支跳轉(zhuǎn)指令同時預(yù)測,提高預(yù)測準(zhǔn)確率的支持多路并行預(yù)測的分支預(yù)測裝置。
文檔編號G06F9/38GK102520914SQ201110347139
公開日2012年6月27日 申請日期2011年11月4日 優(yōu)先權(quán)日2011年11月4日
發(fā)明者劉兵, 孟建熠, 葛海通, 郭宇波 申請人:杭州中天微系統(tǒng)有限公司