亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

有限游程轉(zhuǎn)移預(yù)測的制作方法

文檔序號:6421402閱讀:150來源:國知局
專利名稱:有限游程轉(zhuǎn)移預(yù)測的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般涉及流水線計算機系統(tǒng),特別涉及一種計算機系統(tǒng)所采用的用于預(yù)測條件轉(zhuǎn)移指令的方向的轉(zhuǎn)移預(yù)測方法。
背景技術(shù)
執(zhí)行條件轉(zhuǎn)移所需的時間嚴重地限制了流水線處理器的性能。處理器一般是以順序方式取出和執(zhí)行指令的;即,在從地址n取出的指令Ei之后立即執(zhí)行的指令Ei+1(Ei的后繼指令)的地址是通過把Ei的長度加n而找到的。無條件轉(zhuǎn)移是一個其執(zhí)行使得控制轉(zhuǎn)移到一個位于非順序地址的指令的指令。因此一個轉(zhuǎn)移B的后繼者是從一個任意目標地址取出的。在一些計算機中,轉(zhuǎn)移指令B的目標地址包含在該指令中,而在其它的計算機中目標地址是由包含在指令B中的補償值加上指令B本身的取出地址形成的。
根據(jù)對一些數(shù)據(jù)段的測試,一個條件轉(zhuǎn)移指令有條件地造成一個控制的轉(zhuǎn)移。與目標地址的說明一起,這樣一個指令包含一個待測試的條件。這個條件一般是一個數(shù)的一小組代數(shù)特性之一該數(shù)是或不是零,該數(shù)是或不是正的,該數(shù)是或不是負的,等等。如果滿足了條件,則進行轉(zhuǎn)移即,從轉(zhuǎn)移的目標地址取出后繼指令。如果條件不滿足,則后繼指令是按順序的下一個指令,就象非轉(zhuǎn)移指令一樣。
流水線計算機通過一個由數(shù)個處理階段——一般至少五個——構(gòu)成的流水線傳遞每個指令。在每個時鐘周期中可以把一條新的指令輸入到流水線中。結(jié)果,一臺流水線計算機可以同時具有在不同執(zhí)行階段的幾個指令,因此在每個階段最大地利用了硬件資源。
當轉(zhuǎn)移指令是在待測試的數(shù)據(jù)代數(shù)條件確定之前取出時,會出現(xiàn)流水線計算機中產(chǎn)生由條件轉(zhuǎn)移引起的性能降低。在那些由轉(zhuǎn)移指令本身指明待測試數(shù)據(jù)存儲單元的計算機中這種現(xiàn)象是最不利的。對代數(shù)條件的評估只是在經(jīng)過幾個流水線階段之后才能進行。由于在取出轉(zhuǎn)移指令以前不能開始對代數(shù)條件的評估,因此轉(zhuǎn)移指令取出后的數(shù)個時鐘周期之后才能知道待測試的條件。因為只有在測試了數(shù)據(jù)之后才能肯定地確定待取出的下一個指令的存儲單元,所以有數(shù)個時鐘周期不能取出指令。
轉(zhuǎn)移預(yù)測是要在取出一個條件轉(zhuǎn)移時立即預(yù)測是否要執(zhí)行該轉(zhuǎn)移,而不必等待測試結(jié)果的確定。以這種方式,能夠以滿速率連續(xù)取出指令。如果預(yù)測出轉(zhuǎn)移,則需要確認該預(yù)測,并且需要收回錯誤的預(yù)測。如果預(yù)測是不正確的,那么在錯誤地預(yù)測的(“壞的”)轉(zhuǎn)移之后取出的所有指令都是錯誤的指令,因此必須逆向恢復(fù)它們的執(zhí)行結(jié)果。記錄,確認和修正預(yù)測轉(zhuǎn)移的技術(shù)不是本發(fā)明的主題。
由于必須放棄在一個壞的轉(zhuǎn)移之后取出的所有指令,所以它們代表了浪費的效率。因此機器的性能是直接與轉(zhuǎn)移預(yù)測的精確性相關(guān)的。
轉(zhuǎn)移預(yù)測方案可以是靜態(tài)的或是動態(tài)的。在一種靜態(tài)方案中,轉(zhuǎn)移指令本身包含著預(yù)測;這一般是由產(chǎn)生了該程序的編譯程序提供的,其基礎(chǔ)是編譯程序已經(jīng)執(zhí)行了一個典型數(shù)據(jù)集的程序。只有在計算機的指令系統(tǒng)是考慮到這一點而設(shè)計的時候,靜態(tài)預(yù)測才是可能的。大多數(shù)商業(yè)上成功的指令系統(tǒng)并不提供允許靜態(tài)轉(zhuǎn)移預(yù)測的功能。
動態(tài)轉(zhuǎn)移預(yù)測使用在程序執(zhí)行過程中硬件收集的有關(guān)轉(zhuǎn)移的信息。硬件只能“知道”一個給定轉(zhuǎn)移指令的過去的執(zhí)行模式,并因此必須使其動態(tài)預(yù)測基于這種信息。由于條件轉(zhuǎn)移是相當頻繁的(其密度達到每五個指令就有一個),因此如果不使用很大的存儲容量,對每個條件轉(zhuǎn)移的可以存儲的執(zhí)行歷史的量不可能很大。一般在一個程序中轉(zhuǎn)移預(yù)測信息僅保存在一個小的——但卻是不定的——轉(zhuǎn)移的子集中。
在一個程序的執(zhí)行過程中的任何一個時刻的一個給定的轉(zhuǎn)移指令的正確執(zhí)行歷史可以用二進制符號1和0的一個序列代表。這個序列指出該轉(zhuǎn)移指令是執(zhí)行了(1)或是沒有執(zhí)行(0)。每次執(zhí)行一個轉(zhuǎn)移指令時,根據(jù)轉(zhuǎn)移的正確的(不必是預(yù)測的)執(zhí)行是否發(fā)生了,在這個轉(zhuǎn)移歷史的終點加上一個1或0使轉(zhuǎn)移歷史延長。
可以把一個轉(zhuǎn)移指令的執(zhí)行歷史劃分為多個游程。一個轉(zhuǎn)移游程是一個前后各有一個1的連續(xù)的0的序列,或是相反。也就是說,在該歷史中的每個符號完全在一個游程中,并且每個游程是全部由0或全部由1組成的。一個游程的長度是其中符號的數(shù)量。
現(xiàn)有技術(shù)的動態(tài)轉(zhuǎn)移預(yù)測機構(gòu)利用了這樣一個觀察結(jié)果,對于一個程序中的許多轉(zhuǎn)移,所有的或是幾乎所有的0的游程的長度都是1。這些通常是結(jié)束循環(huán)的轉(zhuǎn)移。一個循環(huán)一般是通過將一個條件轉(zhuǎn)移放置在構(gòu)成循環(huán)體的指令序列的終點來實現(xiàn)的。該條件轉(zhuǎn)移測試循環(huán)結(jié)束的條件,并且如果條件為假時轉(zhuǎn)移到成為循環(huán)體的序列中的第一指令。如果該轉(zhuǎn)移沒有執(zhí)行,循環(huán)被終止。下一次執(zhí)行的轉(zhuǎn)移將在循環(huán)下一次激活中第一個被執(zhí)行,除非這次激活在一次追蹤后終止。因此存在著一個由一個代表循環(huán)終止的單一的0構(gòu)成的游程。(一些編譯程序把條件轉(zhuǎn)移放在循環(huán)體的開始而不是末尾構(gòu)造循環(huán)。通過執(zhí)行轉(zhuǎn)移終止這樣一個循環(huán)。這種循環(huán)構(gòu)造導(dǎo)致具有由一個單一的1構(gòu)成的游程的執(zhí)行歷史。)現(xiàn)有技術(shù)轉(zhuǎn)移預(yù)測將每次預(yù)測建立在每個轉(zhuǎn)移的兩比特的存儲歷史上。這些比特是一個四-態(tài)狀態(tài)機的狀態(tài)(圖1)。這個狀態(tài)機的作用是要預(yù)測轉(zhuǎn)移將具有與上一個長度大于1的游程相同的結(jié)果。因此在一個總是被不止一次追蹤的,因而其執(zhí)行歷史沒有兩個或更多0的游程的循環(huán)的場合,預(yù)測將是恒定的。
這種現(xiàn)有的狀態(tài)機的預(yù)測精度與1的游程的長度直接相關(guān)。如果平均游程長度是n,那么每n次正確的預(yù)測中有一次錯誤的預(yù)測。因此對于較短的游程效率較差。本發(fā)明的目的是要改進對于短游程長度轉(zhuǎn)移的預(yù)測精度。

發(fā)明內(nèi)容
許多轉(zhuǎn)移具有恒定或緩慢變化游程長度,也就是說,幾個連續(xù)的1的游程有同樣的長度。本發(fā)明通過增加兩個小計數(shù)器,一個上計數(shù)器和一個下計數(shù)器來增強為每個轉(zhuǎn)移所存儲的歷史。這兩個計數(shù)器與現(xiàn)有技術(shù)的狀態(tài)機轉(zhuǎn)移預(yù)測器協(xié)同工作。
上計數(shù)器計算當前游程的長度。如果游程在計數(shù)器溢出之前終止,該上計數(shù)器的值被復(fù)制到下計數(shù)器中,并把上計數(shù)器重新初始化為零。然后下計數(shù)器在接下來的游程中遞減計數(shù)。在下計數(shù)器達到零之前,使用的預(yù)測是狀態(tài)機作出的。在下計數(shù)器為零的第一執(zhí)行時,對狀態(tài)機的預(yù)測進行求補。如果當前游程的長度與前面的游程的長度相等,那么預(yù)測將是正確的。只要游程長度保持恒定,本發(fā)明的預(yù)測精度是100%。如果游程長于可能計算的長度,計數(shù)器失效,預(yù)測依賴狀態(tài)機獨自進行。
每次發(fā)布任何條件轉(zhuǎn)移指令B,都要檢查它的預(yù)測歷史,以確定是否將該轉(zhuǎn)移預(yù)測為被執(zhí)行的轉(zhuǎn)移或是未執(zhí)行的轉(zhuǎn)移,并且立即部分地根據(jù)該預(yù)測更新歷史。該更新還依賴于這是否是B的再發(fā)布。只有當B的任何執(zhí)行BE被錯誤地預(yù)測,此時還不知道正確的方向,并且知道沒有任何BE之前的轉(zhuǎn)移的執(zhí)行是被錯誤地預(yù)測的時候才發(fā)生B的再發(fā)布。在這種場合,發(fā)生對BE的轉(zhuǎn)移修正放棄BE和所有任何后續(xù)指令的執(zhí)行,并再發(fā)布B。
更新計數(shù)器的算法是建立在狀態(tài)機預(yù)測器總是預(yù)測相同方向的假設(shè)的基礎(chǔ)上的。因此,一個游程的終點是僅由計數(shù)器預(yù)測的。一個再發(fā)布意味著錯誤地預(yù)測了游程長度沒有作出對游程長度的預(yù)測,或是把游程長度預(yù)測的過短或過長。如果因為前面的游程太長而不能計數(shù),而根本沒有作出游程長度的預(yù)測,則把上計數(shù)器設(shè)置為0,以防萬一新開始的游程是短的足以進行計數(shù),并且將下計數(shù)器置位為使預(yù)測器失效的-1。如果由于游程比預(yù)計提前結(jié)束而使再發(fā)布轉(zhuǎn)移預(yù)測錯誤,則將新的,較短的長度從上計數(shù)器復(fù)制到下計數(shù)器,并把上計數(shù)器復(fù)位為0。如果預(yù)測的游程長度太短,上計數(shù)器繼續(xù)遞增,以計算出正確的較長的長度,并且當知道不能正確地預(yù)測出這個較長的游程的終點時,將下計數(shù)器置位為-1。
對于任何一個不是再發(fā)布的轉(zhuǎn)移的發(fā)布,如果上計數(shù)器已經(jīng)到達其最大計數(shù)時,該計數(shù)器停留在該計數(shù)上,并把下計數(shù)器置位為-1,防止任何游程長度預(yù)測。否則,如果下計數(shù)器不是0,就遞增上計數(shù)器的值,指出游程的預(yù)測終點;在這種場合,把上計數(shù)器復(fù)制到下計數(shù)器,并隨后把上計數(shù)器復(fù)位為0。如果上計數(shù)器沒有在其最大值,下計數(shù)器沒被禁止,那么如果下計數(shù)器還沒有到0,就遞減下計數(shù)器值。
使用本發(fā)明而增加的對每個轉(zhuǎn)移必須存儲的狀態(tài)信息量是很大的。所幸的是,少量的比特就能給出高的性能增益。三比特計數(shù)器可以正確地預(yù)測所有小于7的恒定游程長度。不能正確預(yù)測的最短游程長度,7,具有從狀態(tài)機預(yù)測器獨自獲得的87%的精度。四比特計數(shù)器給出至少93%的精度。


圖1示出了現(xiàn)有技術(shù)中的轉(zhuǎn)移預(yù)測機構(gòu)的狀態(tài)機圖;圖2示出了本發(fā)明的一個實施例的轉(zhuǎn)移預(yù)測機構(gòu)的框圖;圖3示出了圖2中的預(yù)測模塊的電路圖;圖4示出了圖2中的更新模塊運行的算法的流程圖;圖5說明了用于根據(jù)本發(fā)明的采用具有恒定游程長度的條件轉(zhuǎn)移指令的一組指令的移動預(yù)測機構(gòu)的運行;圖6說明了用于根據(jù)本發(fā)明的采用具有變量游程長度的條件轉(zhuǎn)移指令的一組指令的移動預(yù)測機構(gòu)的運行。
具體實施例方式
本發(fā)明的優(yōu)選實施例與一種超標量處理器(superscalarprocessor)有關(guān)。一個超標量處理器每時鐘周期取出并向流水線發(fā)布多個——在本例中多達四個——指令。由于并不是所有的處理器元件都與本發(fā)明相關(guān),因此這些元件中的某些元件沒有包括在本發(fā)明的說明中。Popescu等1990年12月5日申請的題為“處理器構(gòu)造(ProcessorArchitecture)”序列號為07/622,893的美國專利申請中對此有所描述。
關(guān)于轉(zhuǎn)移指令的預(yù)測和本發(fā)明,所有轉(zhuǎn)移的執(zhí)行歷史存儲在兩種結(jié)構(gòu)中,一個轉(zhuǎn)移預(yù)測RAM 10和一個處理器中的轉(zhuǎn)移儲層(shelf)20。轉(zhuǎn)移預(yù)測RAM 10存儲直到最老的未決預(yù)測轉(zhuǎn)移,但并不包括這個最老的未決預(yù)測轉(zhuǎn)移本身的全部轉(zhuǎn)移執(zhí)行的歷史。轉(zhuǎn)移儲層20保持是一個未決預(yù)測轉(zhuǎn)移或是在一個未決預(yù)測轉(zhuǎn)移后面的所有轉(zhuǎn)移執(zhí)行的歷史。
在本優(yōu)選實施例中,轉(zhuǎn)移預(yù)測RAM 10是由1K(1024)字構(gòu)成的。為讀取轉(zhuǎn)移預(yù)測RAM 10,處理器的程序計數(shù)器寄存器11經(jīng)過地址總線13用一個值PC給RAM 10編址。PC是處理器中的下一次取出的指令的存儲器地址。轉(zhuǎn)移預(yù)測RAM 10有四個分別連接于輸出線14A-14D的輸出數(shù)據(jù)端口,Dout0-Dout3。通過這四個端口輸出分別位于四個地址PC,PC+1,PC+2和PC+3的指令的轉(zhuǎn)移預(yù)測狀態(tài),以適應(yīng)處理器的超標量性質(zhì)。當然,應(yīng)當理解本發(fā)明同樣適用于簡單標量處理。
轉(zhuǎn)移預(yù)測RAM 10是雙字編址的。即,忽略經(jīng)過地址總線13的最不重要的PC比特。因此,必須從轉(zhuǎn)移預(yù)測RAM 10給兩個連續(xù)的指令——一個為偶數(shù)PC值,另一個為緊接其后的較高的奇數(shù)PC值——賦予相同的預(yù)測歷史。假設(shè)兩個連續(xù)的轉(zhuǎn)移指令極少出現(xiàn),以這種方式,1K深(deep)RAM 10可以存儲達2K的指令的唯一的預(yù)測歷史。
轉(zhuǎn)移預(yù)測RAM 10不是超高速緩沖存儲器。它的內(nèi)容可以或可以不嚴格地反映一個給定轉(zhuǎn)移指令的預(yù)測狀態(tài)。例如,兩個PC值嚴格相差2K倍數(shù)的指令將產(chǎn)生混疊。兩個指令的歷史都將以相同的RAM字存儲,并因此可能引起破壞性的干擾。由于轉(zhuǎn)移預(yù)測RAM 10只是一種預(yù)測機構(gòu),這種情況是允許的;以后將對每個轉(zhuǎn)移預(yù)測進行校驗,如果有錯誤,將對其進行修復(fù)。因此,破壞性的混疊僅在預(yù)測精度上和性能上造成潛在的降低;轉(zhuǎn)移預(yù)測RAM 10的大小是與性能降低相平衡的。
轉(zhuǎn)移儲層20是一種存儲所有推測的轉(zhuǎn)移指令的預(yù)測歷史的12深(deep)的內(nèi)容定址先進先出(FIFO)結(jié)構(gòu)。是一個其正確方向尚不為所知的預(yù)測轉(zhuǎn)移執(zhí)行的,或是跟隨其后的所有的指令執(zhí)行都是推測執(zhí)行。轉(zhuǎn)移儲層20具有一個連接于地址總線13的搜索端口,一個連接于三條線37B,39和40——下面將對它們進行說明——的輸入端口,和一個連接于轉(zhuǎn)移預(yù)測RAM 10的更新端口。
轉(zhuǎn)移儲層20按它們發(fā)布的順序存儲推測的轉(zhuǎn)移執(zhí)行的轉(zhuǎn)移預(yù)測歷史。每個存儲在轉(zhuǎn)移儲層20中的項目具有兩個與本發(fā)明相關(guān)的部分一個條件轉(zhuǎn)移指令的預(yù)測歷史和該指令的地址。在每個時鐘周期當增加項目信號40為真時,即,是邏輯“1”時,經(jīng)過輸入端口把一個新項目加到轉(zhuǎn)移儲層20中。
轉(zhuǎn)移儲層20象個有多個格層的堆棧那樣操作。把每個項目寫入“最底層”的空單元??梢越?jīng)過更新端口把最底層單元移動到轉(zhuǎn)移預(yù)測RAM 10中。更新端口有三條線路一個用于轉(zhuǎn)移轉(zhuǎn)移儲層20的最底層單元中的條件轉(zhuǎn)移指令的預(yù)測歷史數(shù)據(jù)的數(shù)據(jù)總線19A,一個用于轉(zhuǎn)移最底層單元中的條件轉(zhuǎn)移指令的地址的地址總線19B,和一個用于向要執(zhí)行寫入操作的轉(zhuǎn)移預(yù)測RAM 10發(fā)送信號的允寫控制線19C。當發(fā)生這種移動時,所有轉(zhuǎn)移儲層20中的項目向下移動一格。轉(zhuǎn)移修復(fù)包括刪除發(fā)現(xiàn)錯誤預(yù)測的轉(zhuǎn)移執(zhí)行的項目,以及其上方的所有項目。在這種方法中,將轉(zhuǎn)移儲層20中全部有效項目以它們進入的順序從最底層項目起相鄰存儲。
當把一個PC值經(jīng)過地址總線13施加到轉(zhuǎn)移儲層20的搜索端口時,PC,PC+1,PC+2和PC+3地址同時與每個存儲的轉(zhuǎn)移指令地址比較,并且如果增加項目信號為真時,與在輸入端口的地址比較。把這些比較的結(jié)果從轉(zhuǎn)移儲層20的四個數(shù)據(jù)輸出端口,Bout0-Bout3,送出。轉(zhuǎn)移儲層20的每個數(shù)據(jù)輸出端口有兩個部分,并且連接于兩組線路。一組是分別用于每個端口Bout0-Bout3的一比特匹配線22A-22D。另一組是分別用于每個端口Bout0-Bout3的數(shù)據(jù)總線21A-21D,用于每個存儲的轉(zhuǎn)移指令地址的預(yù)測歷史數(shù)據(jù)。當且僅當存在至少一個分別匹配于PC,PC+1,PC+2或PC+3的存儲地址時,在這些輸出端口上的匹配線22A-22D帶有一個邏輯“1”。對于其匹配線22A-22D是邏輯“1”的任何端口,在這個端口的對應(yīng)的預(yù)測歷史數(shù)據(jù)是存儲在最頂層的(最近輸入的)地址匹配的項目中的預(yù)測歷史數(shù)據(jù)(在此把位于輸入端口的值考慮為最頂層)。
匹配線路22A-22D分別連接于并且控制二線一線多路復(fù)用器15A-15D。對于每個具有匹配線22A-22D是邏輯1的數(shù)據(jù)輸出端口Bout0-Bout3,其對應(yīng)的多路復(fù)用器15A-15D選擇來自轉(zhuǎn)移儲層20的數(shù)據(jù)總線21A-21D。選擇來自那個端口的預(yù)測歷史數(shù)據(jù)作為對那個多路復(fù)用器15A-15D的輸出。如果數(shù)據(jù)輸出端口匹配線22A-22D是邏輯“0”,對應(yīng)多路復(fù)用器15A-15D的輸出在總線14A-14D上選擇來自轉(zhuǎn)移預(yù)測RAM 10的對應(yīng)數(shù)據(jù)輸出端口Dout0-Dout3的預(yù)測歷史數(shù)據(jù)。
利用這種安排,四個多路復(fù)用器15A-15D的輸出是對于在PC,PC+1,PC+2和PC+3的任何轉(zhuǎn)移的最近預(yù)測歷史。在任何時刻,如果在PC+i——此處i=0,1,2,3——有轉(zhuǎn)移指令B,那么有兩種可能性沒有B的推測執(zhí)行存在,或是有一個或更多的推測執(zhí)行存在。在前一種場合,來自轉(zhuǎn)移儲層20的對應(yīng)于PC+1的匹配線22A-22D是邏輯“0”,因此多路復(fù)用器15A-15D的輸出來自對應(yīng)數(shù)據(jù)輸出總線14A-14D上的轉(zhuǎn)移預(yù)測RAM 10。來自多路復(fù)用器15A-15D的輸出信號代表上溯至其最近執(zhí)行的——在這種場合是非推測的——轉(zhuǎn)移指令B的歷史。
如果有一個B的推測執(zhí)行,那么來自輸出端口Bout0-Bout3之一的一個匹配線22A-22D載有一個邏輯1信號,并且該端口的預(yù)測歷史輸出是B的最近推測執(zhí)行之后的輸出。由于所有推測執(zhí)行比所有非推測執(zhí)行更為新近,因此這是最新的執(zhí)行,并被對應(yīng)的多路復(fù)用器15A-15D選作輸出。
每個多路復(fù)用器15A-15D的輸出總線是四個相同的預(yù)測模塊16A-16D之一的輸入總線。圖3中所示的每個預(yù)測模塊16A-16D檢驗來自其對應(yīng)多路復(fù)用器15A-15D的預(yù)測歷史數(shù)據(jù),以確定對轉(zhuǎn)移指令的當前執(zhí)行的預(yù)測。預(yù)測歷史數(shù)據(jù)有8比特,包括一個2比特預(yù)測狀態(tài),一個3比特上計數(shù)器值,和一個3比特下計數(shù)器值。預(yù)測歷史數(shù)據(jù)由形成每個多路復(fù)用器15A-15D的輸出總線的八條總線線路攜帶。
每個預(yù)測模塊16A-16D有一個“或非”門23和一個“異或”門24?!盎蚍恰遍T23接收下計數(shù)器的3比特作為輸入,并且連接“或非”門23的輸出作為“異或”門24的一個輸入。至“異或”門24的第二個輸入是意義更為重要的預(yù)測狀態(tài)比特的預(yù)測狀態(tài),狀態(tài)[1]的比特。如圖3所示,次要的比特,狀態(tài)
,以及上計數(shù)器的3比特從預(yù)測模塊16A-16D通過,而沒有連接于“或非”門23和“異或”門24。
可以看到,狀態(tài)機給出的預(yù)測等于最重要的狀態(tài)比特,狀態(tài)[1]。為零的下計數(shù)器值(三個比特全部等于邏輯0)使“或非”門23產(chǎn)生一個輸出邏輯1,該輸出邏輯1接著又使“異或”門24對狀態(tài)[1]的值求補。如果下計數(shù)器為非零,那么“或非”門23有一個邏輯0的輸出,該邏輯0輸出致使“異或”門24輸出狀態(tài)[1]的值。“異或”門24的輸出就是預(yù)測值。
預(yù)測模塊16A-16D的輸出——預(yù)測歷史數(shù)據(jù)的8比特加上對在PC+i,i=0至3,的四個指令中每個的當前預(yù)測——分別連接于一個指令解碼FIFO 25的輸入端口26A-26D。FIFO 25有五個指令深,并且存儲從它們自指令超高速緩沖存儲器(未示出)中取出時直到他們能夠發(fā)布到處理器的流水線的執(zhí)行階段的指令。每個時鐘周期可以在輸入端口26A-26D增加高達四個指令的預(yù)測歷史數(shù)據(jù)。預(yù)測歷史數(shù)據(jù)是按照從最底層空單元遞增的地址增加的。即,通過輸入端口26A——其接收在PC的指令的預(yù)測歷史——的數(shù)據(jù),進入FIFO 25的最底層的空項目。通過輸入端口26B的數(shù)據(jù)進入正好在其上方的項目,等等。
在把指令的預(yù)測歷史提供給輸入端口26A的同時,由總線13通過FIFO 25的一個地址輸入端口30供給指令的地址,PC。指令解碼FIFO 25包含邏輯電路,該邏輯電路將存儲在其內(nèi)的指令與取出該指令的地址結(jié)合在一起。
指令發(fā)布邏輯電路50檢驗在指令解碼FIFO 25中的四個最底層指令。指令發(fā)布邏輯電路50的主要任務(wù)是要剛好在指令可以被“發(fā)布”時,即,在處理器流水線中的后續(xù)階段之前,對指令解碼FIFO 25中的每個指令進行測定。指令發(fā)布邏輯電路必須執(zhí)行的兩個任務(wù)是(1)跟蹤每個發(fā)布的指令的結(jié)果的可用性和位置,和(2)確定指令解碼FIFO25中的每個指令與先前發(fā)布的指令的關(guān)系。如何執(zhí)行這些任務(wù)的具體細節(jié)與本發(fā)明無關(guān)。
當指令發(fā)布邏輯電路向后續(xù)流水線階段發(fā)布指令時,它將那些指令從指令解碼FIFO 25的底層移出。在本優(yōu)選實施例中,一個指令只有當在它“之下”的所有指令也被發(fā)布之后才能發(fā)布;因此本指令解碼FIFO是真正的先進先出。
如果指令解碼FIFO 25包含轉(zhuǎn)移指令,指令發(fā)布邏輯電路50檢驗最底層的這種指令。如果是個無條件執(zhí)行轉(zhuǎn)移,那么指令發(fā)布邏輯電路執(zhí)行兩個特定步驟(1)它遵照轉(zhuǎn)移指令改變程序計數(shù)器寄存器11,以便替換取出指令的序列。(2)它從指令解碼FIFO 25的“頂層”清除那些跟隨在不應(yīng)當執(zhí)行的轉(zhuǎn)移之后的指令。
如果在指令解碼FIFO 25中的最底層轉(zhuǎn)移指令是一個條件轉(zhuǎn)移,那么指令發(fā)布邏輯電路50以上述的方法確定(1)這個轉(zhuǎn)移依賴于先前發(fā)布的一個或一些指令,和(2)那些前面的指令的結(jié)果是否可用,如果可用,那些結(jié)果的值是什么。如果知道了該轉(zhuǎn)移依賴的所有結(jié)果,那么指令發(fā)布邏輯電路50評估它們以確定是否應(yīng)當執(zhí)行或不執(zhí)行該轉(zhuǎn)移指令。如果要執(zhí)行該轉(zhuǎn)移指令,那么指令發(fā)布邏輯電路執(zhí)行上述的兩個步驟,替換程序計數(shù)器寄存器11的步驟,和從指令解碼FIFO 25移出任何隨后的放棄的指令。
如果在指令解碼FIFO 25中的最底層轉(zhuǎn)移指令是一個條件轉(zhuǎn)移,并且它所從屬的結(jié)果是不可用的,那么指令發(fā)布邏輯電路50使用一個預(yù)測來確定該轉(zhuǎn)移的配置。那個預(yù)測是由一個預(yù)測模塊16A-16D產(chǎn)生的,并且是用轉(zhuǎn)移指令經(jīng)過一個輸入端口26A-26D寫入指令解碼FIFO的。如果轉(zhuǎn)移被預(yù)測執(zhí)行,則替換程序計數(shù)寄存器11的內(nèi)容,并且從FIFO 25放棄在該轉(zhuǎn)移之后的指令。
控制轉(zhuǎn)移儲層20的寫入的指令發(fā)布邏輯電路50產(chǎn)生有三個控制信號輸出。在發(fā)布,即從FIFO 25的底層移出,一個條件轉(zhuǎn)移指令的每個時鐘周期的加項目信號40是一個邏輯1。每當加項目信號40是邏輯1時,二比特選擇轉(zhuǎn)移信號35是被發(fā)布的轉(zhuǎn)移指令的FIFO中的標志,和如果執(zhí)行了轉(zhuǎn)移,執(zhí)行信號41是邏輯1,如果轉(zhuǎn)移未執(zhí)行,執(zhí)行信號41是邏輯0。
指令解碼FIFO 25有四個輸出端口Fout0-Fout3,數(shù)據(jù)總線31A-31D和地址總線32A-32D分別連接于四個輸出端口。這些輸出端口Fout0-Fout3中的每個產(chǎn)生兩段信息在數(shù)據(jù)總線31A-31D之一上的一個存儲在FIFO 25中的預(yù)測歷史,和在對應(yīng)的地址總線32A-32D上的相關(guān)的指令地址。這四個輸出端口Fout0-Fout3輸出指令FIFO 25中的最底層的四個項目。
數(shù)據(jù)總線31A-31D和地址總線32A-32D連接于一個多路復(fù)用器36的輸入端,該多路復(fù)用器36有兩個選擇控制線35。指令發(fā)布邏輯電路50在控制線35上產(chǎn)生的選擇轉(zhuǎn)移控制信號是指令解碼FIFO 25的四個輸出中的最老的條件轉(zhuǎn)移——如果有的話——的標志。這個控制信號使多路復(fù)用器36從輸出端口Fout0-Fout3之一中選出那個最老的轉(zhuǎn)移的地址和預(yù)測狀態(tài)信息,分別作為對一個地址總線37B和一個數(shù)據(jù)總線37A的輸出。地址總線37B直接連接于轉(zhuǎn)移儲層20的輸入端口18B。
數(shù)據(jù)總線37A上的預(yù)測狀態(tài)信息傳送到一個更新模塊38。模塊38如下文所述那樣“更新”預(yù)測狀態(tài),并將數(shù)據(jù)送到連接于轉(zhuǎn)移儲層20的輸入端口18A的線路39上。來自指令發(fā)布邏輯電路50的控制線40上的加項目信號使輸入端口18A和18B上的地址和更新的狀態(tài)信息剛好在指令解碼FIFO 25中的一個條件轉(zhuǎn)移指令被發(fā)布時寫入到轉(zhuǎn)移儲層20中。
更新模塊38——它可以在一個隨機邏輯存儲器或只讀型存儲器中使用——產(chǎn)生用于四狀態(tài)轉(zhuǎn)移預(yù)測器和上、下計數(shù)器的新值。如圖1的狀態(tài)圖中所示,計算轉(zhuǎn)移預(yù)測器的新值。輸入到狀態(tài)機的信號是指令發(fā)布邏輯電路50產(chǎn)生的執(zhí)行信號41。如果轉(zhuǎn)移被執(zhí)行,它的值是邏輯1,如果轉(zhuǎn)移未被執(zhí)行,它的值是邏輯0。
圖4顯示了更新模塊38計算用于上、下計數(shù)器的新值的算法。模塊38首先通過步驟101來確定是否已經(jīng)知道預(yù)測的轉(zhuǎn)移方向錯誤的。這需要知道轉(zhuǎn)移所依賴的數(shù)據(jù),和需要由一個預(yù)測模塊16A-16D產(chǎn)生的并且存儲在指令解碼FIFO 25中的預(yù)測的方向不是正確的方向。
如果不知道預(yù)測是錯誤的,沿路徑202進行,并通過步驟102檢驗上計數(shù)器以確定它是否已經(jīng)達到它的最大值。如果是,那么顯然轉(zhuǎn)移游程長度過長而不能用這些計數(shù)器跟蹤。沿路徑203進行,并通過步驟103把下計數(shù)器設(shè)置為最大值(在本發(fā)明的這個實施例中是7)。其結(jié)果是禁止進行轉(zhuǎn)移游程預(yù)測,由于下計數(shù)器將不減值,因此永遠不會達到零。由于上計數(shù)器已經(jīng)達到最大值,因此它保持不變。
如果上計數(shù)器還沒有到達其最大值,那么沿路徑204進行。通過步驟104和105檢驗下計數(shù)器看其是否在最大值,零,或一個中間值。如果計數(shù)器在一個中間值(在步驟104和105之后分別沿路徑205和206進行),這意味著還未禁止對這個轉(zhuǎn)移的轉(zhuǎn)移游程預(yù)測,和該轉(zhuǎn)移游程尚未到達預(yù)測的游程的終點。因此,由于它現(xiàn)在是一個更為接近預(yù)測的游程終點的轉(zhuǎn)移執(zhí)行,下計數(shù)器通過步驟107減1。
如果步驟104確定下計數(shù)器在其最大值,或步驟104和105確定它是一個中間值,那么步驟108使上計數(shù)器增加1。因此當前游程長度總是保持在上計數(shù)器中(直到計數(shù)器到達最大值),即使轉(zhuǎn)移游程預(yù)測器被禁止(在步驟104后沿路徑207進行)。
如果步驟105確定下計數(shù)器是零,那么沿路徑208進行。步驟109為下計數(shù)器重新裝載上計數(shù)器的當前值,并由步驟110把上計數(shù)器重新初始化為零。下計數(shù)器為零表示預(yù)測的游程的終點,即,該第一轉(zhuǎn)移在相反的方向行進。把上計數(shù)器復(fù)制到下計數(shù)器預(yù)示下一個游程與剛剛結(jié)束的游程將有相同的長度。把上計數(shù)器設(shè)置為0預(yù)示在這個相反的轉(zhuǎn)移之后的下一個轉(zhuǎn)移將是新游程中的第一個。因此,一個具有恒定長度(小于最大計數(shù)器值)游程的,被相反方向單一轉(zhuǎn)移隔開的轉(zhuǎn)移,將總是被正確地預(yù)測。
回到步驟101,如果知道轉(zhuǎn)移預(yù)測是錯誤的,沿路徑210進行。步驟111檢測上計數(shù)器以確定它是否在最大值。如果該計數(shù)器已經(jīng)達到最大值,那么剛剛完成的當前游程(如被錯誤預(yù)測指示的)對于計數(shù)器來說太長,但下一個游程可能足夠短。沿路徑211進行,通過步驟112把下計數(shù)器設(shè)置為最大值以禁止轉(zhuǎn)移游程預(yù)測器工作,但步驟110將上計數(shù)器重新初始化為零。
如果步驟111確定上計數(shù)器還沒有到達其最大值,那么沿路徑212進行。步驟113檢驗下計數(shù)器是否為零。如果下計數(shù)器是零,那么當前游程被錯誤地預(yù)測為已經(jīng)結(jié)束,即預(yù)測的長度太短。在這種場合,上計數(shù)器一直計算這個游程的實際長度,并應(yīng)繼續(xù)計數(shù)。流程沿路徑213進行,步驟114將下計數(shù)器設(shè)置為最大值,以防止在當前游程中進行任何預(yù)測,步驟108使上計數(shù)器的值遞增。
如果步驟113確定下計數(shù)器不是零,那么錯誤地預(yù)測了當前游程還尚未結(jié)束;即預(yù)測的長度太長。流程沿路徑216進行。步驟109將保持當前游程實際長度的上計數(shù)器復(fù)制到下計數(shù)器,以預(yù)測下一個游程是同樣長度的游程。接著步驟110把上計數(shù)器重新初始化為零。
圖5顯示了在一個恒定游程長度是3的轉(zhuǎn)移上的轉(zhuǎn)移預(yù)測器的穩(wěn)態(tài)行為。最左邊的列指示轉(zhuǎn)移預(yù)測器的狀態(tài),“上”列指出上計數(shù)器的值,“下”列是下計數(shù)器的值,“預(yù)測”列是來自轉(zhuǎn)移預(yù)測器的預(yù)測比特。最右邊的列顯示了轉(zhuǎn)移的實際方向,其中1表示執(zhí)行的轉(zhuǎn)移,0表示未執(zhí)行的轉(zhuǎn)移(不過顛倒這些值也可獲得同樣的行為)。這一列顯示了一個0后面跟隨著三個1的反復(fù)模式。在這個場合,由于主要的方向是1,所以該四狀態(tài)預(yù)測器總是預(yù)測1。它的預(yù)測是該狀態(tài)的最重要的比特;由于相反的0的游程不長于1,所以只有這個狀態(tài)機的狀態(tài)的最不重要的比特不斷變化。
如圖5的第一行所示,下計數(shù)器是0,上計數(shù)器等于游程的長度,3。下計數(shù)器的零值使得轉(zhuǎn)移預(yù)測器狀態(tài)機給出的預(yù)測——它的預(yù)測是1——要由預(yù)測模塊 16A-16D進行求補。當這個0轉(zhuǎn)移被發(fā)布并寫入轉(zhuǎn)移儲層20中時,更新模塊38,響應(yīng)上計數(shù)器小于最大值和下計數(shù)器是零的事實,在步驟109把上計數(shù)器復(fù)制到下計數(shù)器,并在步驟110把上計數(shù)器復(fù)位為零。
下一次取出這個轉(zhuǎn)移時,從轉(zhuǎn)移儲層20或轉(zhuǎn)移預(yù)測RAM 10讀取圖5的第二行中給出的值。這次預(yù)測模塊16A-16D將看到一個非零下計數(shù)器值,并因此恢復(fù)1的不變更狀態(tài)機預(yù)測。當發(fā)布這個轉(zhuǎn)移時,更新模塊38見到小于最大值的上計數(shù)器,和在零與最大值之間的中間值的下計數(shù)器。因此,該模塊只是在步驟107簡單遞減下計數(shù)器的值,和在步驟108增加上計數(shù)器的值。在下兩次取出和發(fā)布轉(zhuǎn)移時重復(fù)這種相同的行為。如圖5的行5所示,在這個1的游程的終點,下計數(shù)器再次達到零,并因此再次對預(yù)測求補和再初始化計數(shù)器,以便為下一個游程計數(shù)。
圖6顯示了當一個長度為3的游程后面緊跟著一個較短的游程時的行為,在長度為2的場合,它后面又跟隨著一個長度為4的較長的游程。在圖6的行1所示的狀態(tài)中,已經(jīng)正確地預(yù)測了前面的長度為3的游程的終點,如圖5中所示。在假設(shè)下一個游程也是長度3的基礎(chǔ)上重新初始化兩個計數(shù)器(行2)。通過行3和4遞增上計數(shù)器的值和遞減下計數(shù)器的值。在行4中,由于預(yù)測的游程尚未完成,所以預(yù)測仍然是1,但實際方向是0。
在一個后續(xù)的時間,在行4中發(fā)布的轉(zhuǎn)移的正確方向成為已知。轉(zhuǎn)移修復(fù)機構(gòu)放棄該轉(zhuǎn)移和它后面的所有指令的效果。然后將重新取出和再發(fā)布該轉(zhuǎn)移。重新取出的狀態(tài)機和計數(shù)器的值(行4’所示)與它們的原始取出值(行4所示)相同。這是正確的,因為轉(zhuǎn)移修復(fù)機構(gòu)已經(jīng)清除了包括對轉(zhuǎn)移儲層20的任何修改在內(nèi)的原始發(fā)布的效果;由于該轉(zhuǎn)移尚未被分辨,所以那些修改決不會寫入轉(zhuǎn)移預(yù)測RAM10中。
當修復(fù)后再發(fā)布轉(zhuǎn)移時,更新模塊38把再次成為1的預(yù)測與已知的0的正確方向相比較,以確定預(yù)測是錯誤的。在步驟101后沿路徑210進行。由于上計數(shù)器小于最大值和下計數(shù)器不為零,更新模塊38把上計數(shù)器值復(fù)制到下計數(shù)器,并把上計數(shù)器復(fù)位到0,如圖6的行5所示。因此設(shè)定轉(zhuǎn)移游程預(yù)測器以預(yù)測下一個游程應(yīng)當是長度2。
上和下計數(shù)器計算出在行6和7中的一個預(yù)測為2的游程長度。由于下計數(shù)器是零,因此預(yù)測出在行7中發(fā)布的轉(zhuǎn)移是游程的終點。因而預(yù)測被改變?yōu)?。以后發(fā)現(xiàn)這是一個不正確的預(yù)測,因此用與預(yù)測器相同的值再發(fā)布轉(zhuǎn)移,如行7’所示。這次更新模塊38在步驟101確定預(yù)測是錯誤的,并再次沿路徑210進行。當步驟111確定上計數(shù)器不是最大值后,后續(xù)的步驟113確定下計數(shù)器是零。在這種場合,仍然不知道游程的實際長度,所以不能預(yù)測其終點。因此,步驟114把下計數(shù)器設(shè)置為最大值,以防止任何預(yù)測游程終點的企圖。步驟108繼續(xù)遞增上計數(shù)器的值,以計算當前游程的長度。
由于下計數(shù)器被禁止,行8和9中的預(yù)測是直接從狀態(tài)機預(yù)測器取得的。在行9中發(fā)布的轉(zhuǎn)移預(yù)測是1,但發(fā)現(xiàn)是0,這指示一個長度為4的游程的終點(行5,6,7和8)。當再發(fā)布這個轉(zhuǎn)移時(行9’),在步驟101更新模塊38再次確定預(yù)測是錯誤的。在步驟111和路徑212之后,步驟113確定下計數(shù)器不是零,因此步驟109把上計數(shù)器復(fù)制到下計數(shù)器,和步驟110重新將上計數(shù)器初始化為零。因此,在行10,設(shè)置轉(zhuǎn)移游程預(yù)測器以預(yù)測下一個游程將是長度4。
如果沒有轉(zhuǎn)移游程預(yù)測器,圖6中所示的例子中的所有轉(zhuǎn)移都會被預(yù)測為1。因此,行4和9中的轉(zhuǎn)移會被不正確地預(yù)測,但行7中的轉(zhuǎn)移會被正確地預(yù)測。也就是說,每當一個比7短的游程后面跟隨著一個較長的游程時,產(chǎn)生一個額外的轉(zhuǎn)移修復(fù)。當一個長度為7或比7小的長度的游程后面跟隨著一個較短的游程時,如行4中的例子,有或沒有轉(zhuǎn)移游程預(yù)測器都會發(fā)生一個修復(fù)。每當一個短的游程后面跟隨著一個同樣長度的游程時,轉(zhuǎn)移游程預(yù)測器避開一個轉(zhuǎn)移修復(fù)。
通過利用本發(fā)明,可以顯著地改善對于恒定或緩變游程長度的轉(zhuǎn)移的轉(zhuǎn)移預(yù)測速率。速變游程長度的轉(zhuǎn)移可能有較壞的性能,這取決于游程長度的恰當分布。
盡管以上是對本發(fā)明的優(yōu)選實施例的完整的說明,但也可以使用各種不同的替代,更改和等同物。顯而易見,通過對上述實施例進行適當?shù)男薷?,本發(fā)明也同樣適用。因此,上述的說明不應(yīng)限制權(quán)利要求所定義的本發(fā)明的范圍。
權(quán)利要求
1.一種在計算機中預(yù)測條件轉(zhuǎn)移指令方向的方法,包括確定達到預(yù)定限度的所述轉(zhuǎn)移指令的第一游程的長度;計算所述條件轉(zhuǎn)移指令的下一個游程的長度;和預(yù)測假設(shè)所述下一個游程長度與所述第一游程長度相同,除非所述下一個游程長度在等于所述第一游程長度之前結(jié)束或超過所述第一游程長度;如果所述下一個游程長度超過所述第一游程長度,那么預(yù)測所述下一個游程長度無限地繼續(xù);和由此提高了正確地預(yù)測的條件轉(zhuǎn)移指令的發(fā)生率。
2.根據(jù)權(quán)利要求1所述的方法,還包括如果所述下一個游程長度在等于所述第一游程長度之前結(jié)束,那么確定所述轉(zhuǎn)移指令的所述下一個游程的長度;計算跟隨在所述下一個游程之后的所述條件轉(zhuǎn)移指令的游程長度;和預(yù)測所述跟隨在所述下一個游程長度之后的游程與所述下一個游程長度相同,除非所述跟隨在所述下一個游程之后的所述游程在等于所述下一個游程長度之前結(jié)束或超過所述下一個游程長度。
3.一種在計算機中預(yù)測條件轉(zhuǎn)移指令方向的方法,包括確定達到預(yù)定包括七個限度的所述轉(zhuǎn)移指令的第一游程的長度;計算所述條件轉(zhuǎn)移指令的下一個游程的長度;和預(yù)測假設(shè)所述下一個游程長度與所述第一游程長度相同,除非所述下一個游程長度在等于所述第一游程長度之前結(jié)束或超過所述第一游程長度;由此提高了正確地預(yù)測的條件轉(zhuǎn)移指令的發(fā)生率。
4.一種在計算機系統(tǒng)中預(yù)測控制轉(zhuǎn)移指令的條件的結(jié)果的方法,包括確定所述控制條件在轉(zhuǎn)變?yōu)榈诙顟B(tài)前處于第一狀態(tài)的有限的次數(shù);和預(yù)測在轉(zhuǎn)變?yōu)樗龅诙顟B(tài)之前所述控制條件保留在所述第一狀態(tài)相同的次數(shù);根據(jù)所述預(yù)測步驟執(zhí)行所述轉(zhuǎn)移指令,包括根據(jù)所述控制條件的所述次數(shù)的第一狀態(tài)執(zhí)行所述轉(zhuǎn)移指令;和根據(jù)所述控制條件的所述第二狀態(tài)不執(zhí)行所述轉(zhuǎn)移指令。
5.根據(jù)權(quán)利要求4所述的方法,其中所述的確定步驟包括維持所述條件轉(zhuǎn)移指令的當前游程長度的第一計數(shù);和維持響應(yīng)于所述第一計數(shù)和所述條件轉(zhuǎn)移指令的最近完成的游程長度的第二計數(shù)。
6.根據(jù)權(quán)利要求5所述的方法,其中所述第一計數(shù)是通過在每次正確地執(zhí)行了所述推測的轉(zhuǎn)移指令時遞增所述第一計數(shù)而保留的。
7.根據(jù)權(quán)利要求5所述的方法,其中所述第二計數(shù)是通過在每次正確地執(zhí)行了所述條件轉(zhuǎn)移時,遞減所述最近完成的游程長度的計數(shù)而保留的。
8.根據(jù)權(quán)利要求4所述的方法,其中所述確定步驟包括通過在每次正確地執(zhí)行了所述推測的轉(zhuǎn)移指令時遞增所述第一計數(shù)維持所述推測的轉(zhuǎn)移指令的當前游程長度的第一計數(shù);和通過在每次正確地執(zhí)行了所述條件轉(zhuǎn)移指令時遞減最近完成的所述條件轉(zhuǎn)移指令的游程長度的計數(shù)保留響應(yīng)于所述第一計數(shù)和所述最近完成的所述條件轉(zhuǎn)移指令的游程長度的第二計數(shù);其中所述第二狀態(tài)執(zhí)行步驟是在所述第二計數(shù)達到零時進行的。
9.根據(jù)權(quán)利要求8所述的方法,其中所述的預(yù)測步驟還包括如果當錯誤地預(yù)測了所述執(zhí)行的轉(zhuǎn)移指令時所述當前游程長度超過了預(yù)定的限度,重新開始所述第一計數(shù);和把所述第二計數(shù)設(shè)置為用于所述條件轉(zhuǎn)移指令的所述最近完成的游程長度的所述先前第一計數(shù)。
10.根據(jù)權(quán)利要求8所述的方法還包括如果所述當前游程長度短于所述最近完成的游程長度,把用于所述條件轉(zhuǎn)移指令的所述最近完成的游程長度的所述第一計數(shù)復(fù)制為所述第二計數(shù);和重新開始所述第一計數(shù)。
11.根據(jù)權(quán)利要求4所述的方法,其中所述的預(yù)測步驟包括如果所述控制條件保持在所述第一狀態(tài)超過了所述限定的次數(shù),預(yù)測所述控制條件保持在所述第一狀態(tài)。
12.根據(jù)權(quán)利要求4所述的方法,其中在所述的確定步驟中的次數(shù)被限定為七次。
全文摘要
本發(fā)明提供了一種可以提高正確地預(yù)測一個條件轉(zhuǎn)移指令的方向的可能性的轉(zhuǎn)移預(yù)測技術(shù)。本技術(shù)基于觀察到許多轉(zhuǎn)移都具有恒定的或緩變的游程長度,即幾個連續(xù)的1的游程的長度是相同的這種事實。本技術(shù)利用每個轉(zhuǎn)移的存儲歷史,兩個小計數(shù)器(102,113),一個上計數(shù)器(102)和一個下計數(shù)器(113)增強了該歷史。為了很準確的預(yù)測,這兩個計數(shù)器(102,113)與一個現(xiàn)有技術(shù)的狀態(tài)機轉(zhuǎn)移預(yù)測器(101)協(xié)同操作。
文檔編號G06F9/38GK1619488SQ20031012429
公開日2005年5月25日 申請日期1995年11月20日 優(yōu)先權(quán)日1994年12月2日
發(fā)明者戴維·L·伊薩曼 申請人:現(xiàn)代電子美國公司, 美塔福路技術(shù)公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1