專利名稱::對(duì)非控制流指令減少分支檢驗(yàn)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明一般涉及微處理器,特別是為分支預(yù)測(cè)降低能耗。
背景技術(shù):
:微處理器是響應(yīng)于實(shí)現(xiàn)計(jì)算機(jī)程序的指令來執(zhí)行各種計(jì)算操作的電子設(shè)備。實(shí)現(xiàn)計(jì)算機(jī)程序的通用技術(shù)是以預(yù)定序列發(fā)送多個(gè)指令到微處理器的執(zhí)行單元,然后順序地執(zhí)行這些指令。在一些情況下,程序跳出了次序來執(zhí)行不是序列里的下條指令的指令??梢砸饒?zhí)行跳出序列的指令的一個(gè)例子是分支指令。當(dāng)執(zhí)行一分支指令時(shí),微處理器可以跳到由分支指令標(biāo)識(shí)的目標(biāo)指令,并且微處理器下一步執(zhí)行的是該目標(biāo)指令,而非下一順序指令。如圖示,圖1顯示程序執(zhí)行序列的示例,其中以順序方式執(zhí)行五個(gè)順序指令1-5,指令1首先執(zhí)行,然后第二執(zhí)行指令2等等。在該示例中,指令5是一分支指令,其指定指令2為其目標(biāo)指令。執(zhí)行分支指令5后,微處理器跳出了順序指令的次序,接下來執(zhí)行程序執(zhí)行順序中的指令2,而非下一順序指令6。微處理器經(jīng)常使用幾個(gè)階段來處理指令,其可包括指令取階段,其中從指令高速緩存中取出指令;指令解碼階段,其中對(duì)取來的指令進(jìn)行解碼;指令執(zhí)行階段,其中執(zhí)行指令。為了提高通過各種階段處理多個(gè)指令的速度,一些微處理器采用已知的流水線技術(shù)。流水線在流水線的多個(gè)階段對(duì)幾個(gè)不同的指令同時(shí)執(zhí)行處理的不同部分的意義上類似于裝配線。流水線技術(shù)的一個(gè)例子是,在第一計(jì)算周期中由流水線的第一階段處理第一指令1。在第二周期中,第一指令1進(jìn)入到流水線的第二階段,并且第二指令2開始流水線的第一階段。在第三周期中,第一指令1進(jìn)入到流水線的第三階段,第二指令2進(jìn)入到流水線的第二階段,并且第三指令3開始流水線的第一階段等等。流水線可以使得多個(gè)指令執(zhí)行得比微處理器每次只處理一條指令的情況更快速。例如,流水線技術(shù)允許在每個(gè)周期完成不同指令的處理。分支指令會(huì)降低流水線技術(shù)的效率。當(dāng)執(zhí)行一分支指令時(shí),微處理器可能試圖跳出順序的次序,而執(zhí)行并不在流水線中的目標(biāo)指令。要跳到目標(biāo)指令,微處理器可能放棄已經(jīng)在流水線中的指令,然后開始重新啟動(dòng)在目標(biāo)指令開始的流水線。結(jié)果當(dāng)目標(biāo)指令被取和由流水線的初始階段進(jìn)行處理時(shí),可能發(fā)生延遲,導(dǎo)致通過流水線處理指令時(shí)速度的總體下降。分支預(yù)測(cè)是已用來提高執(zhí)行分支指令的流水線微處理器的速度的技術(shù)。分支預(yù)測(cè)通過使能微處理器在執(zhí)行分支指令之前就取出分支指令后有可能執(zhí)行的指令,可提高流水線微處理器的速度。分支預(yù)測(cè)可以包括預(yù)測(cè)條件分支是否采用、和/或預(yù)測(cè)分支目標(biāo),其是分支指令的目標(biāo)指令。例如,當(dāng)微處理器確定條件分支可能被采用時(shí),可以在執(zhí)行分支指令之前將預(yù)測(cè)的目標(biāo)指令取入到流水線中,以為分支操作的流水線作準(zhǔn)備。分支歷史表是可以存儲(chǔ)關(guān)于之前分支是否被采用的歷史信息的分支預(yù)測(cè)單元,該歷史信息可用于預(yù)測(cè)未來的分支是否將被采用。分支目標(biāo)緩沖器是可以預(yù)測(cè)分支指令的目標(biāo)的分支預(yù)測(cè)單元。一些微處理器使用分支歷史表和分支目標(biāo)緩沖器來執(zhí)行分支預(yù)測(cè)。
發(fā)明內(nèi)容—些實(shí)施例涉及一種執(zhí)行指令的微處理器。微處理器取一組指令,所述指令包括至少一個(gè)控制流指令和至少一個(gè)非控制流指令。微處理器包括控制指令標(biāo)識(shí)單元和分支預(yù)測(cè)單元??刂浦噶顦?biāo)識(shí)單元存儲(chǔ)控制指令標(biāo)識(shí)信息,所述控制指令標(biāo)識(shí)信息標(biāo)識(shí)已取指令組中該至少一個(gè)非控制流指令。分支預(yù)測(cè)單元檢驗(yàn)對(duì)應(yīng)該至少一個(gè)控制流指令的已存儲(chǔ)的分支預(yù)測(cè)信息,不檢驗(yàn)對(duì)應(yīng)該至少一個(gè)非控制流指令的已存儲(chǔ)的分支預(yù)測(cè)信息?!?shí)施例涉及在微處理器中檢驗(yàn)分支預(yù)測(cè)信息的方法,其中在該組已取指令中標(biāo)識(shí)一個(gè)或多個(gè)控制流指令。對(duì)于控制流指令進(jìn)行分支預(yù)測(cè)信息的檢驗(yàn),而對(duì)于非控制流指令不進(jìn)行分支預(yù)測(cè)信息的檢驗(yàn)。附圖中,每個(gè)相同的或幾乎相同的組件在不同圖中用相似的數(shù)字表示。為了清楚起見,并非每個(gè)附圖的所有組件都進(jìn)行標(biāo)注。附圖中顯示包括分支指令的程序執(zhí)行順序的示例;顯示根據(jù)一些實(shí)施例的超標(biāo)量微處理器的前端流水線;顯示根據(jù)一些實(shí)施例,具有對(duì)于非控制流指令索引輸入可被禁止的分支目圖l圖2圖3標(biāo)緩沖器;圖4史表;圖5圖6顯示根據(jù)一些實(shí)施例,具有對(duì)于非控制流指令索引輸入可被禁止的分支歷顯示根據(jù)一些實(shí)施例的指令高速緩存標(biāo)簽數(shù)組,其存儲(chǔ)控制指令標(biāo)識(shí)信息;顯示根據(jù)一些實(shí)施例的控制指令標(biāo)識(shí)單元的示例,其可以存儲(chǔ)控制標(biāo)識(shí)信息以使(多個(gè))索引輸入對(duì)BHT和/或BTB使能/禁止;圖7.顯示根據(jù)一些實(shí)施例的電路,其為分支目標(biāo)緩沖器和/或分支歷史表產(chǎn)生掩碼信號(hào);具體實(shí)施例如上所述,分支指令會(huì)降低微處理器流水線的速度,一些微處理器包括(多個(gè))硬件組件諸如分支歷史表(branchhistorytable,BHT)和/或分支目標(biāo)緩沖器(branchtargetbuffer,BTB),其提供可用于提高流水線的速度的分支預(yù)測(cè)信息。一些微處理器,例如超標(biāo)量微處理器,使用分支歷史表和分支目標(biāo)緩沖器來改善性能。超標(biāo)量微處理器是一種利用微處理器核心內(nèi)幾個(gè)功能單元,例如算術(shù)邏輯單元和/或其它的功能單元在一個(gè)周期中執(zhí)行多于一個(gè)指令的處理器。在超標(biāo)量微處理器中,可以從指令高速緩存中并行地取出幾個(gè)指令。當(dāng)指令取正被執(zhí)行時(shí),可以同時(shí)檢驗(yàn)BHT和/或BTB的關(guān)于該被取指令的分支預(yù)測(cè)信息。例如,如果在指令取階段取出四個(gè)指令,可以檢驗(yàn)BHT和/或BTB的對(duì)應(yīng)于該四條被取指令的任何分支預(yù)測(cè)信息。如果一個(gè)或多個(gè)指令是分支指令,BHT和/或BTB可以提供對(duì)應(yīng)的分支預(yù)測(cè)信息,其可用于改善流水線的速度。例如,如果預(yù)測(cè)要采用一條件分支,微處理器可以在執(zhí)行該分支指令之前取出目標(biāo)指令來提前準(zhǔn)備。5我們已經(jīng)意識(shí)到,為分支預(yù)測(cè)訪問BHT和/或BTB會(huì)消耗大量的功率,特別是當(dāng)并行檢驗(yàn)多個(gè)指令時(shí)。根據(jù)現(xiàn)有技術(shù),如果并行取幾個(gè)指令,都將由BHT和/或BTB檢驗(yàn)所有的被取指令的對(duì)應(yīng)分支預(yù)測(cè)信息。然而,也已經(jīng)意識(shí)到的是,檢驗(yàn)所有已取指令會(huì)消耗大量的功率,而且檢驗(yàn)所有的已取指令可能并不是必要的。特別是已經(jīng)意識(shí)到,只有控制流指令有可能執(zhí)行分支操作,而非控制流指令可能不執(zhí)行分支操作??刂屏髦噶羁梢砸痍P(guān)于將由微處理器執(zhí)行的程序流的判斷,而且具有引起分支操作的可能性。然而非控制流指令對(duì)程序流沒有影響,也沒有引起分支操作的可能性。因此,在BHT和/或BTB中檢驗(yàn)非控制流指令是不必要的,因?yàn)榉强刂屏髦噶畈贿M(jìn)行分支操作,并且BHT和BTB將沒有與非控制流指令對(duì)應(yīng)的分支預(yù)測(cè)信息。因此已經(jīng)意識(shí)到,通過減少或阻止對(duì)BHT和/或BTB訪問非控制流指令可節(jié)省大量的功率。在一些實(shí)施例中,將微處理器配置成在BHT和/或BTB中對(duì)已取指令組中的控制流指令檢驗(yàn)對(duì)應(yīng)的分支預(yù)測(cè)信息,對(duì)已取指令組中的非控制流指令不檢驗(yàn)分支預(yù)測(cè)信息。該技術(shù)可以降低在BHT和/或BTB中查找的指令數(shù),并因此降低由BHT和/或BTB的消耗的功率量。對(duì)于許多應(yīng)用已經(jīng)顯示出了仿真結(jié)果,只有少量的已取指令是可以引發(fā)分支操作的控制流指令。例如,在具有四個(gè)指令的取帶寬的微處理器中,大部分的取指令塊(fetchblock)可能包括0、1個(gè)或2個(gè)控制流指令,極少的取指令塊可能包括3個(gè)或者4個(gè)控制流指令。對(duì)于一些指令集結(jié)構(gòu)(ISA),如MIPS(MicroprocessorwithoutInterlockedPipelineStages,無互鎖流水線階段的微處理器),控制指令后面有延遲槽指令,延遲槽指令不是控制流指令。在這樣的體系結(jié)構(gòu)中,四指令的取指令塊可能包括不多于兩個(gè)控制流指令。因?yàn)榭刂屏髦噶畹臄?shù)量相對(duì)少,可以通過防止一些或全部非控制流指令對(duì)BTB和/或BHT訪問,來降低對(duì)BTB或BHT的訪問數(shù)量,這能顯著節(jié)省BTB和/或BHT內(nèi)的功率。在一些實(shí)施例中,控制流指令和非控制流指令可以在執(zhí)行之前進(jìn)行標(biāo)識(shí),以減少或消除基于非控制流指令對(duì)BTB和/或BHT的訪問。當(dāng)確定一組已取指令中的哪些指令是非控制流指令后,對(duì)于非控制流指令可以阻止或減少對(duì)BTB和/或BHT的訪問。已經(jīng)顯示了仿真結(jié)果是使用這樣的技術(shù)可以節(jié)約大量功率,在一些情況下BTB和BHT的總功耗可以降低58.38%。然而功耗降低量會(huì)根據(jù)特定的實(shí)現(xiàn)方式而更高或更低。圖2顯示了根據(jù)一些實(shí)施例的超標(biāo)量微處理器的前端流水線。在該實(shí)例中,流水線的第一階段是指令取階段,其中指令從指令高速緩存23中取出用于后續(xù)的處理和執(zhí)行。訪問BTB21、BHT22、指令轉(zhuǎn)換后備緩沖器(ITLB)24和控制指令標(biāo)識(shí)單元(CII)25也在該階段同指令取同時(shí)執(zhí)行。BTB21、BHT22和控制指令標(biāo)識(shí)單元25的操作將在下文中更詳細(xì)地論述。在一些實(shí)施例中,使用微處理器的程序計(jì)數(shù)器(PC)作為記錄在指令執(zhí)行序列中程序的當(dāng)前位置的索引來訪問設(shè)備21-25,該程序計(jì)數(shù)器。例如,BTB21和BHT22可以利用正從指令高速緩存中取出的指令的一個(gè)或多個(gè)PC來索引,BTB21和/或BHT22可以利用該索引來搜索對(duì)應(yīng)的分支預(yù)測(cè)信息。圖3顯示根據(jù)一些實(shí)施例存儲(chǔ)分支預(yù)測(cè)信息的分支目標(biāo)緩沖器21的示例。分支目標(biāo)緩沖器21存儲(chǔ)了幾個(gè)分別代表分支指令的標(biāo)簽31,還存儲(chǔ)它們的對(duì)應(yīng)預(yù)測(cè)分支目標(biāo)的索引作為目標(biāo)PC32。通過比較該索引和標(biāo)簽31,可以檢驗(yàn)分支目標(biāo)緩沖器21的分支預(yù)測(cè)信息,以確定是否有BTB"擊中",其意味著BTB21存儲(chǔ)了對(duì)應(yīng)于正被查找的索引所對(duì)應(yīng)6的分支預(yù)測(cè)信息??梢酝ㄟ^多于一個(gè)索引同時(shí)訪問BTB21來查找取指令組中的多于一個(gè)的指令。例如,如果正從指令高速緩存中同時(shí)取出一組四個(gè)指令,分支目標(biāo)緩沖器21可以根據(jù)四個(gè)已取指令的四個(gè)程序計(jì)數(shù)器被同時(shí)訪問。例如,對(duì)于諸如RISC(精簡(jiǎn)指令集計(jì)算機(jī))這樣的指令集體系結(jié)構(gòu),每個(gè)指令的長(zhǎng)度可能是四字節(jié)(32位)。在一些微處理器存儲(chǔ)器系統(tǒng)中,最小的可尋址單元是一字節(jié)。因此在RISC微處理器中,用于訪問BTB21的索引可以以四字節(jié)的增量來分開。例如,在具有四指令的取指令帶寬的RISC微處理器中,可以使用四個(gè)索引來同時(shí)訪問BTB21,如PC,PC+4,PC+8和PC+12。如圖3所示,所有四個(gè)索引可以提供給BTB21,并用于在同一時(shí)間訪問分支目標(biāo)緩沖器。如果有一BTB"擊中",該"擊中"指令的目標(biāo)PC可用于將指令取重新指向到分支指令對(duì)應(yīng)的目標(biāo)PC。如果對(duì)該組已取指令出現(xiàn)多個(gè)BTB擊中,程序序列中最早指令的目標(biāo)PC可用于將指令取重新指向到對(duì)應(yīng)的目標(biāo)PC。盡管已經(jīng)討論過RISC的實(shí)現(xiàn)方式,其中每個(gè)指令的長(zhǎng)度是四字節(jié),此處所描述的技術(shù)并不局限于此實(shí)現(xiàn)方式,可以使用任何合適長(zhǎng)度的指令,例如多于或少于四字節(jié)。此處描述的技術(shù)也包括使用在指令長(zhǎng)度不固定的微處理器上,其具有可變指令長(zhǎng)度。在這樣的微處理中,相鄰指令的地址差可能不等于四。如上所述,應(yīng)當(dāng)意識(shí)到,通過對(duì)于非控制流指令減少訪問BTB21的次數(shù),可以降低BTB21的消耗的功率。一旦識(shí)別出已取指令組中的控制流指令,可以限制對(duì)BTB21的訪問,使得在BTB21中只查找控制流指令。如圖3所示,一些實(shí)施例中,BTB21包括"使能"輸入,其可用于使能或禁止在BTB21中查找對(duì)應(yīng)的指令。圖3所示的BTB21包括四個(gè)使能輸入,每個(gè)使能輸入對(duì)應(yīng)可被同時(shí)查找的四個(gè)指令索引中的一個(gè)。在本實(shí)施例中,輸入使能0'用于使能第一指令索引(PC),輸入使能1'用于使能第二指令索引(PC+4),輸入使能2'用于使能第三指令索引(PC+8),輸入使能3'用于使能第四指令索引(PC+12)。如果對(duì)應(yīng)的使能輸入接收到具有高邏輯值的信號(hào),那么對(duì)應(yīng)的指令索引輸入可被使能,允許該指令在BTB21中查找。如果對(duì)應(yīng)的使能輸入接收到具有低邏輯值的信號(hào),那么對(duì)應(yīng)的指令索引輸入可被禁止,阻止該指令在BTB21中查找。然而,這僅是一個(gè)例子,應(yīng)當(dāng)意識(shí)到的是此處描述的技術(shù)可使用任何合適的邏輯電平。在一些實(shí)施例中,圖3所示的使能信號(hào)可以由一個(gè)或多個(gè)邏輯電路33提供給BTB21,如圖3所示的與(AND)門。在該示例中,四個(gè)AND各具有兩個(gè)輸入可用于使能指令索引輸入的所有操作的對(duì)應(yīng)的使能信號(hào),可用于對(duì)于非控制流指令禁止指令索引輸入的對(duì)應(yīng)的掩碼輸入信號(hào)。產(chǎn)生這些掩碼信號(hào)的示例性技術(shù)將在下文中參考圖7作進(jìn)一步的討論。圖4顯示根據(jù)一些實(shí)施例的分支歷史表22的示例,該分支歷史表可存儲(chǔ)關(guān)于在先分支和預(yù)測(cè)未來分支的分支歷史信息。分支歷史表22可以存儲(chǔ)關(guān)于之前的條件分支是否已被采用的分支歷史信息。分支歷史表22可以利用分支歷史信息來預(yù)測(cè)一條件分支將來是否被采用。如圖4所示,分支歷史表22包括預(yù)測(cè)單元41和42,其可以使用任何合適的技術(shù)來執(zhí)行各種不同類型的分支預(yù)測(cè)。分支歷史表22還包括選擇器43,其選擇使用哪種類型的分支預(yù)測(cè),并可能選擇使用哪個(gè)預(yù)測(cè)單元,如預(yù)測(cè)單元41或42。如圖4所示,與分支目標(biāo)緩沖器21相同,如果從指令高速緩存中取出四個(gè)指令,可以使用四個(gè)對(duì)應(yīng)的索引來同時(shí)對(duì)分支歷史表22進(jìn)行訪問,如PC,PC+4,PC+8,PC+12。如上所述,已經(jīng)意識(shí)到的是通過基于非控制流指令來減少對(duì)BHT22的訪問數(shù)量,可以降低BHT22消耗的功率。一旦標(biāo)識(shí)出已取指令組中的控制流指令,可以限制對(duì)BHT22的訪問,使得在BHT22中只查找控制流信息,以得到任何對(duì)應(yīng)的分支預(yù)測(cè)信息。如圖4所示,一些實(shí)施例中,BHT22包括"使能"輸入,其可用于使能或禁止在BHT22中查找對(duì)應(yīng)的指令。在一些實(shí)施例中,這些使能輸入功能上類似于之前針對(duì)BTB21討論的使能輸入。在一些微處理器中,BTB和BHT的預(yù)測(cè)結(jié)果可被傳送到解碼階段,其中會(huì)對(duì)BTB和BHT的預(yù)測(cè)結(jié)果進(jìn)行比較。根據(jù)一些技術(shù),當(dāng)來自BTB和BHT的預(yù)測(cè)結(jié)果互相不一致時(shí),可使用BHT的預(yù)測(cè)結(jié)果。然而,應(yīng)當(dāng)意識(shí)到的是,由于本發(fā)明并不局限于特定分支預(yù)測(cè)技術(shù)或設(shè)備的使用,可以使用BTB和BHT的預(yù)測(cè)結(jié)果之一或全部。—些實(shí)施例是關(guān)于從指令高速緩存中取出一組指令之前標(biāo)識(shí)一組已取指令中的控制流指令。例如,在標(biāo)識(shí)控制指令之后,控制指令的PC可以用于訪問BTB和/或BHT,而不是已取指令組中的所有指令。在一些實(shí)施例中,微處理器包括指令高速緩存標(biāo)簽數(shù)組(tagarray),其存儲(chǔ)標(biāo)識(shí)控制流指令的控制指令標(biāo)識(shí)信息。該控制標(biāo)識(shí)信息可以存儲(chǔ)在指令高速緩存標(biāo)簽數(shù)組中,或是其它合適的位置。圖5顯示根據(jù)一些實(shí)施例的指令高速緩存標(biāo)簽數(shù)組50的示例,其與存儲(chǔ)多個(gè)指令的指令高速緩存23相關(guān)聯(lián)。指令高速緩存可能包括許多"行",每個(gè)行存儲(chǔ)多個(gè)控制指令,并且每行可能同指令高速緩存標(biāo)簽數(shù)組的高速緩存標(biāo)簽51相關(guān)聯(lián)。對(duì)于指令高速緩存中的每行,指令標(biāo)簽數(shù)組可能存儲(chǔ)對(duì)應(yīng)的控制指令標(biāo)識(shí)信息52,其包括控制指令標(biāo)識(shí)位。在該示例中,每一高速緩存行存儲(chǔ)16個(gè)指令,指令高速緩存標(biāo)簽數(shù)組為每一高速緩存行存儲(chǔ)16個(gè)控制指令標(biāo)識(shí)位的對(duì)應(yīng)的集合。每一控制指令標(biāo)識(shí)位標(biāo)識(shí)在該指令高速緩存中對(duì)應(yīng)的指令是控制流指令還是非控制流指令。在該示例中,"1"表示對(duì)應(yīng)指令為控制流指令,"0"表示對(duì)應(yīng)指令為非控制流指令。然而這僅是一示例,可以使用任何合適類型的控制標(biāo)識(shí)信息來標(biāo)識(shí)控制流指令和/或非控制流指令。為了獲得存儲(chǔ)在指令高速緩存標(biāo)簽數(shù)組中的控制指令標(biāo)識(shí)信息,一個(gè)或多個(gè)解碼器53可以預(yù)解碼指令,以產(chǎn)生控制指令標(biāo)識(shí)信息52。當(dāng)例如執(zhí)行指令高速緩存行重填時(shí),或在另一合適的時(shí)間時(shí),可以存儲(chǔ)指令高速緩存中一行的控制指令標(biāo)識(shí)信息52。一些微處理器使用重填單元,其負(fù)責(zé)從通過存儲(chǔ)總線接收到的指令重填數(shù)據(jù)數(shù)組和指令高速緩存標(biāo)簽數(shù)組。重填單元可以提供指令給一個(gè)或多個(gè)解碼器,解碼器從每個(gè)指令中提取信息,基于所提取的信息確定每個(gè)指令是控制流指令還是非控制流指令。例如,解碼器可以提取指令的optcode,其表示指令是哪種類型。通過檢查每條指令的optcode,解碼器可以確定哪些指令是控制流指令,哪些指令是非控制流指令。指令高速緩存標(biāo)簽數(shù)組50的一個(gè)可能的限制是在指令從指令高速緩存取出的同時(shí)訪問BHT22和BTB21,在那時(shí)來自指令高速緩存標(biāo)簽數(shù)組50的控制指令標(biāo)識(shí)信息52可能對(duì)于BHT22和BTB21不可用。指令高速緩存標(biāo)簽數(shù)組50不能足夠快地訪問控制指令標(biāo)識(shí)信息52,以用于BHT22和/或BTB21的使能/禁止輸入。要給BHT22和BTB21提供這種控制標(biāo)識(shí)信息52,可以使用另一裝置,以下稱其為控制指令標(biāo)識(shí)單元(controlinstructionidentification皿it,CII)圖6顯示根據(jù)一些實(shí)施例描述控制指令標(biāo)識(shí)單元25的示例,其可以存儲(chǔ)控制指令標(biāo)識(shí)信息52,以用于BTB21和/或BHT22的使能/禁止輸入。可以認(rèn)為控制指令標(biāo)識(shí)單元25是個(gè)象BTB或BHT的預(yù)測(cè)單元,可以預(yù)測(cè)下一高速緩存行地址。通過預(yù)測(cè)下一高速緩存行地址,CII25可以提前獲得下一高速緩存行的控制指令標(biāo)識(shí)信息52,這樣當(dāng)由取單元訪問下一高速緩存行時(shí),該高速緩存行的控制標(biāo)識(shí)信息52在CII中可用,并且該信息可以提供給BTB和/或BHT,以便BTB和/或BHT只對(duì)于控制流指令可被訪問。控制指令標(biāo)識(shí)單元25可以對(duì)指令高速緩存中的一行存儲(chǔ)三種類型的信息高速緩存行地址61,控制指令標(biāo)識(shí)信息52,和飽和計(jì)數(shù)器62。特定高速緩存行條目(entry)的高速緩存行地址61可以是指令高速緩存中的預(yù)測(cè)的下一行。高速緩存行的控制指令標(biāo)識(shí)信息52是為指令高速緩存中相關(guān)行標(biāo)識(shí)控制流指令或非控制流指令。飽和計(jì)數(shù)器62可以包括兩位,其功能上類似于用于其它預(yù)測(cè)單元,如BHT,的飽和計(jì)數(shù)器,也可以用于提高預(yù)測(cè)精度。在一些實(shí)現(xiàn)中,當(dāng)飽和計(jì)數(shù)器62的值等于2或以上時(shí),由CII單元25做出下一高速緩存行的預(yù)測(cè),因?yàn)轭A(yù)測(cè)被確定為強(qiáng)。然而當(dāng)飽和計(jì)數(shù)器的值低于2時(shí),該預(yù)測(cè)可被確定為不夠精確,可能并不做出預(yù)測(cè)。然而應(yīng)當(dāng)意識(shí)到的,可以使用任何合適的預(yù)測(cè)技術(shù),此處所描述的技術(shù)并不局限于使用飽和計(jì)數(shù)器??刂浦噶顦?biāo)識(shí)單元25可以從指令高速緩存標(biāo)簽數(shù)組50接收和存儲(chǔ)控制指令標(biāo)識(shí)信息52,伴隨相應(yīng)的高速緩存行地址61。在BHT、BTB、指令高速緩存和ITBL使用正被取的當(dāng)前PC的同時(shí)訪問控制指令標(biāo)識(shí)單元25。每一周期,控制指令標(biāo)識(shí)單元25可以為該組指令預(yù)測(cè)下一高速緩存行地址。每一周期,由控制指令標(biāo)識(shí)單元25預(yù)測(cè)的高速緩存行地址可以與正從指令高速緩存中取出的當(dāng)前PC進(jìn)行比較。如果兩地址匹配,則由控制指令標(biāo)識(shí)單元25提供的預(yù)測(cè)是正確的,由控制指令標(biāo)識(shí)單元25提供的對(duì)應(yīng)控制指令標(biāo)識(shí)信息正確地對(duì)標(biāo)識(shí)了已取指令塊中的控制流指令和非控制流指令。然后可以根據(jù)標(biāo)識(shí)的控制流指令來訪問BTB21和BHT22,而對(duì)于非控制流指令,不訪問BTB21和BHT22。然而,如果兩個(gè)地址不匹配,那么在之前周期預(yù)測(cè)的地址是不正確的,所提供的控制標(biāo)識(shí)信息可能與當(dāng)前正取的指令并不對(duì)應(yīng)。當(dāng)預(yù)測(cè)高速緩存行被確定為不正確時(shí),在BHT和/或BTB中檢驗(yàn)所有的所取指令?,F(xiàn)在說明控制指令標(biāo)識(shí)單元25的操作的示例。在第一周期(周期_0),指令高速緩存的第一行(高速緩存行J))的程序計(jì)數(shù)器(PC_0)可用于訪問CII25。在程序計(jì)數(shù)器用于訪問指令高速緩存、BTB和BHT的同時(shí),可以使用PC_0訪問CII25。哈希功能單元63可以在程序計(jì)數(shù)器PC_0上計(jì)算一哈希函數(shù)來產(chǎn)生索引(索引_0),且該索引可用于訪問CII25以查找下一高速緩存行信息。在后面的周期(周期jii),可以訪問指令高速緩存的下一行(高速緩存行_1)。高速緩存行_1的地址可以從指令取單元獲得。如果對(duì)于高速緩存行_1在指令高速緩存中有高速緩存行擊中,可以基于該指令高速緩存標(biāo)簽數(shù)組中對(duì)應(yīng)的條目獲得控制指令標(biāo)識(shí)信息52。如果在指令高速緩存中未得到高速緩存行(高速緩存行_1),高速緩存行則從存儲(chǔ)器中取出,并被重填到該指令高速緩存。當(dāng)該高速緩存行被重填時(shí),對(duì)應(yīng)的控制指令標(biāo)識(shí)信息可由重填單元的(多個(gè))解碼器53產(chǎn)生。當(dāng)接收到高速緩存行_1的控制指令信息時(shí),可知高速緩存行_1是高速緩存行J)的下一高速緩存行。在周期_0中,CII單元作出誰(shuí)是CII[索引O]的預(yù)測(cè)。在CII25中在CII[索引—0]中的控制指令標(biāo)識(shí)信息可從CII25中讀出,以在當(dāng)訪問下一高速緩存行(高速緩存行_1)的另一周期(周期_m)期間使用,且該信息可用于使能或禁止BTB和/或BHT的輸入。如果高速緩存行_1地址等于在周期_0中預(yù)測(cè)的CII[索引0]地址,這意味著周期_0中的預(yù)測(cè)是正確的,因此來自周期J)的控制指令信息請(qǐng)求可在該周期中使用以使能/禁止BTB/BHT訪問。此外,CII[索引0]中的飽和計(jì)數(shù)器62增加"l",這意味著CII單元25做出了正確的預(yù)測(cè)。然而,如果所取的高速緩存行地址不等于CII[索引O]地址,這意味著周期_0中的預(yù)測(cè)是錯(cuò)誤的,而且在周期O中請(qǐng)求的控制指令標(biāo)識(shí)信息52不是對(duì)應(yīng)于高速緩存行_1的信息。在這種情況下,可以執(zhí)行CII信息校正。隨著BHT信息校正,CII條目可能不會(huì)立刻被新高速緩存行信息替換。在替換在CII[索引O]的信息之前,可以檢驗(yàn)飽和計(jì)數(shù)器62的CII[索引0]。在一些實(shí)現(xiàn)方式中,如果計(jì)數(shù)器不等于"0",該CII[索引0]不被替換,且"計(jì)數(shù)器"可減少1。如果CII[索引0]的飽和計(jì)數(shù)器62等于"0",可以用高速緩存行_1的信息替換CII[索引0]。圖7顯示根據(jù)一些實(shí)施例的說明掩碼信號(hào)產(chǎn)生電路的示圖,其從控制指令標(biāo)識(shí)單元25接收預(yù)測(cè)地址和控制標(biāo)識(shí)信息并產(chǎn)生掩碼信號(hào),該掩碼信號(hào)可用于使能/禁止BTB和/或BHT的輸入。在本示例中,控制標(biāo)識(shí)信息25被提供給16:4多路復(fù)用器(MUX)72,其從16個(gè)指令中選擇對(duì)應(yīng)正被取的4個(gè)指令的4個(gè)指令。當(dāng)前取PC的低位位可用于選擇對(duì)應(yīng)于正被取的四個(gè)指令的控制指令標(biāo)識(shí)信息25。例如,如果高速緩存行包括16個(gè)指令,MUX72可使用取PC的低位位來確定當(dāng)前正取的是哪四個(gè)指令。由16:4MUX72所產(chǎn)生的四個(gè)信號(hào)分別提供給掩碼信號(hào)產(chǎn)生邏輯73的四個(gè)OR門的相應(yīng)的第一輸入。如圖7所示,比較單元71將對(duì)應(yīng)高速緩存行地址的取PC的高位位同來自控制指令標(biāo)識(shí)單元25的預(yù)測(cè)地址進(jìn)行比較。OR門的第二輸入接收在實(shí)際地址和預(yù)測(cè)地址之間比較的結(jié)果的補(bǔ)充(complement)?;诘谝缓偷诙斎?,OR門產(chǎn)生掩碼信號(hào)掩碼0-掩碼3,其可用于如圖3和4中所示的BTB和/或BHT的使能/禁止輸入。如果兩個(gè)比較的地址是相等的,則OR門的第二輸入為低,掩碼信號(hào)等于該四個(gè)指令的控制標(biāo)識(shí)信息。如果兩地址不相等,則由控制指令標(biāo)識(shí)單元25預(yù)測(cè)的地址不正確,這意味著控制標(biāo)識(shí)信息并沒有與當(dāng)前正取的指令對(duì)應(yīng)。因此,0R門的第二輸入是高,導(dǎo)致所有的掩碼信號(hào)為高,允許所有指令在BTB和BHT中查找。然而,應(yīng)當(dāng)意識(shí)到的是這僅是一示例,可以使用任何適合的掩碼信號(hào)產(chǎn)生電路。如上所述,一些指令是控制流指令,而一些指令是非控制流指令。此處使用的術(shù)語(yǔ)"非控制流指令"指不是控制流指令的指令。控制流指令的例子包括能夠執(zhí)行跳轉(zhuǎn)操作或分支操作的指令。在MIPS32體系結(jié)構(gòu)中,例如,下列指令是控制流指令b,bal,beq,beql,bgez,bgezal和bgezall(同分支相關(guān)的指令);以及j,jal,jr和jalr(同跳轉(zhuǎn)相關(guān)的指令)。然而,應(yīng)當(dāng)意識(shí)到的是這不是指令的唯一列表。此外,可以使用任何合適的體系結(jié)構(gòu),MIPS32僅是一個(gè)例子。本發(fā)明并不局限于應(yīng)用于之前如圖所示或所述的構(gòu)造細(xì)節(jié)和組件布置。本發(fā)明可有可以各種不同方式予以實(shí)施或?qū)崿F(xiàn)的其它實(shí)施例。而且,此處所用措詞和術(shù)語(yǔ)是為了描述之用,不應(yīng)被看做是限制。使用"包括"、"包含"、或"具有"、"含有"、"有"和其它表達(dá)方式,意味著囊括了此后所列的術(shù)語(yǔ)和其等價(jià)物以及附加的術(shù)語(yǔ)。已經(jīng)這樣描述了本發(fā)明的至少一個(gè)實(shí)施例的幾個(gè)方面,應(yīng)該理解對(duì)于本領(lǐng)域技術(shù)人員可以很容易產(chǎn)生不同變化、修改和改進(jìn)。這些變化、修改和改進(jìn)應(yīng)該是本發(fā)明公開的一部分,應(yīng)該屬于本發(fā)明的精神和范圍之內(nèi)。因此,前述說明書和附圖僅僅是舉例的方式。權(quán)利要求一種執(zhí)行指令的微處理器,其中該微處理器取一組指令,所述指令包括至少一個(gè)控制流指令和至少一個(gè)非控制流指令,該微處理器包括控制指令標(biāo)識(shí)單元,其存儲(chǔ)控制指令標(biāo)識(shí)信息,所述控制指令標(biāo)識(shí)信息標(biāo)識(shí)已取指令組中該至少一個(gè)非控制流指令;分支預(yù)測(cè)單元,其檢驗(yàn)對(duì)應(yīng)于該至少一個(gè)控制流指令的分支預(yù)測(cè)信息,并且不檢驗(yàn)對(duì)應(yīng)于該至少一個(gè)非控制流指令的分支預(yù)測(cè)信息。2.如權(quán)利要求1所述的微處理器,其中分支預(yù)測(cè)單元包含分支歷史表。3.如權(quán)利要求1所述的微處理器,其中分支預(yù)測(cè)單元包含分支目標(biāo)緩沖器。4.如權(quán)利要求1所述的微處理器,其中微處理器是并行取該組指令的超標(biāo)量處理器。5.如權(quán)利要求1所述的微處理器,其中微處理器根據(jù)包括多個(gè)階段的流水線執(zhí)行指令,其中分支預(yù)測(cè)單元在該多個(gè)階段的第一階段檢驗(yàn)分支預(yù)測(cè)信息,該微處理器進(jìn)一步包括指令高速緩存,在流水線的該第一階段中從所述指令高速緩存中取出該組指令。6.如權(quán)利要求5所述的微處理器,進(jìn)一步包括存儲(chǔ)控制指令標(biāo)識(shí)信息的指令高速緩存標(biāo)簽數(shù)組,其中該控制指令標(biāo)識(shí)信息標(biāo)識(shí)該至少一個(gè)控制流指令,其中控制指令標(biāo)識(shí)單元從指令高速緩存標(biāo)簽數(shù)組中接收控制指令標(biāo)識(shí)信息。7.如權(quán)利要求6所述的微處理器,進(jìn)一步包括至少一個(gè)解碼器,其對(duì)指令進(jìn)行解碼以產(chǎn)生控制指令標(biāo)識(shí)信息,其中指令高速緩存標(biāo)簽數(shù)組從該至少一個(gè)解碼器接收該控制指令標(biāo)識(shí)信息。8.如權(quán)利要求5所述的微處理器,其中該控制指令標(biāo)識(shí)單元預(yù)測(cè)該指令高速緩存的地址。9.如權(quán)利要求8所述的微處理器,其中該微處理器使用程序計(jì)數(shù)器對(duì)指令高速緩存進(jìn)行訪問,其中該微處理器進(jìn)一步包括比較單元,其對(duì)程序計(jì)數(shù)器的至少一部分同由控制指令標(biāo)識(shí)單元預(yù)測(cè)的地址進(jìn)行比較。10.如權(quán)利要求9所述的微處理器,其中當(dāng)程序計(jì)數(shù)器的該至少一部分同由控制指令標(biāo)識(shí)單元預(yù)測(cè)的地址匹配時(shí),分支預(yù)測(cè)單元檢驗(yàn)對(duì)應(yīng)于該至少一個(gè)控制流指令的分支預(yù)測(cè)信息,并且不檢驗(yàn)對(duì)應(yīng)于該至少一個(gè)非控制流指令的分支預(yù)測(cè)信息。11.在執(zhí)行指令的微處理器中,檢驗(yàn)分支預(yù)測(cè)信息的方法,該方法包括取一組指令,包括至少一個(gè)控制流指令和至少一個(gè)非控制流指令;對(duì)應(yīng)于該至少一個(gè)控制流指令檢驗(yàn)分支預(yù)測(cè)單元的分支預(yù)測(cè)信息,對(duì)應(yīng)于該至少一個(gè)非控制流指令不檢驗(yàn)分支預(yù)測(cè)單元的分支預(yù)測(cè)信息。12.如權(quán)利要求ll所述的方法,進(jìn)一步包括預(yù)解碼該組指令,以產(chǎn)生標(biāo)識(shí)該至少一個(gè)控制流指令和該至少一個(gè)非控制流指令的控制指令標(biāo)識(shí)信息。13.如權(quán)利要求12所述的方法,進(jìn)一步包括在指令高速緩存標(biāo)簽數(shù)組中存儲(chǔ)該控制指令標(biāo)識(shí)信息。14.如權(quán)利要求12所述的方法,進(jìn)一步包括在控制指令標(biāo)識(shí)單元中存儲(chǔ)該控制指令標(biāo)識(shí)信息。15.如權(quán)利要求ll所述的方法,進(jìn)一步包括訪問指令高速緩存,以取出該組指令;在訪問該指令高速緩存的同時(shí),訪問存儲(chǔ)控制指令標(biāo)識(shí)信息的控制指令標(biāo)識(shí)單元,所述控制指令標(biāo)識(shí)信息標(biāo)識(shí)該至少一個(gè)控制流指令和該至少一個(gè)非控制流指令;以及在訪問指令高速緩存的同時(shí),基于控制指令標(biāo)識(shí)信息檢驗(yàn)分支預(yù)測(cè)單元。全文摘要本發(fā)明涉及對(duì)非控制流指令減少分支檢驗(yàn)。一些微處理器在分支歷史表和/或分支目標(biāo)緩沖器中檢驗(yàn)分支預(yù)測(cè)信息。要檢驗(yàn)分支預(yù)測(cè)信息,微處理器可以標(biāo)識(shí)哪些指令是控制流指令,哪些指令是非控制流指令。要降低分支歷史表和/或分支目標(biāo)緩沖器中的功耗,分支歷史表和/或分支目標(biāo)緩沖器可以檢驗(yàn)對(duì)應(yīng)于控制流指令的分支預(yù)測(cè)信息,而不檢驗(yàn)對(duì)應(yīng)于非控制流指令的分支預(yù)測(cè)信息。文檔編號(hào)G06F9/38GK101763249SQ200810190998公開日2010年6月30日申請(qǐng)日期2008年12月25日優(yōu)先權(quán)日2008年12月25日發(fā)明者吳永強(qiáng),孫紅霞,王凱峰申請(qǐng)人:世意法(北京)半導(dǎo)體研發(fā)有限責(zé)任公司