亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種分支預(yù)測(cè)方法及相關(guān)裝置制造方法

文檔序號(hào):6508536閱讀:156來(lái)源:國(guó)知局
一種分支預(yù)測(cè)方法及相關(guān)裝置制造方法
【專(zhuān)利摘要】本發(fā)明實(shí)施例公開(kāi)了一種分支預(yù)測(cè)方法及相關(guān)裝置,應(yīng)用于處理器中,上述處理器包括:存儲(chǔ)寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息的第一BTAC,和存儲(chǔ)程序計(jì)數(shù)器的字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息的第二BTAC,其中,一種分支預(yù)測(cè)方法包括:從指令緩存中讀取指令;若確定該指令滿(mǎn)足寄存器預(yù)測(cè)條件,則:根據(jù)該指令的寄存器標(biāo)識(shí),從第一BTAC中獲取該指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址;若確定該指令不滿(mǎn)足寄存器預(yù)測(cè)條件,則根據(jù)該指令的程序計(jì)數(shù)器,從第二BTAC中獲取該指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址,本發(fā)明提供的技術(shù)方案能夠有效解決在共享BTAC時(shí)影響分支預(yù)測(cè)的準(zhǔn)確率的問(wèn)題。
【專(zhuān)利說(shuō)明】一種分支預(yù)測(cè)方法及相關(guān)裝置

【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)系統(tǒng)領(lǐng)域,尤其涉及一種分支預(yù)測(cè)方法及相關(guān)裝置。

【背景技術(shù)】
[0002]目前的處理器多采用流水線(xiàn)的結(jié)構(gòu),使得順序執(zhí)行的指令流可以并行地執(zhí)行。這種處理指令的方式在很大程度上提高了處理器的執(zhí)行效率。在理想情況下,流水線(xiàn)的每個(gè)Stage (即流水線(xiàn)層)僅占用一個(gè)時(shí)鐘周期,所以每個(gè)時(shí)鐘周期都可以完成一條指令。但是實(shí)際情況并非如此理想,因?yàn)橹噶钪g可能存在著相互的依賴(lài)關(guān)系從而影響指令執(zhí)行的并行度。比如數(shù)據(jù)依賴(lài)、控制依賴(lài)(比如分支指令)、資源競(jìng)爭(zhēng)、中斷等等因素,都會(huì)影響指令的并行度。
[0003]實(shí)際程序中包括分支指令,分支指令的分支行為往往到等到流水線(xiàn)的后端才能確定,因此,分支指令可能產(chǎn)生控制冒險(xiǎn)從而導(dǎo)致流水線(xiàn)停頓,同時(shí),處理器也不能確定從哪個(gè)地址開(kāi)始取下一條指令直到這條分支指令執(zhí)行完為止。大部分的處理器都采用了不同形式的分支預(yù)測(cè)機(jī)制,讓條件分支指令的目標(biāo)跳轉(zhuǎn)方向和目標(biāo)跳轉(zhuǎn)地址可以在流水線(xiàn)的前端被預(yù)測(cè),使得處理器可以預(yù)測(cè)性地取指令并執(zhí)行指令。如果分支預(yù)測(cè)正確或者正確率較高的話(huà),可以大幅提高處理器的性能和功耗,如果分支預(yù)測(cè)錯(cuò)誤的話(huà),意味著預(yù)測(cè)取出的指令不能被執(zhí)行,錯(cuò)誤的指令需要從緩沖區(qū)中清除,然后從正確的地址處再重新取指令并執(zhí)行。
[0004]分支目標(biāo)地址緩存(BTAC, Branch Target Address Cache)用于對(duì)間接跳轉(zhuǎn)分支指令的目標(biāo)跳轉(zhuǎn)地址進(jìn)行預(yù)測(cè)。BTAC采用緩存的結(jié)構(gòu),以指令的程序計(jì)數(shù)器(PC,ProgramCounter)的一部分作為index (即索引),一部分作為tag (即標(biāo)簽),如以PC的低8位作為index,以PC的高8位作為tag。BTAC的每個(gè)Entry (即表項(xiàng))對(duì)應(yīng)于一個(gè)index和一個(gè)tag,并且,BTAC的每個(gè)Entry都設(shè)置一個(gè)有效位,用于記錄這個(gè)Entry是否存放了有效的歷史信息(歷史信息即為預(yù)測(cè)的目標(biāo)跳轉(zhuǎn)地址),其中,Entry存放的目標(biāo)跳轉(zhuǎn)地址是虛擬地址(VA, Virtual Address)。如果BTAC滿(mǎn)了,像Cache—樣,也需要根據(jù)一定的替換算法決定哪個(gè)最近最少使用的Entry中存放的內(nèi)容可以被替換掉。
[0005]在多線(xiàn)程處理器中,對(duì)BTAC的設(shè)置有兩種方式:
[0006]一種是共享的BTAC,多個(gè)線(xiàn)程共享同一塊BTAC,每個(gè)線(xiàn)程各自用自己的PC去索引BTAC當(dāng)中存放的內(nèi)容。這種方式雖然節(jié)約了面積,但是由于BTAC的索引地址是每個(gè)線(xiàn)程的PC,而不同線(xiàn)程的PC有可能一樣,因此,不同線(xiàn)程之間的歷史信息存放在同一塊BTAC中,將影響分支預(yù)測(cè)的準(zhǔn)確率;
[0007]另一種是獨(dú)享的BTAC,每個(gè)線(xiàn)程各自設(shè)置一塊BTAC,BTAC為相應(yīng)的線(xiàn)程提供預(yù)測(cè)分支目標(biāo)跳轉(zhuǎn)地址的服務(wù)。這種方式雖然相比共享的方法在一定程度上提高了預(yù)測(cè)準(zhǔn)確率,但是極大浪費(fèi)了硬件資源和面積。
[0008]無(wú)論是共享的BTAC還是獨(dú)享的BTAC,它們有一個(gè)共同的特點(diǎn):只要BTAC不滿(mǎn),就以分支指令的PC作為索引記錄所有和分支指令相關(guān)的歷史信息。但是在實(shí)際的程序中,存在如下情況的幾率很大:多個(gè)不同的分支指令跳轉(zhuǎn)到同樣的目標(biāo)地址,比如類(lèi)似C++中“Printf”這種標(biāo)準(zhǔn)的庫(kù)函數(shù),由經(jīng)過(guò)編譯之后得到的匯編指令可以看出,不同的分支指令總是跳轉(zhuǎn)到相同的目標(biāo)地址。那么使用傳統(tǒng)的BTAC結(jié)構(gòu),這些不同的分支指令雖然跳轉(zhuǎn)到同一個(gè)目標(biāo)地址,但是仍將占用BTAC當(dāng)中的多個(gè)Entry來(lái)記錄其相關(guān)歷史信息。
[0009]由上可見(jiàn),在多線(xiàn)程處理器當(dāng)中,BTAC的資源共享、分支預(yù)測(cè)的準(zhǔn)確率之間的矛盾極為關(guān)出。


【發(fā)明內(nèi)容】

[0010]本發(fā)明各個(gè)方面提供了一種分支預(yù)測(cè)方法及相關(guān)裝置,用于解決在共享BTAC時(shí)影響分支預(yù)測(cè)的準(zhǔn)確率的問(wèn)題。
[0011]為解決上述技術(shù)問(wèn)題,提供以下技術(shù)方案:
[0012]本發(fā)明第一方面提供了一種分支預(yù)測(cè)方法,應(yīng)用于處理器中,上述處理器包括:第一分支目標(biāo)地址預(yù)測(cè)緩存器和第二分支目標(biāo)地址預(yù)測(cè)緩存器,上述第一分支目標(biāo)地址預(yù)測(cè)緩存器存儲(chǔ)著:寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,上述第二分支目標(biāo)地址預(yù)測(cè)緩存器存儲(chǔ)著:程序計(jì)數(shù)器的字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,其中,上述分支預(yù)測(cè)方法,包括:從指令緩存中讀取指令;
[0013]若確定讀取的上述指令滿(mǎn)足寄存器預(yù)測(cè)條件,則:
[0014]根據(jù)讀取的上述指令的寄存器標(biāo)識(shí),從上述第一分支目標(biāo)地址預(yù)測(cè)緩存器中獲取讀取的上述指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址;
[0015]若確定讀取的上述指令不滿(mǎn)足上述寄存器預(yù)測(cè)條件,則:
[0016]則根據(jù)讀取的上述指令的程序計(jì)數(shù)器,從上述第二分支目標(biāo)地址預(yù)測(cè)緩存器中獲取讀取的上述指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址;
[0017]其中,上述寄存器預(yù)測(cè)條件包括:指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令。
[0018]基于第一方面,在第一種可能的實(shí)現(xiàn)方式中,上述寄存器預(yù)測(cè)條件還包括:指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí);
[0019]上述確定讀取的上述指令滿(mǎn)足寄存器預(yù)測(cè)條件,具體為:
[0020]當(dāng)上述指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令,且上述指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí)時(shí),確定讀取的上述指令滿(mǎn)足寄存器預(yù)測(cè)條件;
[0021]上述確定讀取的上述指令不滿(mǎn)足上述寄存器預(yù)測(cè)條件,具體為:
[0022]當(dāng)上述指令的類(lèi)型不為無(wú)條件間接跳轉(zhuǎn)分支指令,或者,上述指令中的寄存器標(biāo)識(shí)不為特定的寄存器標(biāo)識(shí)時(shí),確定讀取的上述指令不滿(mǎn)足寄存器預(yù)測(cè)條件。
[0023]基于第一方面,或者第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,上述從上述指令緩存中讀取指令之前包括:
[0024]對(duì)待讀取的指令進(jìn)行預(yù)譯碼,得到上述待讀取的指令的類(lèi)型信息;
[0025]上述讀取指令之后包括:根據(jù)上述得到的指令的類(lèi)型信息,判定當(dāng)前讀取的指令的類(lèi)型是否為無(wú)條件間接跳轉(zhuǎn)分支指令。
[0026]基于第一方面,或者第一方面的第一種可能的實(shí)現(xiàn)方式,或者第一方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,在上述讀取指令之前,若對(duì)高級(jí)語(yǔ)言進(jìn)行編譯時(shí)調(diào)用的函數(shù)為標(biāo)準(zhǔn)庫(kù)函數(shù),則,將編譯后的指令的類(lèi)型指定為無(wú)條件間接跳轉(zhuǎn)分支指令。
[0027]本發(fā)明第二方面提供了一種分支預(yù)測(cè)裝置,應(yīng)用于處理器中,上述處理器包括:第一分支目標(biāo)地址預(yù)測(cè)緩存器和第二分支目標(biāo)地址預(yù)測(cè)緩存器,上述第一分支目標(biāo)地址預(yù)測(cè)緩存器存儲(chǔ)著:寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,上述第二分支目標(biāo)地址預(yù)測(cè)緩存器存儲(chǔ)著:程序計(jì)數(shù)器的部分字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,或者,程序計(jì)數(shù)器的全部字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,其中,上述分支預(yù)測(cè)裝置,包括:
[0028]讀取單元,用于從指令緩存中讀取指令;
[0029]預(yù)測(cè)獲取單元,用于當(dāng)確定上述讀取單元讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件時(shí),根據(jù)上述讀取單元讀取的上述指令的寄存器標(biāo)識(shí),從上述第一分支目標(biāo)地址預(yù)測(cè)緩存器中獲取上述讀取單元讀取的上述指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址;當(dāng)確定上述讀取單元讀取的指令不滿(mǎn)足上述寄存器預(yù)測(cè)條件時(shí),根據(jù)上述讀取單元讀取的上述指令的程序計(jì)數(shù)器,從上述第二分支目標(biāo)地址預(yù)測(cè)緩存器中獲取上述讀取單元讀取的上述指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址;
[0030]其中,上述寄存器預(yù)測(cè)條件包括:指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令。
[0031]基于本發(fā)明第二方面,在第一種可能的實(shí)現(xiàn)方式中,上述寄存器預(yù)測(cè)條件還包括:指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí);
[0032]上述分支預(yù)測(cè)裝置還包括:
[0033]確定單元,用于當(dāng)上述讀取單元讀取的指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令,且上述讀取單元讀取的指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí)時(shí),確定上述讀取單元讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件;當(dāng)上述讀取單元讀取的指令的類(lèi)型不為無(wú)條件間接跳轉(zhuǎn)分支指令,或者,上述讀取單元讀取的指令中的寄存器標(biāo)識(shí)不為特定的寄存器標(biāo)識(shí)時(shí),確定讀取的上述指令不滿(mǎn)足寄存器預(yù)測(cè)條件。
[0034]基于本發(fā)明第二方面,或者本發(fā)明第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,上述分支預(yù)測(cè)裝置還包括:
[0035]預(yù)譯碼單元,用于對(duì)上述讀取單元待讀取的指令進(jìn)行預(yù)譯碼,得到上述讀取單元待讀取的指令的類(lèi)型信息;
[0036]判定單元,用于在上述讀取單元讀取上述指令后,根據(jù)上述預(yù)譯碼單元得到的指令的類(lèi)型信息,判定上述讀取單元當(dāng)前讀取的指令的類(lèi)型是否為無(wú)條件間接跳轉(zhuǎn)分支指令。
[0037]基于本發(fā)明第二方面,或者本發(fā)明第二方面的第一種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,上述分支預(yù)測(cè)裝置還包括:
[0038]編譯單元,用于對(duì)高級(jí)語(yǔ)言進(jìn)行編譯;
[0039]指定單元,用于當(dāng)上述編譯單元對(duì)高級(jí)語(yǔ)言進(jìn)行編譯時(shí)調(diào)用的函數(shù)為標(biāo)準(zhǔn)庫(kù)函數(shù)時(shí),將編譯后的指令的類(lèi)型指定為無(wú)條件間接跳轉(zhuǎn)分支指令。
[0040]由上可見(jiàn),本發(fā)明實(shí)施例中設(shè)置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器標(biāo)識(shí)作為索引(即在第一 BTAC中存儲(chǔ)寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),第二 BTAC中使用PC作為索引(即在第二 BTAC中存儲(chǔ)程序計(jì)數(shù)器的部分字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),當(dāng)讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件時(shí),使用第一BTAC進(jìn)行分支預(yù)測(cè),否則,使用第二 BTAC進(jìn)行分支預(yù)測(cè)。由于寄存器標(biāo)識(shí)相同的無(wú)條件間接跳轉(zhuǎn)分支指令的目標(biāo)跳轉(zhuǎn)地址必然相同,因此,即使將目標(biāo)跳轉(zhuǎn)地址相同的多個(gè)無(wú)條件間接跳轉(zhuǎn)分支指令的歷史信息存儲(chǔ)在第一 BTAC的同一個(gè)Entry中,也不會(huì)影響分支預(yù)測(cè)的準(zhǔn)確率,換言之,本發(fā)明提供的技術(shù)方案能夠在共享第一 BTAC時(shí)不對(duì)分支預(yù)測(cè)的準(zhǔn)確率產(chǎn)生影響,從而使得在保證分支預(yù)測(cè)的準(zhǔn)確率的前提下實(shí)現(xiàn)BTAC的資源共享成為可能。

【專(zhuān)利附圖】

【附圖說(shuō)明】
[0041]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0042]圖1為本發(fā)明提供的一種分支預(yù)測(cè)方法一個(gè)實(shí)施例流程示意圖;
[0043]圖2為本發(fā)明提供的一種分支預(yù)測(cè)方法另一個(gè)實(shí)施例流程示意圖;
[0044]圖3為本發(fā)明提供的一種分支預(yù)測(cè)方法再一個(gè)實(shí)施例流程示意圖;
[0045]圖4為本發(fā)明提供的一種分支預(yù)測(cè)裝置一個(gè)實(shí)施例結(jié)構(gòu)示意圖;
[0046]圖5為本發(fā)明提供的一種分支預(yù)測(cè)裝置另一個(gè)實(shí)施例結(jié)構(gòu)示意圖。

【具體實(shí)施方式】
[0047]本發(fā)明實(shí)施例提供了一種分支預(yù)測(cè)方法及相關(guān)裝置。
[0048]為使得本發(fā)明的發(fā)明目的、特征、優(yōu)點(diǎn)能夠更加的明顯和易懂,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而非全部實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的各個(gè)其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0049]下面對(duì)本發(fā)明實(shí)施例提供的一種分支預(yù)測(cè)方法進(jìn)行描述,本發(fā)明實(shí)施例中的分支預(yù)測(cè)方法應(yīng)用于處理器中,上述處理器包括:第一 BTAC和第二 BTAC,上述第一 BTAC存儲(chǔ)著:寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,上述第二 BTAC存儲(chǔ)著:PC的字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,可選地,在上述第二 BTAC中存儲(chǔ)PC的部分字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,或者,在上述第二 BTAC中存儲(chǔ)PC的全部字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息。請(qǐng)參閱圖1,本發(fā)明實(shí)施例中的分支預(yù)測(cè)方法,包括:
[0050]101、從指令緩存中讀取指令;
[0051]在本發(fā)明實(shí)施例中,步驟101讀取的指令有可能為分支指令,也有可能為非分支指令。通常,分支指令可以有如下兩種劃分方式:一種是針對(duì)跳轉(zhuǎn)條件,將分支指令的類(lèi)型劃分為條件分支指令和無(wú)條件分支指令,其中,條件分支指令在滿(mǎn)足一定條件時(shí)才執(zhí)行分支跳轉(zhuǎn),無(wú)條件分支指令則不需要滿(mǎn)足任何條件,總是執(zhí)行分支跳轉(zhuǎn);另一種是針對(duì)目標(biāo)跳轉(zhuǎn)地址,將分支指令的類(lèi)型劃分為直接跳轉(zhuǎn)分支指令和間接跳轉(zhuǎn)分支指令,其中,直接跳轉(zhuǎn)分支指示的目標(biāo)跳轉(zhuǎn)地址的偏移量直接在指令當(dāng)中用立即數(shù)(即,在立即尋址方式指令中給出的數(shù))指定,目標(biāo)跳轉(zhuǎn)地址就是用分支指令本身的PC加上立即數(shù)的偏移量計(jì)算得到,而間接跳轉(zhuǎn)分支指令的目標(biāo)跳轉(zhuǎn)地址是在寄存器當(dāng)中指定的。
[0052]一條指令在從二級(jí)緩存或者內(nèi)存取到指令緩存之前,需要對(duì)指令進(jìn)行預(yù)譯碼,以便將指令的部分預(yù)譯碼結(jié)果作為分支預(yù)測(cè)的指導(dǎo)。比如,當(dāng)分支指令在從二級(jí)緩存或者內(nèi)存取到指令緩存之前,需要通過(guò)預(yù)譯碼階段識(shí)別出該分支指令的類(lèi)型(如是否為條件分支指令、是否為間接跳轉(zhuǎn)分支指令等),以便根據(jù)分支指令的類(lèi)型執(zhí)行相應(yīng)地分支預(yù)測(cè)。在預(yù)譯碼之后,預(yù)譯碼結(jié)果(如指令的類(lèi)型信息)和指令會(huì)被一同保存在指令緩存中。需要說(shuō)明的是,上述對(duì)指令的預(yù)譯碼操作可以由分支預(yù)測(cè)裝置執(zhí)行,或者,也可以由其它裝置執(zhí)行,此處不作限定。
[0053]其中,上述寄存器預(yù)測(cè)條件包括:指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令。
[0054]102、當(dāng)讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件時(shí),根據(jù)上述讀取的指令中的寄存器標(biāo)識(shí),從第一 BTAC中獲取上述讀取的指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址。
[0055]103、當(dāng)讀取的指令不滿(mǎn)足寄存器預(yù)測(cè)條件時(shí),根據(jù)上述讀取的指令中的程序計(jì)數(shù)器,從第二 BTAC中獲取上述讀取的指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址。
[0056]本發(fā)明實(shí)施例在處理器中設(shè)置第一 BTAC,為便于描述,下面將第一 BTAC描述為SBTAC,將第二 BTAC簡(jiǎn)稱(chēng)為BTAC。SBTAC的硬件構(gòu)造與BTAC相類(lèi)似,不同的是,BTAC是以PC的一部分字段或者全部字段作為索引,而SBTAC是以寄存器標(biāo)識(shí)作為索引。由于SBTAC中存儲(chǔ)著寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,因此,分支預(yù)測(cè)裝置能夠根據(jù)上述指令中的寄存器標(biāo)識(shí),從SBTAC中找到與該寄存器標(biāo)識(shí)相對(duì)應(yīng)的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址。
[0057]在一種應(yīng)用場(chǎng)景中,在步驟101之前,若對(duì)高級(jí)語(yǔ)言進(jìn)行編譯時(shí)調(diào)用的函數(shù)為標(biāo)準(zhǔn)庫(kù)函數(shù),則,分支預(yù)測(cè)裝置將編譯后的指令的類(lèi)型指定為無(wú)條件間接跳轉(zhuǎn)分支指令,如將編譯后的指令的類(lèi)型指定為分支與鏈接寄存器(BLR, Branch and Link Register)指令,BLR指令為一條無(wú)條件間接跳轉(zhuǎn)分支指令,它為一個(gè)子程序調(diào)用或者函數(shù)調(diào)用引起且一定會(huì)返回,返回的地址存放在Link Register (即鏈接寄存器)中。需要說(shuō)明的是,本發(fā)明實(shí)施例中的高級(jí)語(yǔ)言主要是相對(duì)于匯編語(yǔ)言而言,它是較接近自然語(yǔ)言和數(shù)學(xué)公式的編程,基本脫離了機(jī)器的硬件系統(tǒng),用人們更易理解的方式編寫(xiě)程序。本發(fā)明實(shí)施例中的高級(jí)語(yǔ)言并不特指某一種具體的語(yǔ)言,可以包括很多編程語(yǔ)言,如java, c, c++, C#,pascal, python,lisp, prolog, FoxPro, VC,易語(yǔ)言等等,本發(fā)明實(shí)施例中的標(biāo)準(zhǔn)庫(kù)函數(shù)是指由一些按照高級(jí)語(yǔ)言標(biāo)準(zhǔn)預(yù)先編寫(xiě)的基本函數(shù)組成的庫(kù)。
[0058]需要說(shuō)明的是,本發(fā)明實(shí)施例中的寄存器標(biāo)識(shí)可以為寄存器號(hào),或者,寄存器標(biāo)識(shí)也可以是其它能夠用于指示寄存器的代碼或者符號(hào)等,本發(fā)明實(shí)施例中的分支預(yù)測(cè)方法可以應(yīng)用于多線(xiàn)程處理器中,也可以應(yīng)用于單線(xiàn)程處理器中,此處不作限定。
[0059]由上可見(jiàn),本發(fā)明實(shí)施例中設(shè)置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器標(biāo)識(shí)作為索引(即在第一 BTAC中存儲(chǔ)寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),第二 BTAC中使用PC作為索引(即在第二 BTAC中存儲(chǔ)程序計(jì)數(shù)器的部分字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),當(dāng)讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件時(shí),使用第一BTAC進(jìn)行分支預(yù)測(cè),否則,使用第二 BTAC進(jìn)行分支預(yù)測(cè)。由于寄存器標(biāo)識(shí)相同的無(wú)條件間接跳轉(zhuǎn)分支指令的目標(biāo)跳轉(zhuǎn)地址必然相同,因此,目標(biāo)跳轉(zhuǎn)地址相同的多個(gè)無(wú)條件間接跳轉(zhuǎn)分支指令的歷史信息能夠存儲(chǔ)在第一 BTAC的同一個(gè)Entry而不影響分支預(yù)測(cè)的準(zhǔn)確率,從而能夠在保證分支預(yù)測(cè)的準(zhǔn)確率的前提下實(shí)現(xiàn)BTAC的資源共享。
[0060]上述實(shí)施例中使用全部寄存器的寄存器標(biāo)識(shí)作為SBTAC中的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的索引,本發(fā)明實(shí)施例也可以只使用部分寄存器的寄存器標(biāo)識(shí)作為SBTAC中的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的索引,則上述寄存器預(yù)測(cè)條件還包括:指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí),在當(dāng)讀取的指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令,且讀取指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí)時(shí),確定讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件,當(dāng)讀取的指令的類(lèi)型不為無(wú)條件間接跳轉(zhuǎn)分支指令,或者,讀取的指令中的寄存器標(biāo)識(shí)不為特定的寄存器標(biāo)識(shí)時(shí),確定讀取的指令不滿(mǎn)足寄存器預(yù)測(cè)條件。如圖2所示,本發(fā)明實(shí)施例中的分支預(yù)測(cè)方法,包括:
[0061]201、從指令緩存中讀取指令;
[0062]一條指令在從二級(jí)緩存或者內(nèi)存取到指令緩存之前,需要對(duì)指令進(jìn)行預(yù)譯碼,以便將指令的部分預(yù)譯碼結(jié)果作為分支預(yù)測(cè)的指導(dǎo)。比如,當(dāng)分支指令在從二級(jí)緩存或者內(nèi)存取到指令緩存之前,需要通過(guò)預(yù)譯碼階段識(shí)別出該分支指令的類(lèi)型(如是否為條件分支指令、是否為間接跳轉(zhuǎn)分支指令等),以便根據(jù)分支指令的類(lèi)型執(zhí)行相應(yīng)地分支預(yù)測(cè)。在預(yù)譯碼之后,預(yù)譯碼結(jié)果和指令會(huì)被一同保存在指令緩存中。需要說(shuō)明的是,上述對(duì)指令的預(yù)譯碼操作可以由分支預(yù)測(cè)裝置執(zhí)行,或者,也可以由其它裝置執(zhí)行,此處不作限定。
[0063]202、當(dāng)讀取的指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令時(shí),判斷上述讀取的指令中的寄存器標(biāo)識(shí)是否為特定的寄存器標(biāo)識(shí);
[0064]若分支預(yù)測(cè)裝置判斷出上述讀取的指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí),則執(zhí)行步驟203,若分支預(yù)測(cè)裝置判斷出上述讀取的指令中的寄存器標(biāo)識(shí)不為特定的寄存器標(biāo)識(shí),則執(zhí)行步驟204。
[0065]203、根據(jù)上述讀取的指令中的寄存器標(biāo)識(shí),從第一 BTAC中獲取上述讀取的指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址;
[0066]其中,上述第一 BTAC中存儲(chǔ)著:寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息。
[0067]204、當(dāng)讀取的指令的類(lèi)型不為無(wú)條件間接跳轉(zhuǎn)分支指令時(shí),根據(jù)上述讀取的指令中的程序計(jì)數(shù)器,從第二 BTAC中獲取上述讀取的指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址。
[0068]在一種應(yīng)用場(chǎng)景中,在步驟201之前,若對(duì)高級(jí)語(yǔ)言進(jìn)行編譯時(shí)調(diào)用的函數(shù)為標(biāo)準(zhǔn)庫(kù)函數(shù),則,分支預(yù)測(cè)裝置將編譯后的指令的類(lèi)型指定為無(wú)條件間接跳轉(zhuǎn)分支指令,如將編譯后的指令的類(lèi)型指定為BLR指令。BLR指令為一條無(wú)條件間接跳轉(zhuǎn)分支指令,它為一個(gè)子程序調(diào)用或者函數(shù)調(diào)用引起且一定會(huì)返回,返回的地址存放在Link Register (即鏈接寄存器)中。需要說(shuō)明的是,本發(fā)明實(shí)施例中的高級(jí)語(yǔ)言主要是相對(duì)于匯編語(yǔ)言而言,它是較接近自然語(yǔ)言和數(shù)學(xué)公式的編程,基本脫離了機(jī)器的硬件系統(tǒng),用人們更易理解的方式編寫(xiě)程序。本發(fā)明實(shí)施例中的高級(jí)語(yǔ)言并不特指某一種具體的語(yǔ)言,可以包括很多編程語(yǔ)言,如 java, c, c++, C#, pascal, python, lisp, prolog, FoxPro, VC,易語(yǔ)言等等,本發(fā)明實(shí)施例中的標(biāo)準(zhǔn)庫(kù)函數(shù)是指由一些按照高級(jí)語(yǔ)言標(biāo)準(zhǔn)預(yù)先編寫(xiě)的基本函數(shù)組成的庫(kù)。
[0069]需要說(shuō)明的是,本發(fā)明實(shí)施例中的寄存器標(biāo)識(shí)可以為寄存器號(hào),或者,寄存器標(biāo)識(shí)也可以是其它能夠用于指示寄存器的代碼或者符號(hào)等,本發(fā)明實(shí)施例中的分支預(yù)測(cè)方法可以應(yīng)用于多線(xiàn)程處理器中,也可以應(yīng)用于單線(xiàn)程處理器中,此處不作限定。
[0070]由上可見(jiàn),本發(fā)明實(shí)施例中設(shè)置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器標(biāo)識(shí)作為索引(即在第一 BTAC中存儲(chǔ)寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),第二 BTAC中使用PC作為索引(即在第二 BTAC中存儲(chǔ)程序計(jì)數(shù)器的部分字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),當(dāng)讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件時(shí),使用第一BTAC進(jìn)行分支預(yù)測(cè),否則,使用第二 BTAC進(jìn)行分支預(yù)測(cè)。由于寄存器標(biāo)識(shí)相同的無(wú)條件間接跳轉(zhuǎn)分支指令的目標(biāo)跳轉(zhuǎn)地址必然相同,因此,即使將目標(biāo)跳轉(zhuǎn)地址相同的多個(gè)無(wú)條件間接跳轉(zhuǎn)分支指令的歷史信息存儲(chǔ)在第一 BTAC的同一個(gè)Entry中,也不會(huì)影響分支預(yù)測(cè)的準(zhǔn)確率,換言之,本發(fā)明提供的技術(shù)方案能夠在共享第一 BTAC時(shí)不對(duì)分支預(yù)測(cè)的準(zhǔn)確率產(chǎn)生影響,從而使得在保證分支預(yù)測(cè)的準(zhǔn)確率的前提下實(shí)現(xiàn)BTAC的資源共享成為可能。
[0071]對(duì)于標(biāo)準(zhǔn)庫(kù)函數(shù)下的分支指令,分支指令的目標(biāo)跳轉(zhuǎn)地址通常不會(huì)改變,因此,為了保證SBTAC的內(nèi)容不會(huì)因?yàn)檐浖M(jìn)程的切換而出現(xiàn)更新或者無(wú)效的操作,本發(fā)明實(shí)施例中對(duì)標(biāo)準(zhǔn)庫(kù)函數(shù)下的分支指令使用SBTAC進(jìn)行分支預(yù)測(cè),如圖3所示,本發(fā)明實(shí)施例中的分支預(yù)測(cè)方法,包括:
[0072]301、對(duì)聞級(jí)語(yǔ)目進(jìn)打編譯。
[0073]302、判斷是否調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù);
[0074]在編譯過(guò)程中可以確定是否調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù),若沒(méi)有調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù),則執(zhí)行步驟303,若調(diào)用了標(biāo)準(zhǔn)庫(kù)函數(shù),則執(zhí)行步驟304。
[0075]303、將編譯后的指令的類(lèi)型指定為其它指令存儲(chǔ)在二級(jí)緩存或者內(nèi)存中。
[0076]304、將編譯后的指令的類(lèi)型指定為BLR指令存儲(chǔ)在二級(jí)緩存或者內(nèi)存中。
[0077]步驟305?308與圖2所示實(shí)施例中的步驟201?204類(lèi)似,其具體實(shí)現(xiàn)方式可以參照相應(yīng)步驟中的描述,此處不再贅述。
[0078]需要說(shuō)明的是,本發(fā)明實(shí)施例中的寄存器標(biāo)識(shí)可以為寄存器號(hào),或者,寄存器標(biāo)識(shí)也可以是其它能夠用于指示寄存器的代碼或者符號(hào)等,本發(fā)明實(shí)施例中的分支預(yù)測(cè)方法可以應(yīng)用于多線(xiàn)程處理器中,也可以應(yīng)用于單線(xiàn)程處理器中,此處不作限定。
[0079]由上可見(jiàn),本發(fā)明實(shí)施例中設(shè)置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器標(biāo)識(shí)作為索引(即在第一 BTAC中存儲(chǔ)寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),第二 BTAC中使用PC作為索引(即在第二 BTAC中存儲(chǔ)程序計(jì)數(shù)器的部分字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),當(dāng)讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件時(shí),使用第一BTAC進(jìn)行分支預(yù)測(cè),否則,使用第二 BTAC進(jìn)行分支預(yù)測(cè)。由于寄存器標(biāo)識(shí)相同的無(wú)條件間接跳轉(zhuǎn)分支指令的目標(biāo)跳轉(zhuǎn)地址必然相同,因此,即使將目標(biāo)跳轉(zhuǎn)地址相同的多個(gè)無(wú)條件間接跳轉(zhuǎn)分支指令的歷史信息存儲(chǔ)在第一 BTAC的同一個(gè)Entry中,也不會(huì)影響分支預(yù)測(cè)的準(zhǔn)確率,換言之,本發(fā)明提供的技術(shù)方案能夠在共享第一 BTAC時(shí)不對(duì)分支預(yù)測(cè)的準(zhǔn)確率產(chǎn)生影響,從而使得在保證分支預(yù)測(cè)的準(zhǔn)確率的前提下實(shí)現(xiàn)BTAC的資源共享成為可能。
[0080]本發(fā)明實(shí)施例還提供了一種分支預(yù)測(cè)裝置,應(yīng)用于處理器中,上述處理器包括:第一 BTAC和第二 BTAC,上述第一 BTAC存儲(chǔ)著:寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,上述第二 BTAC存儲(chǔ)著:PC的字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,可選地,在上述第二 BTAC中存儲(chǔ)PC的部分字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,或者,在上述第二 BTAC中存儲(chǔ)PC的全部字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,如圖4所示,本發(fā)明實(shí)施例中的分支預(yù)測(cè)裝置400,包括:
[0081]讀取單元401,用于從指令緩存中讀取指令;
[0082]一條指令在從二級(jí)緩存或者內(nèi)存取到指令緩存之前,需要對(duì)指令進(jìn)行預(yù)譯碼,以便將指令的部分預(yù)譯碼結(jié)果作為分支預(yù)測(cè)的指導(dǎo)。比如,當(dāng)分支指令在從二級(jí)緩存或者內(nèi)存取到指令緩存之前,需要通過(guò)預(yù)譯碼階段識(shí)別出該分支指令的類(lèi)型(如是否為條件分支指令、是否為間接跳轉(zhuǎn)分支指令等),以便根據(jù)分支指令的類(lèi)型執(zhí)行相應(yīng)地分支預(yù)測(cè)。在預(yù)譯碼之后,預(yù)譯碼結(jié)果(如指令的類(lèi)型信息)和指令會(huì)被一同保存在指令緩存中。在一種實(shí)現(xiàn)方式中,上述對(duì)指令的預(yù)譯碼操作可以由分支預(yù)測(cè)裝置執(zhí)行,則本發(fā)明實(shí)施例中的分支預(yù)測(cè)裝置還可以包括:預(yù)譯碼單元,用于對(duì)讀取單元401待讀取的指令進(jìn)行預(yù)譯碼,得到上述待讀取的指令的類(lèi)型信息;判定單元,用于在讀取單元401讀取指令后,根據(jù)預(yù)譯碼單元得到的該指令的類(lèi)型信息,判定該指令的類(lèi)型是否為無(wú)條件間接跳轉(zhuǎn)分支指令。當(dāng)然,上述對(duì)讀取單元401待讀取的指令的預(yù)譯碼操作也可以由其它裝置執(zhí)行,此處不作限定。
[0083]預(yù)測(cè)獲取單元402,用于當(dāng)確定讀取單元401讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件時(shí),根據(jù)讀取單元401讀取的指令中的寄存器標(biāo)識(shí),從第一 BTAC中獲取讀取單元401讀取的指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址。當(dāng)確定讀取單元401讀取的指令不滿(mǎn)足上述寄存器預(yù)測(cè)條件時(shí),根據(jù)讀取單元401讀取的指令的PC,從第二 BTAC中獲取讀取單元401讀取的指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址;其中,上述寄存器預(yù)測(cè)條件包括:指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令。
[0084]可選地,上述寄存器預(yù)測(cè)條件還包括:指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí)。則分支預(yù)測(cè)裝置400還包括:確定單元,用于當(dāng)讀取單元401讀取的指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令,且讀取單元401讀取的指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí)時(shí),確定讀取單元401讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件;當(dāng)讀取單元401讀取的指令的類(lèi)型不為無(wú)條件間接跳轉(zhuǎn)分支指令,或者,讀取單元401讀取的指令中的寄存器標(biāo)識(shí)不為特定的寄存器標(biāo)識(shí)時(shí),確定讀取的指令不滿(mǎn)足寄存器預(yù)測(cè)條件。
[0085]在一種應(yīng)用場(chǎng)景中,在對(duì)高級(jí)語(yǔ)言進(jìn)行編譯時(shí),若對(duì)高級(jí)語(yǔ)言進(jìn)行編譯時(shí)調(diào)用的函數(shù)為標(biāo)準(zhǔn)庫(kù)函數(shù),則,分支預(yù)測(cè)裝置將編譯后的指令的類(lèi)型指定為BLR。則在圖4所示的分支預(yù)測(cè)裝置的基礎(chǔ)上,分支預(yù)測(cè)裝置還可以包括:編譯單元,用于對(duì)高級(jí)語(yǔ)言進(jìn)行編譯;指定單元,用于當(dāng)上述編譯單元對(duì)高級(jí)語(yǔ)言進(jìn)行編譯時(shí)調(diào)用的函數(shù)為標(biāo)準(zhǔn)庫(kù)函數(shù)時(shí),將編譯后的指令的類(lèi)型指定為無(wú)條件間接跳轉(zhuǎn)分支指令,如將編譯后的指令的類(lèi)型指定為BLR指令。需要說(shuō)明的是,本發(fā)明實(shí)施例中的高級(jí)語(yǔ)言主要是相對(duì)于匯編語(yǔ)言而言,它是較接近自然語(yǔ)言和數(shù)學(xué)公式的編程,基本脫離了機(jī)器的硬件系統(tǒng),用人們更易理解的方式編寫(xiě)程序。本發(fā)明實(shí)施例中的高級(jí)語(yǔ)言并不特指某一種具體的語(yǔ)言,可以包括很多編程語(yǔ)言,如java, c, c++, C#, pascal, python, lisp, prolog, FoxPro, VC,易語(yǔ)言等等,本發(fā)明實(shí)施例中的標(biāo)準(zhǔn)庫(kù)函數(shù)是指由一些按照高級(jí)語(yǔ)言標(biāo)準(zhǔn)預(yù)先編寫(xiě)的基本函數(shù)組成的庫(kù)。
[0086]需要說(shuō)明的是,本發(fā)明實(shí)施例中的寄存器標(biāo)識(shí)可以為寄存器號(hào),或者,寄存器標(biāo)識(shí)也可以是其它能夠用于指示寄存器的代碼或者符號(hào)等,本發(fā)明實(shí)施例中的分支預(yù)測(cè)方法可以應(yīng)用于多線(xiàn)程處理器中,也可以應(yīng)用于單線(xiàn)程處理器中,此處不作限定。
[0087]需要說(shuō)明的是,本發(fā)明實(shí)施例中的分支預(yù)測(cè)裝置可以如上述方法實(shí)施例中的分支預(yù)測(cè)裝置,可以用于實(shí)現(xiàn)上述方法實(shí)施例中的全部技術(shù)方案,其各個(gè)功能模塊的功能可以根據(jù)上述方法實(shí)施例中的方法具體實(shí)現(xiàn),其具體實(shí)現(xiàn)過(guò)程可參照上述方法實(shí)施例中的相關(guān)描述,此處不再贅述。
[0088]由上可見(jiàn),本發(fā)明實(shí)施例中設(shè)置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器標(biāo)識(shí)作為索引(即在第一 BTAC中存儲(chǔ)寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),第二 BTAC中使用PC作為索引(即在第二 BTAC中存儲(chǔ)程序計(jì)數(shù)器的部分字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),當(dāng)讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件時(shí),使用第一BTAC進(jìn)行分支預(yù)測(cè),否則,使用第二 BTAC進(jìn)行分支預(yù)測(cè)。由于寄存器標(biāo)識(shí)相同的無(wú)條件間接跳轉(zhuǎn)分支指令的目標(biāo)跳轉(zhuǎn)地址必然相同,因此,即使將目標(biāo)跳轉(zhuǎn)地址相同的多個(gè)無(wú)條件間接跳轉(zhuǎn)分支指令的歷史信息存儲(chǔ)在第一 BTAC的同一個(gè)Entry中,也不會(huì)影響分支預(yù)測(cè)的準(zhǔn)確率,換言之,本發(fā)明提供的技術(shù)方案能夠在共享第一 BTAC時(shí)不對(duì)分支預(yù)測(cè)的準(zhǔn)確率產(chǎn)生影響,從而使得在保證分支預(yù)測(cè)的準(zhǔn)確率的前提下實(shí)現(xiàn)BTAC的資源共享成為可能。
[0089]本發(fā)明實(shí)施例還提供一種計(jì)算機(jī)存儲(chǔ)介質(zhì),其中,該計(jì)算機(jī)存儲(chǔ)介質(zhì)存儲(chǔ)有程序,該程序執(zhí)行包括上述方法實(shí)施例中記載的在一種分支預(yù)測(cè)方法和分支預(yù)測(cè)裝置的部分或全部布置。
[0090]本發(fā)明實(shí)施例提供另一個(gè)分支預(yù)測(cè)裝置,如圖5所示,本發(fā)明實(shí)施例中的分支預(yù)測(cè)裝置500,包括:
[0091]輸入裝置501、輸出裝置502、存儲(chǔ)器503以及處理器504(分支預(yù)測(cè)裝置的處理器的數(shù)量可以是一個(gè)或者多個(gè),圖5以一個(gè)處理器為例)。在本發(fā)明的一些實(shí)施例中,輸入裝置501、輸出裝置502、存儲(chǔ)器503以及處理器504可以通過(guò)總線(xiàn)或其它方式連接,如圖5所示以通過(guò)總線(xiàn)連接為例。存儲(chǔ)器503中用來(lái)儲(chǔ)存從輸入裝置502輸入的數(shù)據(jù),且還可以?xún)?chǔ)存處理器504處理數(shù)據(jù)的必要文件等信息;輸入裝置501和輸出裝置502可以包括分支預(yù)測(cè)裝置500與其他設(shè)備通信的端口,且還可以包括分支預(yù)測(cè)裝置500外接的輸出設(shè)備比如顯示器、鍵盤(pán)、鼠標(biāo)和打印機(jī)等,具體地輸入裝置502可以包括鼠標(biāo)和鍵盤(pán)等,而輸出裝置501包括顯示器等。
[0092]其中,處理器504包括:第一 BTAC和第二 BTAC,上述第一 BTAC存儲(chǔ)著:寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,上述第二 BTAC存儲(chǔ)著:PC的字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,可選地,在上述第二BTAC中存儲(chǔ)PC的部分字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,或者,在上述第二 BTAC中存儲(chǔ)PC的全部字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息。
[0093]處理器504執(zhí)行如下步驟:
[0094]從指令緩存中讀取指令;
[0095]若確定讀取的上述指令滿(mǎn)足寄存器預(yù)測(cè)條件,則:
[0096]根據(jù)讀取的上述指令的寄存器標(biāo)識(shí),從上述第一分支目標(biāo)地址預(yù)測(cè)緩存器中獲取讀取的上述指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址;
[0097]若確定讀取的上述指令不滿(mǎn)足上述寄存器預(yù)測(cè)條件,則:
[0098]則根據(jù)讀取的上述指令的程序計(jì)數(shù)器,從上述第二分支目標(biāo)地址預(yù)測(cè)緩存器中獲取讀取的上述指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址;
[0099]其中,上述寄存器預(yù)測(cè)條件包括:指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令。
[0100]可選地,上述寄存器預(yù)測(cè)條件還包括:指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí)。
[0101]需要說(shuō)明的是,本發(fā)明實(shí)施例中的寄存器標(biāo)識(shí)可以為寄存器號(hào),或者,寄存器標(biāo)識(shí)也可以是其它能夠用于指示寄存器的代碼或者符號(hào)等,本發(fā)明實(shí)施例中的分支預(yù)測(cè)方法可以應(yīng)用于多線(xiàn)程處理器中,也可以應(yīng)用于單線(xiàn)程處理器中,此處不作限定。
[0102]需要說(shuō)明的是,本發(fā)明實(shí)施例中的分支預(yù)測(cè)裝置可以如上述方法實(shí)施例中的分支預(yù)測(cè)裝置,可以用于實(shí)現(xiàn)上述方法實(shí)施例中的全部技術(shù)方案,其各個(gè)功能模塊的功能可以根據(jù)上述方法實(shí)施例中的方法具體實(shí)現(xiàn),其具體實(shí)現(xiàn)過(guò)程可參照上述方法實(shí)施例中的相關(guān)描述,此處不再贅述。
[0103]由上可見(jiàn),本發(fā)明實(shí)施例中設(shè)置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器標(biāo)識(shí)作為索引(即在第一 BTAC中存儲(chǔ)寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),第二 BTAC中使用PC作為索引(即在第二 BTAC中存儲(chǔ)程序計(jì)數(shù)器的部分字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息),當(dāng)讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件時(shí),使用第一BTAC進(jìn)行分支預(yù)測(cè),否則,使用第二 BTAC進(jìn)行分支預(yù)測(cè)。由于寄存器標(biāo)識(shí)相同的無(wú)條件間接跳轉(zhuǎn)分支指令的目標(biāo)跳轉(zhuǎn)地址必然相同,因此,即使將目標(biāo)跳轉(zhuǎn)地址相同的多個(gè)無(wú)條件間接跳轉(zhuǎn)分支指令的歷史信息存儲(chǔ)在第一 BTAC的同一個(gè)Entry中,也不會(huì)影響分支預(yù)測(cè)的準(zhǔn)確率,換言之,本發(fā)明提供的技術(shù)方案能夠在共享第一 BTAC時(shí)不對(duì)分支預(yù)測(cè)的準(zhǔn)確率產(chǎn)生影響,從而使得在保證分支預(yù)測(cè)的準(zhǔn)確率的前提下實(shí)現(xiàn)BTAC的資源共享成為可能。
[0104]需要說(shuō)明的是,對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)便描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其它順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說(shuō)明書(shū)中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定都是本發(fā)明所必須的。
[0105]在上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒(méi)有詳述的部分,可以參見(jiàn)其它實(shí)施例的相關(guān)描述。
[0106]本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例中的各種方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)例如可以包括:只讀存儲(chǔ)器、隨機(jī)存儲(chǔ)器、磁盤(pán)或光盤(pán)等。
[0107]以上對(duì)本發(fā)明所提供的一種分支預(yù)測(cè)方法及相關(guān)裝置進(jìn)行了詳細(xì)介紹,對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明實(shí)施例的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
【權(quán)利要求】
1.一種分支預(yù)測(cè)方法,其特征在于,應(yīng)用于處理器中,所述處理器包括:第一分支目標(biāo)地址預(yù)測(cè)緩存器和第二分支目標(biāo)地址預(yù)測(cè)緩存器,所述第一分支目標(biāo)地址預(yù)測(cè)緩存器存儲(chǔ)著:寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,所述第二分支目標(biāo)地址預(yù)測(cè)緩存器存儲(chǔ)著:程序計(jì)數(shù)器的字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,其中,所述分支預(yù)測(cè)方法,包括: 從指令緩存中讀取指令; 若確定讀取的所述指令滿(mǎn)足寄存器預(yù)測(cè)條件,則: 根據(jù)讀取的所述指令的寄存器標(biāo)識(shí),從所述第一分支目標(biāo)地址預(yù)測(cè)緩存器中獲取讀取的所述指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址; 若確定讀取的所述指令不滿(mǎn)足所述寄存器預(yù)測(cè)條件,則: 則根據(jù)讀取的所述指令的程序計(jì)數(shù)器,從所述第二分支目標(biāo)地址預(yù)測(cè)緩存器中獲取讀取的所述指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址; 其中,所述寄存器預(yù)測(cè)條件包括:指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述寄存器預(yù)測(cè)條件還包括:指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí); 所述確定讀取的所述指令滿(mǎn)足寄存器預(yù)測(cè)條件,具體為: 當(dāng)所述指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令,且所述指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí)時(shí),確定讀取的所述指令滿(mǎn)足寄存器預(yù)測(cè)條件; 所述確定讀取的所述指令不滿(mǎn)足所述寄存器預(yù)測(cè)條件,具體為: 當(dāng)所述指令的類(lèi)型不為無(wú)條件間接跳轉(zhuǎn)分支指令,或者,所述指令中的寄存器標(biāo)識(shí)不為特定的寄存器標(biāo)識(shí)時(shí),確定讀取的所述指令不滿(mǎn)足寄存器預(yù)測(cè)條件。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于, 所述從所述指令緩存中讀取指令之前包括: 對(duì)待讀取的指令進(jìn)行預(yù)譯碼,得到所述待讀取的指令的類(lèi)型信息; 所述讀取指令之后包括:根據(jù)所述得到的指令的類(lèi)型信息,判定當(dāng)前讀取的指令的類(lèi)型是否為無(wú)條件間接跳轉(zhuǎn)分支指令。
4.根據(jù)權(quán)利要求1至3任一項(xiàng)所述的方法,其特征在于, 在所述讀取指令之前,若對(duì)高級(jí)語(yǔ)言進(jìn)行編譯時(shí)調(diào)用的函數(shù)為標(biāo)準(zhǔn)庫(kù)函數(shù),則,將編譯后的指令的類(lèi)型指定為無(wú)條件間接跳轉(zhuǎn)分支指令。
5.一種分支預(yù)測(cè)裝置,其特征在于,應(yīng)用于處理器中,所述處理器包括:第一分支目標(biāo)地址預(yù)測(cè)緩存器和第二分支目標(biāo)地址預(yù)測(cè)緩存器,所述第一分支目標(biāo)地址預(yù)測(cè)緩存器存儲(chǔ)著:寄存器標(biāo)識(shí)與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,所述第二分支目標(biāo)地址預(yù)測(cè)緩存器存儲(chǔ)著:程序計(jì)數(shù)器的部分字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,或者,程序計(jì)數(shù)器的全部字段與預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址的一一對(duì)應(yīng)關(guān)系信息,其中,所述分支預(yù)測(cè)裝置,包括: 讀取單元,用于從指令緩存中讀取指令; 預(yù)測(cè)獲取單元,用于當(dāng)確定所述讀取單元讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件時(shí),根據(jù)所述讀取單元讀取的所述指令的寄存器標(biāo)識(shí),從所述第一分支目標(biāo)地址預(yù)測(cè)緩存器中獲取所述讀取單元讀取的所述指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址;當(dāng)確定所述讀取單元讀取的指令不滿(mǎn)足所述寄存器預(yù)測(cè)條件時(shí),根據(jù)所述讀取單元讀取的所述指令的程序計(jì)數(shù)器,從所述第二分支目標(biāo)地址預(yù)測(cè)緩存器中獲取所述讀取單元讀取的所述指令的預(yù)測(cè)目標(biāo)跳轉(zhuǎn)地址; 其中,所述寄存器預(yù)測(cè)條件包括:指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令。
6.根據(jù)權(quán)利要求5所述的分支預(yù)測(cè)裝置,其特征在于, 所述寄存器預(yù)測(cè)條件還包括:指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí); 所述分支預(yù)測(cè)裝置還包括: 確定單元,用于當(dāng)所述讀取單元讀取的指令的類(lèi)型為無(wú)條件間接跳轉(zhuǎn)分支指令,且所述讀取單元讀取的指令中的寄存器標(biāo)識(shí)為特定的寄存器標(biāo)識(shí)時(shí),確定所述讀取單元讀取的指令滿(mǎn)足寄存器預(yù)測(cè)條件;當(dāng)所述讀取單元讀取的指令的類(lèi)型不為無(wú)條件間接跳轉(zhuǎn)分支指令,或者,所述讀取單元讀取的指令中的寄存器標(biāo)識(shí)不為特定的寄存器標(biāo)識(shí)時(shí),確定讀取的所述指令不滿(mǎn)足寄存器預(yù)測(cè)條件。
7.根據(jù)權(quán)利要求5或6所述的分支預(yù)測(cè)裝置,其特征在于, 所述分支預(yù)測(cè)裝置還包括: 預(yù)譯碼單元,用于對(duì)所述讀取單元待讀取的指令進(jìn)行預(yù)譯碼,得到所述讀取單元待讀取的指令的類(lèi)型信息; 判定單元,用于在所述讀取單元讀取所述指令后,根據(jù)所述預(yù)譯碼單元得到的指令的類(lèi)型信息,判定所述讀取單元當(dāng)前讀取的指令的類(lèi)型是否為無(wú)條件間接跳轉(zhuǎn)分支指令。
8.根據(jù)權(quán)利要求5或6所述的分支預(yù)測(cè)裝置,其特征在于, 所述分支預(yù)測(cè)裝置還包括: 編譯單元,用于對(duì)高級(jí)語(yǔ)言進(jìn)行編譯; 指定單元,用于當(dāng)所述編譯單元對(duì)高級(jí)語(yǔ)言進(jìn)行編譯時(shí)調(diào)用的函數(shù)為標(biāo)準(zhǔn)庫(kù)函數(shù)時(shí),將編譯后的指令的類(lèi)型指定為無(wú)條件間接跳轉(zhuǎn)分支指令。
【文檔編號(hào)】G06F9/38GK104423929SQ201310367653
【公開(kāi)日】2015年3月18日 申請(qǐng)日期:2013年8月21日 優(yōu)先權(quán)日:2013年8月21日
【發(fā)明者】侯銳, 馮煜晶, 郭旭斌, 張乾龍 申請(qǐng)人:華為技術(shù)有限公司, 中國(guó)科學(xué)院計(jì)算技術(shù)研究所
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1