專利名稱:分支預(yù)測(cè)控制的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理系統(tǒng)領(lǐng)域。更具體地說(shuō),本發(fā)明涉及含有分支預(yù)測(cè)機(jī)構(gòu)和對(duì)分支預(yù)測(cè)機(jī)制之控制的數(shù)據(jù)處理系統(tǒng)。
背景技術(shù):
眾所周知,提供包括有分支預(yù)測(cè)機(jī)制的處理器,所述分支預(yù)測(cè)機(jī)制以不同方式進(jìn)行關(guān)于程序指令序列內(nèi)的分支指令是否將導(dǎo)致轉(zhuǎn)移操作(程序流程中的轉(zhuǎn)移)的預(yù)測(cè)。精確預(yù)測(cè)分支指令是否將導(dǎo)致轉(zhuǎn)移操作的結(jié)果是,在已知分支是否將實(shí)際導(dǎo)致轉(zhuǎn)移操作(如分支是否將傳遞其條件碼或者分支是否將導(dǎo)致轉(zhuǎn)移至與前面的間接分支情形相同的位置等等)之前,可以開(kāi)始依照分支預(yù)測(cè)結(jié)果從存儲(chǔ)單元取出程序指令。與這樣的分支預(yù)測(cè)機(jī)制相關(guān)聯(lián)的電路和復(fù)雜性開(kāi)銷之合理性,由其產(chǎn)生的性能的顯著增加所證明。具體地說(shuō),精確預(yù)測(cè)分支結(jié)果減少了在分支指令執(zhí)行之前因?yàn)榱魉€刷新結(jié)果而使錯(cuò)誤的程序指令經(jīng)推測(cè)而取出以及重新取出所需的正確指令序列的可能性。
能夠增加分支預(yù)測(cè)機(jī)制的精度及有效性的技術(shù)在處理器性能的改進(jìn)方面具有強(qiáng)大優(yōu)勢(shì)。
發(fā)明內(nèi)容
在一個(gè)方面,本發(fā)明提供了用于在程序指令序列的控制下處理數(shù)據(jù)的設(shè)備,所述設(shè)備包含指令解碼器,可用來(lái)為多個(gè)不同編碼類型的分支程序指令解碼;
分支預(yù)測(cè)器,可用來(lái)檢測(cè)所述程序指令序列內(nèi)的分支指令并預(yù)測(cè)轉(zhuǎn)移操作是否將由所檢測(cè)的分支指令產(chǎn)生;其中所述多個(gè)不同編碼類型的分支程序指令包括至少一個(gè)由所述分支預(yù)測(cè)器為其進(jìn)行預(yù)測(cè)的預(yù)測(cè)型分支指令;并且包括至少一個(gè)非預(yù)測(cè)型分支指令,除了不受制于所述分支預(yù)測(cè)器的預(yù)測(cè)以外,它提供與其中一個(gè)所述預(yù)測(cè)型分支指令相同的功能性。
本發(fā)明認(rèn)識(shí)到,對(duì)于給定的分支程序指令,在某些情況下,與誤預(yù)測(cè)相關(guān)聯(lián)的性能損失比與未作預(yù)測(cè)相關(guān)聯(lián)的性能損失更糟。本發(fā)明還認(rèn)識(shí)到,在程序被編碼并提供一種將不會(huì)導(dǎo)致由分支預(yù)測(cè)機(jī)構(gòu)所作的預(yù)測(cè)的分支程序指令時(shí),這樣的情形可能經(jīng)常被提前認(rèn)識(shí)到。因此,所述系統(tǒng)提供了被分支預(yù)測(cè)機(jī)構(gòu)檢測(cè)并預(yù)測(cè)的一些分支程序指令編碼以及不被分支預(yù)測(cè)機(jī)構(gòu)預(yù)測(cè)的其他分支程序指令編碼。因此,在所作的任何預(yù)測(cè)可能會(huì)是誤預(yù)測(cè)、導(dǎo)致比未作預(yù)測(cè)更糟的后果的場(chǎng)合,程序員或編譯器可選擇使用非預(yù)測(cè)型分支程序指令。特定的轉(zhuǎn)移操作可能難以預(yù)測(cè),因?yàn)殡S機(jī)行為或系統(tǒng)行為與分支預(yù)測(cè)機(jī)構(gòu)的假設(shè)相反。在這種場(chǎng)合不作分支預(yù)測(cè)有各種各樣的好處,其中可包括不消耗可在別處有效使用的分支預(yù)測(cè)機(jī)構(gòu)資源。其他的例子是,由于分支預(yù)測(cè)機(jī)構(gòu)試圖預(yù)測(cè)已知不適合預(yù)測(cè)的轉(zhuǎn)移操作的緣故,用于其他轉(zhuǎn)移操作的預(yù)測(cè)可能變得不夠精確。
在一些優(yōu)選的示范實(shí)施例中,分支預(yù)測(cè)器可包括分支歷史緩沖器,可用來(lái)存儲(chǔ)表示基于所存儲(chǔ)的過(guò)去行為的歷史給定分支是否將被采用的分支歷史數(shù)據(jù)。通過(guò)試圖預(yù)測(cè)和跟蹤已知無(wú)規(guī)律的轉(zhuǎn)移操作,這樣的機(jī)構(gòu)可能變得效率低下(例如,它可能不夠精確地識(shí)別分支結(jié)果的樣式),并且因此本發(fā)明的方法可用來(lái)使分支歷史緩沖器不存儲(chǔ)與非預(yù)測(cè)性的轉(zhuǎn)移操作有關(guān)的數(shù)據(jù)。
另一個(gè)優(yōu)選的實(shí)施例中,用分支目標(biāo)緩沖存儲(chǔ)器來(lái)存儲(chǔ)先前遇到的轉(zhuǎn)移操作的分支目標(biāo)地址。這種分支目標(biāo)緩沖存儲(chǔ)器的容量是有限的,將這樣的容量耗費(fèi)在已知不準(zhǔn)確預(yù)測(cè)的類型的轉(zhuǎn)移操作上會(huì)使這樣的容量無(wú)法提供給可被精確預(yù)測(cè)的其他轉(zhuǎn)移操作使用。因此,分支目標(biāo)緩沖存儲(chǔ)器被布置成不存儲(chǔ)與非預(yù)測(cè)轉(zhuǎn)移操作有關(guān)的數(shù)據(jù)。
對(duì)分支目標(biāo)緩沖存儲(chǔ)器的又一限制是,它們通常具有有限數(shù)量的存取端口,且浪費(fèi)這些端口的其中一個(gè)來(lái)試圖存取以不被預(yù)測(cè)為好的類型的分支有關(guān)的數(shù)據(jù),將導(dǎo)致該存取端口無(wú)法提供給可在該時(shí)被取出并可有效地被預(yù)測(cè)的其他分支指令使用。
當(dāng)會(huì)理解,屬于預(yù)測(cè)型和非預(yù)測(cè)型的不同類型的分支指令可具有各種各樣的不同形式。然而,非預(yù)測(cè)型分支指令的優(yōu)選形式是一種可附加地表明指令集內(nèi)之變化的形式。當(dāng)這種被表明有某種變化的附加指令集不存在時(shí),這種分支指令的非預(yù)測(cè)性質(zhì)可疊加在這類指令上來(lái)獲益,否則該分支指令的可區(qū)分特征會(huì)是多余的,并且可被有效地重新用來(lái)發(fā)出信號(hào),表示分支預(yù)測(cè)機(jī)構(gòu)不應(yīng)當(dāng)被用于這種類型的分支指令。
在一些優(yōu)選實(shí)施例中,這種非預(yù)測(cè)型分支指令包括一種使用間接參考存儲(chǔ)該目標(biāo)地址的寄存器來(lái)規(guī)定其目標(biāo)地址的分支指令。與采用目標(biāo)地址直接表示的指令相比,采用對(duì)分支目標(biāo)的間接參考更可能表明精確預(yù)測(cè)之低概率。在分支目標(biāo)可能變化時(shí)通常使用間接參考,因此這正是一種其中精確預(yù)測(cè)不太可能的情況。
在另一個(gè)方面,本發(fā)明提供了用于在程序指令序列的控制下處理數(shù)據(jù)的設(shè)備,所述設(shè)備包含指令解碼器裝置,用于為多個(gè)不同編碼類型的分支程序指令解碼;分支預(yù)測(cè)器裝置,用于檢測(cè)所述程序指令序列內(nèi)的分支指令并預(yù)測(cè)轉(zhuǎn)移操作是否將從所檢測(cè)的分支指令產(chǎn)生;其中所述多個(gè)不同編碼類型的分支程序指令包括至少一個(gè)預(yù)測(cè)型分支指令,所述分支預(yù)測(cè)器裝置對(duì)其進(jìn)行預(yù)測(cè);并且包括至少一個(gè)非預(yù)測(cè)型分支指令,它提供了與其中一個(gè)所述預(yù)測(cè)型分支指令(除了不受所述分支預(yù)測(cè)器預(yù)測(cè)以外)相同的功能性。
在又一個(gè)方面,本發(fā)明提供了一種用于在程序指令序列的控制下處理數(shù)據(jù)的方法,所述方法包含下列步驟為多個(gè)不同編碼類型的分支程序指令解碼;使用分支預(yù)測(cè)器檢測(cè)所述程序指令序列內(nèi)的分支指令并預(yù)測(cè)轉(zhuǎn)移操作是否將從所檢測(cè)的分支指令產(chǎn)生;其中所述多個(gè)不同編碼類型的分支程序指令包括至少一個(gè)預(yù)測(cè)型分支指令,所述分支預(yù)測(cè)器對(duì)其進(jìn)行預(yù)測(cè);并且包括至少一個(gè)非預(yù)測(cè)型分支指令,其提供了與其中一個(gè)所述預(yù)測(cè)型分支指令(除了不受所述分支預(yù)測(cè)器預(yù)測(cè)之外)相同的功能性。
在另一個(gè)方面,本發(fā)明提供了裝有計(jì)算機(jī)程序的計(jì)算機(jī)程序載體,可用來(lái)控制數(shù)據(jù)處理設(shè)備在程序指令序列的控制下處理數(shù)據(jù),所述數(shù)據(jù)處理設(shè)備設(shè)有分支預(yù)測(cè)器,可用來(lái)檢測(cè)所述程序指令序列內(nèi)的分支指令并預(yù)測(cè)轉(zhuǎn)移操作是否將從所檢測(cè)的分支指令產(chǎn)生,所述計(jì)算機(jī)程序包含多個(gè)不同編碼類型的分支程序指令;至少一個(gè)預(yù)測(cè)型分支指令,所述分支預(yù)測(cè)器對(duì)其進(jìn)行預(yù)測(cè);以及至少一個(gè)非預(yù)測(cè)型分支指令,其提供了與其中一個(gè)所述預(yù)測(cè)型分支指令(除了不受所述分支預(yù)測(cè)器預(yù)測(cè)以外)相同的功能性。
在一個(gè)輔助方面,本發(fā)明提供了編譯器,用于編譯計(jì)算機(jī)程序以控制數(shù)據(jù)處理設(shè)備在包括有多個(gè)不同編碼類型的分支程序指令的程序指令序列的控制下處理數(shù)據(jù),所述數(shù)據(jù)處理設(shè)備具有分支預(yù)測(cè)器,可用來(lái)檢測(cè)所述程序指令序列內(nèi)的分支指令并預(yù)測(cè)轉(zhuǎn)移操作是否將從所檢測(cè)的分支指令產(chǎn)生,所述編譯器可用來(lái)生成至少一個(gè)預(yù)測(cè)型分支指令,所述分支預(yù)測(cè)器對(duì)其進(jìn)行預(yù)測(cè);以及至少一個(gè)非預(yù)測(cè)型分支指令,它提供了與其中一個(gè)所述預(yù)測(cè)型分支指令(除了不受所述分支預(yù)測(cè)器預(yù)測(cè)以外)相同的功能性。
當(dāng)會(huì)理解,用于編譯計(jì)算機(jī)程序的編譯器通過(guò)它們自身有利地使用本發(fā)明的方法或使用由程序員提供的信息來(lái)識(shí)別那些可能不會(huì)導(dǎo)致精確預(yù)測(cè)的轉(zhuǎn)移操作,并因此在它們生成的代碼中用非預(yù)測(cè)型分支指令而不是預(yù)測(cè)型分支指令來(lái)表示那些轉(zhuǎn)移操作。
通過(guò)下面參照附圖詳細(xì)描述的說(shuō)明性實(shí)施例,本發(fā)明上述的及其他的目的、特征和優(yōu)點(diǎn)將顯而易見(jiàn)。
圖1示意說(shuō)明結(jié)合了分支預(yù)測(cè)機(jī)構(gòu)的處理器;圖2示意說(shuō)明包括預(yù)測(cè)分支指令類型和非預(yù)測(cè)分支指令類型的許多不同的編碼分支指令;以及圖3是示意說(shuō)明具有預(yù)測(cè)數(shù)據(jù)的預(yù)測(cè)分支機(jī)構(gòu)的增殖流程圖。
具體實(shí)施例方式
圖1示出了處理器2,其中包括標(biāo)準(zhǔn)數(shù)據(jù)處理部件,例如寄存器文件4、乘法器6、移位器8和加法器10,它們?cè)谟山獯a器12生成的控制信號(hào)的控制下發(fā)揮作用來(lái)實(shí)施期望的數(shù)據(jù)處理操作。由取指令單元14從存儲(chǔ)器(未作圖示)取出的指令被送進(jìn)指令流水線16,所述指令沿指令流水線16行進(jìn)以按標(biāo)準(zhǔn)流水線處理原理被解碼并執(zhí)行。
處理器2包括分支預(yù)測(cè)機(jī)構(gòu),在此示范實(shí)施例中,分支預(yù)測(cè)機(jī)構(gòu)包含分支歷史緩沖器18,存儲(chǔ)關(guān)于先前遇到的預(yù)測(cè)型分支指令之被采用和未被采用之結(jié)果的樣式。分支預(yù)測(cè)機(jī)構(gòu)還包含分支目標(biāo)緩沖器20,用于存儲(chǔ)與已被采用的、先前遇到的預(yù)測(cè)型分支指令相關(guān)聯(lián)的分支目標(biāo)地址。取指令單元14在接收指令時(shí)將指令地址發(fā)送到分支目標(biāo)緩沖器20,在此處它被用來(lái)導(dǎo)引進(jìn)所存儲(chǔ)的、先前遇到的分支目標(biāo)地址的陣列。按內(nèi)容尋址的存儲(chǔ)器用于存儲(chǔ)先前遇到的分支指令的地址,以在來(lái)自當(dāng)前取出的指令的地址被應(yīng)用于此時(shí)、若當(dāng)前取出指令的地址與被存儲(chǔ)的先前曾找到分支指令的地址相對(duì)應(yīng),則發(fā)生命中。如果這樣的命中發(fā)生,則分支目標(biāo)緩沖器將該分支指令的分支目標(biāo)地址返回到取指令單元14。此時(shí)還要訪問(wèn)分支歷史緩沖器18,以依照先前觀測(cè)到的行為來(lái)確定依照前述的關(guān)于分支被采用和未被采用的結(jié)果的檢測(cè)樣式剛被識(shí)別的分支指令是否將被采用或不被采用。如果分支歷史緩沖器表明遇到的分支指令被預(yù)測(cè)將被采用,則由分支目標(biāo)緩沖器20返回的分支目標(biāo)地址可被取指令單元14使用,以按照分支預(yù)測(cè)根據(jù)由分支目標(biāo)緩沖器20表明的地址開(kāi)始取出指令。
當(dāng)會(huì)理解,這些分支預(yù)測(cè)機(jī)構(gòu)本身是公知的,且依照本發(fā)明的方法可使用不同類型的分支預(yù)測(cè)機(jī)構(gòu)。
當(dāng)分支指令到達(dá)指令流水線末端并且將被從該處收回時(shí),分支預(yù)測(cè)更新電路20的作用是依照目前已被正確執(zhí)行的分支指令的實(shí)際結(jié)果更新分支預(yù)測(cè)機(jī)構(gòu)14、18和20。指令解碼器12對(duì)多個(gè)不同編碼類型的分支程序指令有響應(yīng)。這些類型的分支指令中的某些是經(jīng)歷了分支預(yù)測(cè)機(jī)構(gòu)14、18、20預(yù)測(cè)的經(jīng)預(yù)測(cè)指令。另外,還有這樣一些分支指令的編碼,這些分支指令盡管在被執(zhí)行時(shí)確實(shí)實(shí)施轉(zhuǎn)移操作,但不受到分支預(yù)測(cè)機(jī)構(gòu)14、18、20的預(yù)測(cè),并且不用來(lái)更新分支歷史緩沖器18或分支目標(biāo)緩沖器20。這樣的非預(yù)測(cè)分支指令因?yàn)椴桓掠煞种ьA(yù)測(cè)機(jī)構(gòu)14、18、20存儲(chǔ)的預(yù)測(cè)數(shù)據(jù),它們?cè)谥噶盍鲀?nèi)發(fā)生時(shí)將不會(huì)被分支預(yù)測(cè)機(jī)構(gòu)檢測(cè)并且將不會(huì)受到預(yù)測(cè)。說(shuō)明最好不試圖預(yù)測(cè)已知可能是誤預(yù)測(cè)的分支指令的原因的一個(gè)實(shí)例是分支目標(biāo)緩沖器20的單個(gè)存取端口如果被不必要地占用以試圖存取與可能被誤預(yù)測(cè)的分支有關(guān)的信息,則可阻止另一個(gè)對(duì)可能被成功地精確預(yù)測(cè)的分支指令的存取。此外,如果分支預(yù)測(cè)機(jī)構(gòu)有限的存儲(chǔ)資源用來(lái)存儲(chǔ)與不可能被成功預(yù)測(cè)的分支指令有關(guān)的信息,則它們就會(huì)被浪費(fèi)。另一個(gè)因素是誤預(yù)測(cè)干擾了歷史數(shù)據(jù)并且可使整個(gè)預(yù)測(cè)的精度降級(jí),因此它們最好被排除在數(shù)據(jù)之外,例如被排除在分支歷史緩沖器18的關(guān)于分支被采用/未被采用的歷史數(shù)據(jù)之外。
圖2說(shuō)明了依照由ARM Limited Cambridge England設(shè)計(jì)的ARM處理器的ARM指令集體系結(jié)構(gòu)的五個(gè)不同編碼類型的分支指令。這些不同編碼類型的分支指令的頭四個(gè)為經(jīng)受了分支預(yù)測(cè)的預(yù)測(cè)分支指令。最后的類型是非預(yù)測(cè)分支指令類型,可以在可能被誤預(yù)測(cè)場(chǎng)合在程序內(nèi)使用(在程序員的顯式控制下或者如由編譯器自動(dòng)生成)。該非預(yù)測(cè)分支指令類型未經(jīng)受預(yù)測(cè),因此不會(huì)不必要地使分支預(yù)測(cè)機(jī)構(gòu)的性能降級(jí)。將會(huì)看到,在此示范性實(shí)施例中,非預(yù)測(cè)分支指令類型是一種采用經(jīng)由寄存器Rm對(duì)其分支目標(biāo)作間接參考的類型。這種對(duì)分支目標(biāo)的間接參考應(yīng)當(dāng)可能在高級(jí)的誤檢測(cè)會(huì)發(fā)生的場(chǎng)合使用。在此例中,非預(yù)測(cè)分支指令BXJ提供了與被預(yù)測(cè)的BX指令相同的功能性而不是非預(yù)測(cè)的提示信息。當(dāng)會(huì)理解,圖2中說(shuō)明的特定指令只是可能經(jīng)受本發(fā)明的方法的分支指令的一例,而在不同處理器體系結(jié)構(gòu)中或ARM處理器體系結(jié)構(gòu)中采用不同指令將是適當(dāng)?shù)摹?br>
圖3是示意說(shuō)明存儲(chǔ)的預(yù)測(cè)數(shù)據(jù)更新的流程圖。在步驟22中,指令從流水線上撤下。接著在步驟24中,確定撤下的分支指令是否屬于預(yù)測(cè)型。如果分支指令不屬于預(yù)測(cè)型,則處理結(jié)束。如果分支指令屬于預(yù)測(cè)型,則在步驟26中更新分支歷史緩沖器,并在步驟28中更新分支目標(biāo)緩沖器。因?yàn)榉穷A(yù)測(cè)型分支指令不會(huì)導(dǎo)致對(duì)分支預(yù)測(cè)機(jī)構(gòu)14、18、20的任何更新,在被遇到時(shí)會(huì)被這些機(jī)構(gòu)忽略并且不會(huì)經(jīng)受那些分支預(yù)測(cè)機(jī)構(gòu)的分支預(yù)測(cè)。非預(yù)測(cè)的提示信息將來(lái)可能被具有分支預(yù)測(cè)機(jī)構(gòu)的處理器忽略,所述的分支預(yù)測(cè)機(jī)構(gòu)具有有效地預(yù)測(cè)這些不易分支行為的能力,從而提供有用的正向兼容性路徑。
如前所述,非預(yù)測(cè)型分支指令可由知道特定轉(zhuǎn)移操作可能受到誤預(yù)測(cè)的程序員手工插入程序代碼內(nèi)。或者,這些非預(yù)測(cè)型分支指令也可由按照本發(fā)明的方法的編譯器自動(dòng)或半自動(dòng)地調(diào)用。程序員可用表示特定轉(zhuǎn)移操作可能被誤預(yù)測(cè)的信息來(lái)注釋高級(jí)代碼,并且編譯器可對(duì)該提示信息作出響應(yīng)以將非預(yù)測(cè)型分支指令用于該轉(zhuǎn)移操作。另外作為備選或另加的方式,編譯器可自動(dòng)檢測(cè)那些表現(xiàn)出可能表明分支誤預(yù)測(cè)將經(jīng)常發(fā)生之特性的高級(jí)程序指令代碼的序列。這種特性的實(shí)例會(huì)有大量的間接分支參考例如與嵌套的DLL或者未解決的面向?qū)ο笳Z(yǔ)言中的過(guò)程調(diào)用一起存在。當(dāng)編譯器檢測(cè)出這樣的特征時(shí),它可使用將被分支預(yù)測(cè)機(jī)構(gòu)14、18、20忽略的非預(yù)測(cè)型分支指令??稍诰幾g器內(nèi)使用的另一種技術(shù)是它可仿效編譯器生成的被編譯代碼的執(zhí)行并且描繪所述代碼的狀態(tài)以識(shí)別某些分支是否正導(dǎo)致較大數(shù)量的誤預(yù)測(cè)。如果這樣的誤預(yù)測(cè)分支正在發(fā)生,則代表那些分支的程序指令可由非預(yù)測(cè)型程序指令取代。
盡管在這里已經(jīng)參照附圖對(duì)本發(fā)明的說(shuō)明性實(shí)施例進(jìn)行了詳細(xì)描述,但是應(yīng)當(dāng)理解,本發(fā)明并不拘泥于那些實(shí)施例,并且只要不背離所附權(quán)利要求書(shū)規(guī)定的本發(fā)明的范圍和精神,本領(lǐng)域的技術(shù)人員可實(shí)施各種變更和修改。
權(quán)利要求
1.在程序指令序列的控制下處理數(shù)據(jù)的設(shè)備,所述設(shè)備包含指令解碼器,可用來(lái)為多個(gè)不同編碼類型的分支程序指令解碼;分支預(yù)測(cè)器,可用來(lái)檢測(cè)所述程序指令序列內(nèi)的分支指令并預(yù)測(cè)轉(zhuǎn)移操作是否將由經(jīng)檢測(cè)的分支指令產(chǎn)生;其中所述多個(gè)不同編碼類型的分支程序指令包括至少一個(gè)預(yù)測(cè)型分支指令,所述分支預(yù)測(cè)器對(duì)其進(jìn)行預(yù)測(cè),并包括至少一個(gè)非預(yù)測(cè)型分支指令,除了不受所述分支預(yù)測(cè)器預(yù)測(cè)以外,該指令提供與其中一個(gè)所述預(yù)測(cè)型分支指令相同的功能性。
2.如權(quán)利要求1所述的設(shè)備,其中,所述分支預(yù)測(cè)器包括分支歷史緩沖器,可用來(lái)存儲(chǔ)分支歷史數(shù)據(jù),為預(yù)測(cè)型分支指令的給定分支指令示出在先前被遇到時(shí)所述給定分支指令是否導(dǎo)致了轉(zhuǎn)移操作,所述分支歷史預(yù)測(cè)器不存儲(chǔ)非預(yù)測(cè)型分支指令的分支歷史數(shù)據(jù)。
3.如權(quán)利要求1所述的設(shè)備,其中,所述分支預(yù)測(cè)器包括分支目標(biāo)緩沖存儲(chǔ)器,可用來(lái)存儲(chǔ)先前遇到的預(yù)測(cè)型分支指令的分支指令的分支目標(biāo)地址,所述分支目標(biāo)緩沖存儲(chǔ)器不存儲(chǔ)先前遇到的非預(yù)測(cè)型分支指令的分支指令的分支目標(biāo)地址。
4.如權(quán)利要求3所述的設(shè)備,其中,所述設(shè)備可用來(lái)在一個(gè)處理循環(huán)中取出多于所述分支目標(biāo)緩沖存儲(chǔ)器具有的端口的程序指令,分支目標(biāo)地址可通過(guò)所述端口存取。
5.如權(quán)利要求1所述的設(shè)備,其中,所述至少一個(gè)非預(yù)測(cè)型分支指令包括一種除轉(zhuǎn)移操作外還表明正被執(zhí)行的指令集的變化的分支指令類型。
6.如權(quán)利要求1所述的設(shè)備,其中,所述至少一個(gè)非預(yù)測(cè)型分支指令包括利用間接參考存有所述分支目標(biāo)地址的寄存器來(lái)指定分支目標(biāo)地址的分支指令類型。
7.在程序指令序列的控制下處理數(shù)據(jù)的設(shè)備,所述設(shè)備包含指令解碼器裝置,用于為多個(gè)不同編碼類型的分支程序指令解碼;分支預(yù)測(cè)器裝置,用于檢測(cè)所述程序指令序列內(nèi)的分支指令并預(yù)測(cè)轉(zhuǎn)移操作是否將由經(jīng)檢測(cè)的分支指令產(chǎn)生;其中所述多個(gè)不同編碼類型的分支程序指令包括至少一個(gè)預(yù)測(cè)型分支指令,所述分支預(yù)測(cè)器裝置對(duì)其進(jìn)行預(yù)測(cè);以及至少一個(gè)非預(yù)測(cè)型分支指令,除了不受所述分支預(yù)測(cè)器預(yù)測(cè)以外,該指令提供與其中一個(gè)所述預(yù)測(cè)型分支指令相同的功能性。
8.一種在程序指令序列的控制下處理數(shù)據(jù)的方法,所述方法包含下列步驟將多個(gè)不同編碼類型的分支程序指令解碼;使用分支預(yù)測(cè)器檢測(cè)所述程序指令序列內(nèi)的分支指令并預(yù)測(cè)轉(zhuǎn)移操作是否將由經(jīng)檢測(cè)的分支指令產(chǎn)生;其中所述多個(gè)不同編碼類型的分支程序指令包括至少一個(gè)預(yù)測(cè)型分支指令,所述分支預(yù)測(cè)器對(duì)其進(jìn)行預(yù)測(cè);以及至少一個(gè)非預(yù)測(cè)型分支指令,除了不受所述分支預(yù)測(cè)器預(yù)測(cè)以外,該指令提供與其中一個(gè)所述預(yù)測(cè)型分支指令相同的功能性。
9.一種帶有計(jì)算機(jī)程序的計(jì)算機(jī)程序載體,可用來(lái)控制數(shù)據(jù)處理設(shè)備在程序指令序列的控制下處理數(shù)據(jù),所述數(shù)據(jù)處理設(shè)備具有分支預(yù)測(cè)器,可用來(lái)檢測(cè)所述程序指令序列內(nèi)的分支指令并預(yù)測(cè)轉(zhuǎn)移操作是否將由經(jīng)檢測(cè)的分支指令產(chǎn)生,所述計(jì)算機(jī)程序包含多個(gè)不同編碼類型的分支程序指令;至少一個(gè)預(yù)測(cè)型分支指令,所述分支預(yù)測(cè)器對(duì)其進(jìn)行預(yù)測(cè);至少一個(gè)非預(yù)測(cè)型分支指令,除了不受所述分支預(yù)測(cè)器預(yù)測(cè)以外,該指令提供與其中一個(gè)所述預(yù)測(cè)型分支指令相同的功能性。
10.一種編譯器,用于編譯計(jì)算機(jī)程序以控制數(shù)據(jù)處理設(shè)備在包括有多個(gè)不同編碼類型的分支程序指令的程序指令序列的控制下處理數(shù)據(jù),所述數(shù)據(jù)處理設(shè)備含有分支預(yù)測(cè)器,可用來(lái)檢測(cè)所述程序指令序列內(nèi)的分支指令并預(yù)測(cè)轉(zhuǎn)移操作是否將由經(jīng)檢測(cè)的分支指令產(chǎn)生,所述編譯器可用來(lái)生成至少一個(gè)預(yù)測(cè)型分支指令,所述分支預(yù)測(cè)器對(duì)其進(jìn)行預(yù)測(cè);至少一個(gè)非預(yù)測(cè)型分支指令,除了不受所述分支預(yù)測(cè)器預(yù)測(cè)以外,該指令提供與其中一個(gè)所述預(yù)測(cè)型分支指令相同的功能性。
11.如權(quán)利要求10所述的編譯器,其中,所述編譯器對(duì)轉(zhuǎn)移操作未被所述分支預(yù)測(cè)器正確預(yù)測(cè)的表示作出響應(yīng),以用所述分支預(yù)測(cè)器不對(duì)其進(jìn)行預(yù)測(cè)的所述非預(yù)測(cè)型分支指令來(lái)編譯所述轉(zhuǎn)移操作。
全文摘要
處理器(2)含有分支預(yù)測(cè)機(jī)構(gòu)(14、18、20),分支預(yù)測(cè)機(jī)構(gòu)的作用是為預(yù)測(cè)型分支指令預(yù)測(cè)分支結(jié)果。處理器還支持非預(yù)測(cè)型分支指令,所述非預(yù)測(cè)型分支指令被分支預(yù)測(cè)機(jī)構(gòu)(14、18、20)忽略而不經(jīng)受預(yù)測(cè)。在已知那些轉(zhuǎn)移操作有可能誤預(yù)測(cè)時(shí),用非預(yù)測(cè)型分支程序指令來(lái)代表/控制轉(zhuǎn)移操作,以減小誤預(yù)測(cè)對(duì)分支預(yù)測(cè)機(jī)構(gòu)(14、18、20)整體性能降低的影響。
文檔編號(hào)G06F9/38GK1873611SQ200610091510
公開(kāi)日2006年12月6日 申請(qǐng)日期2006年5月30日 優(yōu)先權(quán)日2005年5月31日
發(fā)明者D·J·威廉遜, A·J·布克, D·J·布切爾 申請(qǐng)人:Arm有限公司