專利名稱:使用計(jì)算歷史進(jìn)行預(yù)測(cè)的制作方法
所屬領(lǐng)域本發(fā)明屬于程序執(zhí)行,特別是提高運(yùn)行程序指令的效率。
背景技術(shù):
計(jì)算機(jī)最初建造的目的是運(yùn)行程序,而并不關(guān)心使計(jì)算機(jī)有效率能夠運(yùn)行為計(jì)算機(jī)寫的程序就足夠了。因此,處理器讀一個(gè)指令并運(yùn)行它,而后返回程序等待下一個(gè)指令。
隨著計(jì)算機(jī)設(shè)計(jì)更多地被大家所知,工程師已經(jīng)可以設(shè)計(jì)比簡(jiǎn)單的“取來并運(yùn)行”的處理器要更有效率的處理器?,F(xiàn)代的處理器包括“流水線”在任何時(shí)刻,處理器的不同部分運(yùn)行不同的指令。例如,當(dāng)中央處理單元的核心正在運(yùn)行一個(gè)指令,處理器的另一部分也許正在從存儲(chǔ)器加載未來的指令需要的數(shù)據(jù)值。
已經(jīng)得到廣泛研究和思考的處理器設(shè)計(jì)的一個(gè)領(lǐng)域是分支處理。在分支指令運(yùn)行后,根據(jù)一個(gè)關(guān)聯(lián)的數(shù)據(jù)值,可以在兩個(gè)(或更多)不同點(diǎn)中的一個(gè)繼續(xù)控制。這引起現(xiàn)代處理器的一個(gè)問題直至得到分支指令輸出,任何隨后指令的預(yù)處理是徒然的。
為了解決這個(gè)問題,現(xiàn)代處理器進(jìn)行分支預(yù)測(cè)。與其等待分支指令得到執(zhí)行以及通過程序得到正確的路徑,該處理器進(jìn)行猜測(cè)。但是如果處理器猜測(cè)的不正確,任何根據(jù)計(jì)劃路徑的預(yù)處理都將浪費(fèi)。例如,如果對(duì)分支指令的兩個(gè)可能的隨后的指令都加載一個(gè)值到寄存器,如果該錯(cuò)誤指令被預(yù)處理,則寄存器中會(huì)存在該錯(cuò)誤值。處理器必須解消對(duì)錯(cuò)誤路徑的預(yù)處理。如果處理器猜測(cè)錯(cuò)誤,運(yùn)行會(huì)比處理器只簡(jiǎn)單等待分支指令運(yùn)行慢一些。
與其盲目猜測(cè),分支預(yù)測(cè)器試圖進(jìn)行有根據(jù)的猜測(cè)。為了實(shí)現(xiàn)此目的,他們做了某些假設(shè)。一個(gè)可能的假設(shè)是,一個(gè)特定分支指令的輸出單獨(dú)取決于此分支先前的輸出。另外,更一般的假設(shè)是,該輸出取決于分支指令之前的若干(固定大小)組指令。還有其他一些變種。
圖1說明了根據(jù)現(xiàn)有技術(shù)在運(yùn)行一程序的計(jì)算機(jī)系統(tǒng)。圖1中,計(jì)算機(jī)系統(tǒng)105包括計(jì)算機(jī)110,其中裝有存儲(chǔ)器115。圖1中的一部分說明了裝入存儲(chǔ)器115的程序130。程序130包括分支指令135。
在一個(gè)支路的最經(jīng)常的方向是最可能的方向的假設(shè)下,使用表140,一個(gè)分支預(yù)測(cè)器可以預(yù)測(cè)一個(gè)分支是否被采用。如行145所示,指令135被采用的次數(shù)比不采用的次數(shù)多(每次該分支被采用,計(jì)數(shù)器增加,分支不被采用,計(jì)數(shù)器減少)。因而,分支預(yù)測(cè)器可以推測(cè)出該分支將被再次采用。
在分支方向受在先指令影響的假設(shè)下,分支預(yù)測(cè)器注意指令150(包括指令135),并把它們的程序計(jì)數(shù)器散列在一起。這樣產(chǎn)生一個(gè)索引,分支預(yù)測(cè)器可以用于訪問表155。使用這個(gè)方法,如行160顯示,分支預(yù)測(cè)器將會(huì)推測(cè)出該分支不會(huì)被采用。
但是考慮到一個(gè)分支預(yù)測(cè)器觀察分支前的最后五個(gè)指令。不保證任何這些指令對(duì)控制分支輸出的數(shù)據(jù)值上有任何影響。同樣地,不保證這些指令是影響預(yù)測(cè)的唯一指令。也許存在一條與分支的輸出高度相關(guān)的舊指令。
為了更精確地預(yù)測(cè)分支和指令的其他特性,我們需要一種途徑來致力于解決與現(xiàn)有技術(shù)相關(guān)的這些和其他問題。
附圖簡(jiǎn)述圖1是根據(jù)現(xiàn)有技術(shù)的一個(gè)在運(yùn)行程序的計(jì)算機(jī)系統(tǒng)。
圖2是根據(jù)本發(fā)明的一實(shí)施例,對(duì)指令特性進(jìn)行預(yù)測(cè)的計(jì)算機(jī)系統(tǒng)。
圖3是根據(jù)本發(fā)明的一實(shí)施例,在圖2所示的計(jì)算機(jī)系統(tǒng)中,與計(jì)算歷史相關(guān)聯(lián)的寄存器。
圖4是根據(jù)本發(fā)明的一實(shí)施例,從其他寄存器生成的一個(gè)圖3所示的寄存器的計(jì)算歷史。
圖5是根據(jù)本發(fā)明的一實(shí)施例,在沒有使用其它寄存器的計(jì)算歷史的前提下,生成一個(gè)圖3所示寄存器的計(jì)算歷史。
圖6是根據(jù)本發(fā)明的一實(shí)施例,在圖2所示計(jì)算機(jī)系統(tǒng)中,生成一個(gè)查找表索引。
圖7A-7B是根據(jù)本發(fā)明的一實(shí)施例,在圖2所示計(jì)算機(jī)系統(tǒng)中,為一個(gè)指令構(gòu)建計(jì)算歷史的步驟的流程圖。
圖8是根據(jù)本發(fā)明的一實(shí)施例,在圖2所示計(jì)算機(jī)系統(tǒng)中,使用一種可能的散列函數(shù)來產(chǎn)生計(jì)算歷史的步驟的流程圖。
圖9是根據(jù)本發(fā)明的一實(shí)施例,在圖2所示計(jì)算機(jī)系統(tǒng)內(nèi),使用一個(gè)計(jì)算歷史來預(yù)測(cè)指令特性的步驟的流程圖。
詳細(xì)描述圖2是根據(jù)本發(fā)明的一實(shí)施例,對(duì)指令特性進(jìn)行預(yù)測(cè)的計(jì)算機(jī)系統(tǒng)。圖2中,計(jì)算機(jī)系統(tǒng)202與圖1中的計(jì)算機(jī)系統(tǒng)105非常相似。計(jì)算機(jī)系統(tǒng)202包括計(jì)算機(jī)205,監(jiān)視器210,鍵盤215和鼠標(biāo)220。本領(lǐng)域技術(shù)人員會(huì)發(fā)現(xiàn)盡管計(jì)算機(jī)系統(tǒng)202顯示為臺(tái)式個(gè)人計(jì)算機(jī),但本發(fā)明不局限于任何特定類型的計(jì)算機(jī)。例如,計(jì)算機(jī)系統(tǒng)202也可以是一個(gè)缺少計(jì)算機(jī)205,鍵盤215或鼠標(biāo)220的互聯(lián)網(wǎng)設(shè)備。計(jì)算機(jī)系統(tǒng)202也可以成為個(gè)人數(shù)字助理(PDA),或是無線計(jì)算機(jī),或是其他設(shè)備的其中一種。在圖2中,計(jì)算機(jī)系統(tǒng)202中部分沒有顯示的做為其一部分的選裝設(shè)備包括其他輸入/輸出設(shè)備,例如打印機(jī)或調(diào)制解調(diào)器。圖2中也沒有顯示某些計(jì)算機(jī)系統(tǒng)202的常規(guī)內(nèi)部組件如,中央處理單元,文件系統(tǒng),網(wǎng)絡(luò)接口等等。
計(jì)算機(jī)205包括計(jì)算歷史發(fā)生器225。計(jì)算歷史發(fā)生器225負(fù)責(zé)在程序130中產(chǎn)生指令的計(jì)算歷史。有關(guān)計(jì)算歷史是什么和如何被使用的具體情況會(huì)在圖3-5中提及。在一個(gè)實(shí)施例中,計(jì)算歷史發(fā)生器225是計(jì)算機(jī)205的中央處理單元的一部分。在另一個(gè)實(shí)施例中,計(jì)算歷史發(fā)生器225是中央處理單元的外部硬件。在第三個(gè)實(shí)施例中,計(jì)算歷史發(fā)生器225是當(dāng)計(jì)算機(jī)運(yùn)行時(shí),存儲(chǔ)于存儲(chǔ)器115中的軟件。
當(dāng)計(jì)算機(jī)系統(tǒng)202需要對(duì)一個(gè)指令的特性做預(yù)測(cè)時(shí),計(jì)算歷史發(fā)生器225為該指令產(chǎn)生.一個(gè)計(jì)算歷史。該計(jì)算歷史可用于確定對(duì)查閱表230的索引。該查閱表存儲(chǔ)著對(duì)指令特性的預(yù)測(cè)。例如,如果詢問的特性是分支指令135的方向,指令135的計(jì)算歷史可以由計(jì)算歷史發(fā)生器225產(chǎn)生。然后,計(jì)算歷史可以用于確定索引0x41D1,該索引指向查閱表230的行235。該分支的預(yù)測(cè)是該分支將會(huì)被采用(由正向計(jì)數(shù)器值顯示出)。
圖3顯示了根據(jù)本發(fā)明的一實(shí)施例,在圖2所示計(jì)算機(jī)系統(tǒng)中與計(jì)算歷史關(guān)聯(lián)的寄存器。圖3中顯示了程序130,同時(shí)也顯示了作為中央處理單元中的寄存器305-1至305-8。不同的指令使用這些寄存器例如,指令310使用寄存器305-1,305-3和305-5,指令315使用寄存器305-5和305-7。
寄存器可以是源寄存器或目標(biāo)寄存器(或兩者都是),取決于指令是從寄存器讀一個(gè)值還是寫一個(gè)值到寄存器。例如,寄存器305-5是指令310的一個(gè)目標(biāo)寄存器,也是指令315的源寄存器(箭頭的方向顯示一個(gè)寄存器是源寄存器還是目標(biāo)寄存器)。
與每個(gè)寄存器關(guān)聯(lián)的是計(jì)算歷史。例如,寄存器305-1與計(jì)算歷史320-1關(guān)聯(lián),寄存器305-2與計(jì)算歷史320-2關(guān)聯(lián),等等。每個(gè)計(jì)算歷史是影響寄存器當(dāng)前數(shù)據(jù)值的所有事件的信息融合。影響寄存器當(dāng)前數(shù)據(jù)值的事件可以包括其他寄存器值,靜態(tài)常量,存儲(chǔ)器值,寫入寄存器的指令,等等。為了簡(jiǎn)化計(jì)算歷史的產(chǎn)生,在一個(gè)實(shí)施例中只使用靜態(tài)數(shù)據(jù)以產(chǎn)生計(jì)算歷史。形容詞“靜態(tài)”意味著計(jì)算歷史產(chǎn)生中使用的事件(通常是某類數(shù)據(jù))是在程序編譯時(shí)就知道的事件(比較術(shù)語“靜態(tài)”與“動(dòng)態(tài)”和“運(yùn)行時(shí)間”,意味著事件在程序運(yùn)行時(shí)才知道)。換句話說,計(jì)算歷史不取決于實(shí)際運(yùn)用在程序中的數(shù)據(jù),并限于某些在每一時(shí)間運(yùn)行程序時(shí)總是相同的事件。
為生成寄存器的計(jì)算歷史,首先,需要確定計(jì)算歷史和其他對(duì)寄存器有影響的對(duì)象的靜態(tài)數(shù)據(jù)。典型地,這些是由寫入寄存器的指令使用的其他寄存器的計(jì)算歷史。也可以使用其他靜態(tài)數(shù)據(jù)例如,寫入到寄存器的指令的程序計(jì)數(shù)器。將這些計(jì)算歷史和其他靜態(tài)數(shù)據(jù)通過一個(gè)散列算法散列在一起。結(jié)果得到與在當(dāng)前狀況下的寄存器關(guān)聯(lián)的計(jì)算歷史。
例如,考慮到一個(gè)如ADD R1,R2,R3的指令,該指令指示處理器讀取寄存器R1和R2的值,將讀出的值相加,結(jié)果存儲(chǔ)在寄存器R3中。運(yùn)行這個(gè)指令后,為計(jì)算寄存器R3的計(jì)算歷史,需讀取寄存器R1和R2的計(jì)算歷史,但ADD指令的程序計(jì)數(shù)器可任選。這些值散列在一起,產(chǎn)生一個(gè)新的計(jì)算歷史,該計(jì)算歷史可與寄存器R3關(guān)聯(lián)(至少到寄存器R3已經(jīng)分配了一個(gè)新值前)。
通常把一組寄存器(寄存器305-1至305-8)稱為一個(gè)寄存器文件。在本文中,當(dāng)寄存器中的值變化時(shí),寄存器文件也相應(yīng)變化。同樣,計(jì)算歷史320-1至320-8可以被稱為一個(gè)計(jì)算歷史文件。當(dāng)與單獨(dú)寄存器相關(guān)聯(lián)的計(jì)算歷史改變時(shí),計(jì)算歷史文件也相應(yīng)改變。
圖4使用特定散列算法詳細(xì)圖解了該過程。圖4中,源寄存器的計(jì)算歷史是確定的在這種情況下,是計(jì)算歷史320-1和320-3。由于散列算法使用了指令的程序計(jì)數(shù)器,程序計(jì)數(shù)器405也會(huì)被確定。此信息被輸入至計(jì)算歷史發(fā)生器225,其詳細(xì)情況顯示在框410中。如框410所示,計(jì)算歷史之一被循環(huán)移位,產(chǎn)生循環(huán)移位后的計(jì)算歷史420。如圖框425所示,該計(jì)算歷史通過一個(gè)“異或”操作與其他計(jì)算歷史和程序計(jì)數(shù)器405組合。結(jié)果被框430移位。最終輸出是寄存器305-5新的計(jì)算歷史。
框410中按次序解釋了散列算法。首先,如果相同的計(jì)算歷史被使用兩次(在同一個(gè)寄存器被作為指令的源操作使用兩次時(shí),該情況可以發(fā)生),則同一不經(jīng)循環(huán)移位操作數(shù)的“異或”操作將歸零。為了避免該情況,計(jì)算歷史之一可以被循環(huán)移位。其次,通過結(jié)果移位,計(jì)算歷史將老化。這將幫助計(jì)算歷史反映新近的指令比老化的指令對(duì)計(jì)算歷史的值影響更大的事實(shí)。
在本發(fā)明的一實(shí)施例中,一個(gè)計(jì)算歷史持續(xù)的時(shí)間僅僅與它被使用的時(shí)間一樣長(zhǎng)。例如,假定寄存器305-5當(dāng)前儲(chǔ)存著一個(gè)值,計(jì)算歷史320-5當(dāng)前在寄存器305-5中存儲(chǔ)一個(gè)計(jì)算歷史的值。如果下一個(gè)指令從存儲(chǔ)器讀出一個(gè)值,并存入寄存器305-5,一個(gè)新計(jì)算歷史320-5將會(huì)產(chǎn)生,舊的計(jì)算歷史將消失。在另一個(gè)實(shí)施例中,與丟棄計(jì)算歷史不同,計(jì)算歷史可以置于計(jì)算歷史棧435中。計(jì)算歷史棧435在存儲(chǔ)器的某一位置,當(dāng)相應(yīng)的寄存器的值被存入存儲(chǔ)器時(shí),計(jì)算歷史可以存入計(jì)算歷史棧。然后,如果該計(jì)算歷史的值返回至寄存器,相應(yīng)計(jì)算歷史可以從計(jì)算歷史棧435重新得到。例如,當(dāng)寄存器305-5的值被交換出至存儲(chǔ)器,行440顯示與該值相關(guān)的計(jì)算歷史的值是0x34D12F21。
雖然如圖3-4顯示了計(jì)算歷史與寄存器相關(guān),它們也可與指令相關(guān)聯(lián)。指令的計(jì)算歷史可以是一個(gè)操作數(shù)的計(jì)算歷史,一個(gè)由源操作數(shù)(或者其他靜態(tài)信息)或目標(biāo)操作數(shù)的計(jì)算歷史產(chǎn)生的計(jì)算歷史。例如,在預(yù)測(cè)一分支指令時(shí),源寄存器的計(jì)算歷史可以被加載為指令的計(jì)算歷史。
本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,計(jì)算歷史的生成是遞歸的就是說,產(chǎn)生一計(jì)算歷史依賴于對(duì)先前計(jì)算歷史的了解。通過計(jì)算歷史遞歸產(chǎn)生,每個(gè)計(jì)算歷史標(biāo)識(shí)(通過散列)影響寄存器當(dāng)前值的所有的值。影響計(jì)算歷史的對(duì)象數(shù)目沒有限制計(jì)算歷史有效的跟蹤寄存器中當(dāng)前數(shù)據(jù)值的全部起源。
本領(lǐng)域技術(shù)人員也認(rèn)識(shí)到,指令可以有非寄存器的操作數(shù)對(duì)象。例如,一個(gè)“加載”指令加載一個(gè)數(shù)據(jù)值(或許來自存儲(chǔ)器,如果直接存儲(chǔ)器尋址是允許的,或許是一個(gè)靜態(tài)值)到寄存器中。這些如何影響計(jì)算歷史將通過以下的圖5進(jìn)一步討論。
圖5是根據(jù)本發(fā)明的一實(shí)施例,沒有使用其它寄存器的計(jì)算歷史,生成一個(gè)圖3所示寄存器的計(jì)算歷史。圖5中,指令505可以是一個(gè)“加載”指令,從存儲(chǔ)器515加載一個(gè)值到寄存器。加載指令505的計(jì)算歷史通常是在忽視加載指令505使用的任何源寄存器的前提下生成的,但是加載指令505的計(jì)算歷史可使用源寄存器的計(jì)算歷史或源寄存器中的值。例如,用于加載該數(shù)值的存儲(chǔ)單元地址可以被裝入寄存器用于加載指令505。(計(jì)算歷史發(fā)生器225可以將該值與指令505的程序計(jì)數(shù)器510進(jìn)行任選散列。)這個(gè)新值成為寄存器305-5的計(jì)算歷史。
計(jì)算歷史是一個(gè)更普通概念的特殊實(shí)例數(shù)據(jù)流圖。數(shù)據(jù)流圖是程序中數(shù)據(jù)流的一種表示法。數(shù)據(jù)流圖可以使用運(yùn)行時(shí)間數(shù)據(jù)(例如程序運(yùn)行中與變量關(guān)聯(lián)的實(shí)際值)動(dòng)態(tài)生成,也可以使用僅在編譯時(shí)可用數(shù)據(jù)來靜態(tài)生成。數(shù)據(jù)流圖可以計(jì)算歷史相同的方式使用對(duì)指令特性作出預(yù)測(cè),例如由分支指令采用的方向。
圖6是根據(jù)本發(fā)明的一實(shí)施例,顯示在圖2所示計(jì)算機(jī)系統(tǒng)中,一個(gè)查找表索引的生成。顯然,計(jì)算歷史可以被直接用于索引進(jìn)入查閱表230。但是由于查閱表230索引使用的每一附加位使查閱表230長(zhǎng)度變長(zhǎng)兩倍,最好是保持查閱表230的長(zhǎng)度不要過大。這樣,即使圖6顯示了32位計(jì)算歷史,查閱表230的索引長(zhǎng)度僅僅是16位。為了將計(jì)算歷史的長(zhǎng)度縮短至索引的長(zhǎng)度,可使用索引計(jì)算器605???10顯示了一實(shí)施例中索引計(jì)算器610的詳細(xì)情況。
框610中,計(jì)算歷史被分成兩部分。圖6所示,兩部分615和620通過框625中的“異或”操作散列。結(jié)果得到一個(gè)16位索引,該索引可用于索引進(jìn)入查閱表230。如果希望得到一個(gè)較小的索引,可重復(fù)該過程,將該索引減少為8位。本領(lǐng)域技術(shù)人員也認(rèn)識(shí)到,也可以使用其它方法將計(jì)算歷史的長(zhǎng)度減少至索引進(jìn)入查閱表230索引的大小。
請(qǐng)注意查閱表230可以存儲(chǔ)對(duì)數(shù)據(jù)的任何種類的預(yù)測(cè)。查閱表230最直接的用途是存儲(chǔ)一個(gè)分支預(yù)測(cè),但是它對(duì)于存儲(chǔ)何種預(yù)測(cè)沒有限制。例如,查閱表230可以用于對(duì)存儲(chǔ)器查閱地址或由變量采用的數(shù)據(jù)值做預(yù)測(cè)。
圖7A-7B是根據(jù)本發(fā)明的一實(shí)施例,在圖2所示計(jì)算機(jī)系統(tǒng)中,為一個(gè)指令構(gòu)建計(jì)算歷史的步驟的流程圖。圖7A中,在程序塊705,一個(gè)指令被讀取。在判定點(diǎn)710,檢查源操作數(shù)以確定是否存在計(jì)算歷史。如果有,在程序塊715中,加載源操作數(shù)的計(jì)算歷史。如果沒有,在程序塊720中,靜態(tài)值將被用作源操作數(shù)的計(jì)算歷史。(根據(jù)以上對(duì)圖5的討論,那些沒有源計(jì)算歷史的指令的例子是存取存儲(chǔ)器或?qū)⒁粋€(gè)靜態(tài)值加載至寄存器的指令。)在程序塊725(圖7B),計(jì)算歷史被組合。其他靜態(tài)數(shù)據(jù)在此時(shí)也可以被使用。在程序塊730,結(jié)果被確定為指令的計(jì)算歷史。最后,在程序塊735,計(jì)算歷史(任選地)與指令的目標(biāo)操作數(shù)一起存儲(chǔ)。
圖8是根據(jù)本發(fā)明的一實(shí)施例,在圖2所示計(jì)算機(jī)系統(tǒng)中,使用一種可能的散列功能來產(chǎn)生計(jì)算歷史的步驟的流程圖。在程序塊805中,源操作數(shù)之一的計(jì)算歷史被循環(huán)移位。在程序塊810中,計(jì)算歷史通過“異或”操作組合。在程序塊815中,任何其他靜態(tài)數(shù)據(jù)都可以成為計(jì)算歷史的一部分例如,指令的程序計(jì)數(shù)器。最后,在程序塊820中,結(jié)果被移位,以老化計(jì)算歷史。
圖9是根據(jù)本發(fā)明的一實(shí)施例,在圖2所示計(jì)算機(jī)系統(tǒng)內(nèi),使用一個(gè)計(jì)算歷史來預(yù)測(cè)指令特性的步驟的流程圖。在程序塊905中,為指令存取一個(gè)計(jì)算歷史。通常如果指令有一個(gè)目標(biāo)寄存器,采用的計(jì)算歷史與該指令的目標(biāo)存儲(chǔ)器相關(guān)聯(lián)。對(duì)于沒有目標(biāo)存儲(chǔ)器的指令(例如一個(gè)分支指令),采用的計(jì)算歷史與該指令的源寄存器相關(guān)聯(lián)。在程序塊910中,由計(jì)算歷史產(chǎn)生一個(gè)索引。在程序塊915中,該索引被用來存取一個(gè)查閱表。在程序塊920中,從查閱表讀一個(gè)值。在程序塊925中,使用從查閱表讀出的值對(duì)指令特性作出預(yù)測(cè)。最后,在程序塊930中,一旦預(yù)測(cè)的真?zhèn)我阎?,查閱表的值可以?任選地)更新。
本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,以上描述的發(fā)明實(shí)施例是可以通過使用計(jì)算機(jī)實(shí)現(xiàn)的。那樣,本方法由組成程序的指令實(shí)現(xiàn)(這樣,指示中央處理單元如何運(yùn)行程序)。該程序可以存儲(chǔ)于計(jì)算機(jī)可讀媒介,例如軟盤,光盤(如壓密盤),硬盤(如硬驅(qū)),隨即存取存儲(chǔ)器(RAM),只讀存儲(chǔ)器(ROM),或快速存儲(chǔ)器。該程序可以在計(jì)算機(jī)上運(yùn)行以實(shí)現(xiàn)該方法。本領(lǐng)域技術(shù)人員也可以認(rèn)識(shí)到,以上涉及的發(fā)明實(shí)施例可以包括一個(gè)計(jì)算機(jī)可讀調(diào)制載波信號(hào),該程序或程序運(yùn)行的一部分,可以分布于網(wǎng)絡(luò)中的多個(gè)計(jì)算機(jī)。以上在本發(fā)明的一個(gè)實(shí)施例中圖示和描述了本發(fā)明的原理,有一點(diǎn)對(duì)本領(lǐng)域技術(shù)人員顯而易見,不偏離該原理,本發(fā)明可在安排和細(xì)節(jié)上修改。所有在隨后權(quán)利要求的精神和范圍中的修改都被要求權(quán)利。
權(quán)利要求
1.一個(gè)計(jì)算機(jī),包括一個(gè)存儲(chǔ)器;一個(gè)存儲(chǔ)在存儲(chǔ)器中的指令;所述指令的一個(gè)計(jì)算歷史,該計(jì)算歷史由一組靜態(tài)數(shù)據(jù)值來靜態(tài)確定,每個(gè)數(shù)據(jù)值表示一個(gè)對(duì)指令有影響的對(duì)象;一個(gè)查閱表,該查閱表存儲(chǔ)關(guān)于多個(gè)指令的多個(gè)預(yù)測(cè);和一個(gè)索引,可由計(jì)算歷史引出,用于存取查閱表以確定對(duì)該指令的預(yù)測(cè)。
2.根據(jù)權(quán)利要求1所述的計(jì)算機(jī),其中查閱表存儲(chǔ)于存儲(chǔ)器中。
3.根據(jù)權(quán)利要求1所述的計(jì)算機(jī),其中查閱表存儲(chǔ)于計(jì)算機(jī)的第二存儲(chǔ)器中。
4.根據(jù)權(quán)利要求1所述的計(jì)算機(jī),還包括一個(gè)計(jì)算歷史發(fā)生器可用以產(chǎn)生指令的計(jì)算歷史。
5.根據(jù)權(quán)利要求4所述的計(jì)算機(jī),其中該指令包括兩個(gè)操作數(shù),每個(gè)操作數(shù)以計(jì)算機(jī)的一個(gè)寄存器來表示,第一寄存器具有第二計(jì)算歷史,第二寄存器具有第三計(jì)算歷史;計(jì)算歷史發(fā)生器可用以對(duì)第二計(jì)算歷史進(jìn)行循環(huán)移位,并將循環(huán)移位后的第二計(jì)算歷史與第三計(jì)算歷史散列。
6.根據(jù)權(quán)利要求5所述的計(jì)算機(jī),其中計(jì)算歷史發(fā)生器還可以進(jìn)一步將循環(huán)移位過的第二計(jì)算歷史與第三計(jì)算歷史和該指令的程序計(jì)數(shù)器散列。
7.根據(jù)權(quán)利要求4所述的計(jì)算機(jī),其中計(jì)算歷史發(fā)生器使用第二計(jì)算歷史為該指令的源操作數(shù)生成計(jì)算歷史。
8.根據(jù)權(quán)利要求4所述的計(jì)算機(jī),其中計(jì)算歷史發(fā)生器使用一套靜態(tài)值子集產(chǎn)生計(jì)算歷史,該套靜態(tài)值包括一個(gè)或多個(gè)第二計(jì)算歷史,一個(gè)或靜態(tài)值和一個(gè)指令的程序計(jì)數(shù)器。
9.根據(jù)權(quán)利要求1所述的計(jì)算機(jī),其中計(jì)算歷史是由指令的目標(biāo)操作數(shù)的計(jì)算歷史確定的。
10.根據(jù)權(quán)利要求1所述的計(jì)算機(jī),還包括一個(gè)索引計(jì)數(shù)器以計(jì)算從計(jì)算歷史得來的索引。
11.根據(jù)權(quán)利要求1所述的計(jì)算機(jī),還包括一個(gè)計(jì)算歷史文件,來存儲(chǔ)計(jì)算歷史。
12.根據(jù)權(quán)利要求1所述的計(jì)算機(jī),還包括一個(gè)與計(jì)算歷史相關(guān)聯(lián)的寄存器,該寄存器是指令的目標(biāo)操作數(shù)。
13.根據(jù)權(quán)利要求1所述的計(jì)算機(jī),其中該指令是組成一個(gè)程序的多個(gè)指令之一;且該計(jì)算歷史是在運(yùn)行程序前產(chǎn)生的。
14.一個(gè)計(jì)算機(jī),包括一個(gè)存儲(chǔ)器;一個(gè)存儲(chǔ)于存儲(chǔ)器中的分支指令;一個(gè)數(shù)據(jù)流圖;一個(gè)查詢表,該查詢表存儲(chǔ)著一個(gè)關(guān)于分支指令采用的方向的預(yù)測(cè),查詢表中的預(yù)測(cè)通過數(shù)據(jù)流圖進(jìn)行標(biāo)識(shí)。
15.根據(jù)權(quán)利要求14所述的計(jì)算機(jī),其中查詢表存儲(chǔ)在存儲(chǔ)器中。
16.根據(jù)權(quán)利要求14所述的計(jì)算機(jī),其中查詢表存儲(chǔ)在計(jì)算機(jī)的第二存儲(chǔ)器中。
17.根據(jù)權(quán)利要求14所述的計(jì)算機(jī),其中數(shù)據(jù)流圖是由一組靜態(tài)數(shù)據(jù)值來靜態(tài)確定,每個(gè)數(shù)據(jù)值代表一個(gè)對(duì)分支指令有影響的對(duì)象。
18.一種產(chǎn)生計(jì)算歷史的方法,包括讀取一指令;確定該指令的源操作數(shù);從源操作數(shù)中讀取靜態(tài)第一計(jì)算歷史;將第一計(jì)算歷史與一個(gè)靜態(tài)數(shù)據(jù)組合,產(chǎn)生一個(gè)靜態(tài)第二計(jì)算歷史。
19.根據(jù)權(quán)利要求18所述的方法,還包括確定該指令的目標(biāo)操作數(shù);和將第二計(jì)算歷史存儲(chǔ)為目標(biāo)操作數(shù)的第二計(jì)算歷史。
20.根據(jù)權(quán)利要求18所述的方法,還包括將第二計(jì)算歷史存儲(chǔ)為指令的第二計(jì)算歷史。
21.根據(jù)要求18所述的方法,其中加載第一計(jì)算歷史包括,如果指令缺乏源操作數(shù),分配一個(gè)靜態(tài)值作為計(jì)算歷史。
22.根據(jù)權(quán)利要求18所述的方法,其中加載第一計(jì)算歷史包括,如果源操作數(shù)是一個(gè)存儲(chǔ)器地址,使用一個(gè)靜態(tài)值作為計(jì)算歷史。
23.根據(jù)權(quán)利要求18所述的方法,其中加載第一計(jì)算歷史包括,當(dāng)該指令和第二指令通訊時(shí),加載基于第二指令的第三計(jì)算歷史。
24.根據(jù)權(quán)利要求18所述的方法,其中確定一個(gè)源操作數(shù)包括確定一個(gè)寄存器作為源操作數(shù)。
25.根據(jù)權(quán)利要求18所述的方法,其中第一計(jì)算歷史與靜態(tài)數(shù)據(jù)的組合包括確定是否有第二源操作數(shù);以及如果有第二源操作數(shù),則將第三計(jì)算歷史作為靜態(tài)數(shù)據(jù)裝入第二源操作數(shù)。
26.根據(jù)權(quán)利要求18所述的方法,其中第一計(jì)算歷史與靜態(tài)數(shù)據(jù)的組合包括對(duì)第一計(jì)算歷史與指令的程序計(jì)數(shù)器進(jìn)行組合。
27.根據(jù)權(quán)利要求18所述的方法,其中第一計(jì)算歷史與靜態(tài)數(shù)據(jù)的組合包括對(duì)第一計(jì)算歷史與靜態(tài)數(shù)據(jù)進(jìn)行散列。
28.根據(jù)權(quán)利要求27所述的方法,其中散列第一計(jì)算歷史與靜態(tài)數(shù)據(jù)包括對(duì)第一計(jì)算歷史進(jìn)行循環(huán)移位;且對(duì)循環(huán)移位過的第一計(jì)算歷史和靜態(tài)數(shù)據(jù)執(zhí)行“異或”操作。
29.根據(jù)權(quán)利要求28所述的方法,其中散列第一計(jì)算歷史還包括對(duì)“異或”操作的結(jié)果進(jìn)行移位。
30.一個(gè)項(xiàng)目包括一個(gè)存儲(chǔ)介質(zhì),該存儲(chǔ)介質(zhì)具有存儲(chǔ)的上述指令,當(dāng)由計(jì)算機(jī)運(yùn)行時(shí),導(dǎo)致讀一個(gè)指令;確定該指令的源操作數(shù);為源操作數(shù)加載一個(gè)靜態(tài)第一計(jì)算歷史;且將第一計(jì)算歷史與靜態(tài)數(shù)據(jù)組合,并產(chǎn)生一個(gè)靜態(tài)第二計(jì)算歷史。
31.根據(jù)權(quán)利要求30所述的項(xiàng)目,其中的指令還包括確定該指令的目標(biāo)操作數(shù);且將第二計(jì)算歷史存儲(chǔ)為目標(biāo)操作數(shù)的第二計(jì)算歷史。
32.根據(jù)權(quán)利要求30所述的項(xiàng)目,其中該指令還包括,將第二計(jì)算歷史存儲(chǔ)為該指令的第二計(jì)算歷史。
33.根據(jù)權(quán)利要求30所述的項(xiàng)目,其中加載第一計(jì)算歷史包括,當(dāng)該指令缺乏源操作數(shù)時(shí),分配一個(gè)靜態(tài)值作為計(jì)算歷史。
34.根據(jù)權(quán)利要求30所述的項(xiàng)目,其中加載第一計(jì)算歷史包括,如果源操作數(shù)是一個(gè)存儲(chǔ)器地址,則使用靜態(tài)值作為計(jì)算歷史。
35.根據(jù)權(quán)利要求30所述的項(xiàng)目,其中加載第一計(jì)算歷史包括,當(dāng)該指令和第二指令通信時(shí),加載基于第二指令的一個(gè)第三計(jì)算歷史。
36.根據(jù)權(quán)利要求30所述的項(xiàng)目,其中確定一個(gè)源操作數(shù)包括確定一個(gè)寄存器作為源操作數(shù)。
37.根據(jù)權(quán)利要求30所述的項(xiàng)目,其中將第一計(jì)算歷史與靜態(tài)數(shù)據(jù)組合包括確定是否有一個(gè)第二源操作數(shù);和如果有第二源操作數(shù),則將一個(gè)第三計(jì)算歷史作為靜態(tài)數(shù)據(jù)加載第二源操作數(shù)。
38.根據(jù)權(quán)利要求30所述的項(xiàng)目,其中將第一計(jì)算歷史與靜態(tài)數(shù)據(jù)組合包括,將第一計(jì)算歷史與該指令的程序計(jì)數(shù)器組合。
39.根據(jù)權(quán)利要求30所述的項(xiàng)目,其中將第一計(jì)算歷史與靜態(tài)數(shù)據(jù)組合包括,對(duì)第一計(jì)算歷史與靜態(tài)數(shù)據(jù)進(jìn)行散列。
40.根據(jù)權(quán)利要求39所述的項(xiàng)目,其中散列第一計(jì)算歷史與靜態(tài)數(shù)據(jù)包括對(duì)第一計(jì)算歷史進(jìn)行循環(huán)移位;且對(duì)循環(huán)移位后的第一計(jì)算歷史和靜態(tài)數(shù)據(jù)上執(zhí)行“異或”操作。
41.根據(jù)權(quán)利要求40所述的項(xiàng)目,其中散列第一計(jì)算歷史還包括,對(duì)“異或”操作的結(jié)果進(jìn)行移位。
42.使用靜態(tài)計(jì)算歷史的方法,包括讀一個(gè)指令;確定該指令的靜態(tài)計(jì)算歷史;使用該靜態(tài)計(jì)算歷史,預(yù)測(cè)該指令的一個(gè)特性。
43.根據(jù)權(quán)利要求42所述的方法,其中預(yù)測(cè)該指令特性包括存取查閱表;使用靜態(tài)計(jì)算歷史,索引進(jìn)入查閱表;基于靜態(tài)計(jì)算歷史的索引,從查閱表中讀值。
44.根據(jù)權(quán)利要求43所述的方法,其中索引進(jìn)入查閱表包括,減小靜態(tài)計(jì)算歷史的長(zhǎng)度。
45.根據(jù)權(quán)利要求44所述的方法,其中減小靜態(tài)計(jì)算歷史的長(zhǎng)度包括將靜態(tài)計(jì)算歷史分成兩部分;對(duì)這兩部分執(zhí)行“異或”操作;使用“異或”操作的結(jié)果,索引進(jìn)入查閱表。
46.根據(jù)權(quán)利要求42所述的方法,其中預(yù)測(cè)指令特性包括,預(yù)測(cè)一個(gè)分支指令的方向。
47.根據(jù)權(quán)利要求42所述的方法,還包括確定預(yù)測(cè)是否正確;更新計(jì)數(shù)器來反映預(yù)測(cè)的準(zhǔn)確度。
48.一個(gè)項(xiàng)目包括一個(gè)存儲(chǔ)介質(zhì),該存儲(chǔ)介質(zhì)擁有存儲(chǔ)上述的指令,當(dāng)由計(jì)算機(jī)運(yùn)行時(shí),導(dǎo)致讀一個(gè)指令;確定該指令的一個(gè)靜態(tài)計(jì)算歷史;使用該靜態(tài)計(jì)算歷史,預(yù)測(cè)該指令的一個(gè)特性。
49.根據(jù)權(quán)利要求48所述的項(xiàng)目,其中預(yù)測(cè)該指令的特性包括存取查閱表;使用靜態(tài)計(jì)算歷史,索引進(jìn)入查閱表;基于靜態(tài)計(jì)算歷史索引,從查閱表讀值。
50.根據(jù)權(quán)利要求49所述的項(xiàng)目,其中索引進(jìn)入查閱表包括,減小靜態(tài)計(jì)算歷史的長(zhǎng)度。
51.根據(jù)權(quán)利要求50所述的項(xiàng)目,其中減小靜態(tài)計(jì)算歷史的長(zhǎng)度包括將靜態(tài)計(jì)算歷史分成兩部分;對(duì)這兩部分執(zhí)行“異或”操作;使用“異或”操作的結(jié)果,索引進(jìn)入查閱表。
52.根據(jù)權(quán)利要求48所述的項(xiàng)目,其中預(yù)測(cè)指令特性包括,預(yù)測(cè)一個(gè)分支指令的方向。
53.根據(jù)權(quán)利要求48所述的項(xiàng)目,其中指令還包括確定該預(yù)測(cè)是否正確;和更新計(jì)數(shù)器來反映預(yù)測(cè)的準(zhǔn)確性。
54.使用數(shù)據(jù)流圖的方法,包括讀一個(gè)分支指令;構(gòu)造分支指令的一個(gè)數(shù)據(jù)流圖;使用數(shù)據(jù)流圖,預(yù)測(cè)由分支指令采用的方向。
55.根據(jù)權(quán)利要求54所述的方法,其中構(gòu)造數(shù)據(jù)流圖包括,使用一組靜態(tài)數(shù)據(jù)值,構(gòu)造數(shù)據(jù)流圖,其中每個(gè)數(shù)據(jù)值表示一個(gè)對(duì)分支指令上有作用的對(duì)象。
56.一個(gè)項(xiàng)目包括一個(gè)存儲(chǔ)介質(zhì),所述存儲(chǔ)介質(zhì)擁有存儲(chǔ)上述的指令,當(dāng)由計(jì)算機(jī)運(yùn)行時(shí),導(dǎo)致讀一個(gè)分支指令;構(gòu)造分支指令的數(shù)據(jù)流圖;使用數(shù)據(jù)流圖,預(yù)測(cè)由分支指令采用的方向。
57.根據(jù)權(quán)利要求56所述的項(xiàng)目,其中構(gòu)造數(shù)據(jù)流圖包括,使用一組靜態(tài)數(shù)據(jù)值,構(gòu)造數(shù)據(jù)流圖,其中每個(gè)數(shù)據(jù)值表示一個(gè)對(duì)分支指令有作用的對(duì)象。
全文摘要
程序中與指令相關(guān)的是計(jì)算歷史。計(jì)算歷史代表所有影響指令結(jié)果的對(duì)象,這些對(duì)象包括(但不限于)寄存器,存儲(chǔ)地址,靜態(tài)值,和指令程序計(jì)數(shù)器。計(jì)算歷史可以用來對(duì)指令特性做預(yù)測(cè)。
文檔編號(hào)G06F9/38GK1512325SQ20031011291
公開日2004年7月14日 申請(qǐng)日期2003年12月25日 優(yōu)先權(quán)日2002年12月27日
發(fā)明者維爾克森·B·克里斯, 斯塔克·W·加爾德, 托馬斯·瑞杰, W 加爾德, 瑞杰, 維爾克森 B 克里斯 申請(qǐng)人:英特爾公司