国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

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

      文檔序號:80474閱讀:550來源:國知局
      專利名稱:有限游程轉(zhuǎn)移預(yù)測方法
      發(fā)明領(lǐng)域本發(fā)明一般涉及流水線計算機系統(tǒng),特別涉及一種計算機系統(tǒng)所采用的用于預(yù)測條件轉(zhuǎn)移指令的方向的轉(zhuǎn)移預(yù)測方法。
      背景技術(shù)
      執(zhí)行條件轉(zhuǎn)移所需的時間嚴(yán)重地限制了流水線處理器的性能。處理器一般是以順序方式取出和執(zhí)行指令的;即,在從地址n取出的指令Ei之后立即執(zhí)行的指令Ei+1(Ei的后繼指令)的地址是通過把Ei的長度加n而找到的。無條件轉(zhuǎn)移是一個其執(zhí)行使得控制轉(zhuǎn)移到一個位于非順序地址的指令的指令。因此一個轉(zhuǎn)移B的后繼者是從一個任意目標(biāo)地址取出的。在一些計算機中,轉(zhuǎn)移指令B的目標(biāo)地址包含在該指令中,而在其它的計算機中目標(biāo)地址是由包含在指令B中的補償值加上指令B本身的取出地址形成的。
      根據(jù)對一些數(shù)據(jù)段的測試,一個條件轉(zhuǎn)移指令有條件地造成一個控制的轉(zhuǎn)移。與目標(biāo)地址的說明一起,這樣一個指令包含一個待測試的條件。這個條件一般是一個數(shù)的一小組代數(shù)特性之一該數(shù)是或不是零,該數(shù)是或不是正的,該數(shù)是或不是負(fù)的,等等。如果滿足了條件,則進行轉(zhuǎn)移即,從轉(zhuǎn)移的目標(biāo)地址取出后繼指令。如果條件不滿足,則后繼指令是按順序的下一個指令,就象非轉(zhuǎn)移指令一樣。
      流水線計算機通過一個由數(shù)個處理階段——一般至少五個——構(gòu)成的流水線傳遞每個指令。在每個時鐘周期中可以把一條新的指令輸入到流水線中。結(jié)果,一臺流水線計算機可以同時具有在不同執(zhí)行階段的幾個指令,因此在每個階段最大地利用了硬件資源。
      當(dāng)轉(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)移,則需要確認(rèn)該預(yù)測,并且需要收回錯誤的預(yù)測。如果預(yù)測是不正確的,那么在錯誤地預(yù)測的(“壞的”)轉(zhuǎn)移之后取出的所有指令都是錯誤的指令,因此必須逆向恢復(fù)它們的執(zhí)行結(jié)果。記錄,確認(rèn)和修正預(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)移是相當(dāng)頻繁的(其密度達到每五個指令就有一個),因此如果不使用很大的存儲容量,對每個條件轉(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ù)器計算當(dāng)前游程的長度。如果游程在計數(shù)器溢出之前終止,該上計數(shù)器的值被復(fù)制到下計數(shù)器中,并把上計數(shù)器重新初始化為零。然后下計數(shù)器在接下來的游程中遞減計數(shù)。在下計數(shù)器達到零之前,使用的預(yù)測是狀態(tài)機作出的。在下計數(shù)器為零的第一執(zhí)行時,對狀態(tài)機的預(yù)測進行求補。如果當(dāng)前游程的長度與前面的游程的長度相等,那么預(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ā)布。只有當(dāng)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ù)遞增,以計算出正確的較長的長度,并且當(dāng)知道不能正確地預(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)選實施例與一種超標(biāo)量處理器(superscalarprocessor)有關(guān)。一個超標(biāo)量處理器每時鐘周期取出并向流水線發(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)處理器的超標(biāo)量性質(zhì)。當(dāng)然,應(yīng)當(dāng)理解本發(fā)明同樣適用于簡單標(biāo)量處理。
      轉(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)容可以或可以不嚴(yán)格地反映一個給定轉(zhuǎn)移指令的預(yù)測狀態(tài)。例如,兩個PC值嚴(yán)格相差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ù)測歷史和該指令的地址。在每個時鐘周期當(dāng)增加項目信號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。當(dāng)發(fā)生這種移動時,所有轉(zhuǎn)移儲層20中的項目向下移動一格。轉(zhuǎn)移修復(fù)包括刪除發(fā)現(xiàn)錯誤預(yù)測的轉(zhuǎn)移執(zhí)行的項目,以及其上方的所有項目。在這種方法中,將轉(zhuǎn)移儲層20中全部有效項目以它們進入的順序從最底層項目起相鄰存儲。
      當(dāng)把一個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ù)。當(dāng)且僅當(dāng)存在至少一個分別匹配于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)移指令的當(dāng)前執(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)[0],以及上計數(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]的值?!爱惢颉遍T24的輸出就是預(yù)測值。
      預(yù)測模塊16A-16D的輸出——預(yù)測歷史數(shù)據(jù)的8比特加上對在PC+i,i=0至3,的四個指令中每個的當(dāng)前預(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ù)的具體細(xì)節(jié)與本發(fā)明無關(guān)。
      當(dāng)指令發(fā)布邏輯電路向后續(xù)流水線階段發(fā)布指令時,它將那些指令從指令解碼FIFO 25的底層移出。在本優(yōu)選實施例中,一個指令只有當(dāng)在它“之下”的所有指令也被發(fā)布之后才能發(fā)布;因此本指令解碼FIFO是真正的先進先出。
      如果指令解碼FIFO 25包含轉(zhuǎn)移指令,指令發(fā)布邏輯電路50檢驗最底層的這種指令。如果是個無條件執(zhí)行轉(zhuǎn)移,那么指令發(fā)布邏輯電路執(zhí)行兩個特定步驟(1)它遵照轉(zhuǎn)移指令改變程序計數(shù)器寄存器11,以便替換取出指令的序列。(2)它從指令解碼FIFO 25的“頂層”清除那些跟隨在不應(yīng)當(dā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)當(dā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。每當(dāng)加項目信號40是邏輯1時,二比特選擇轉(zhuǎn)移信號35是被發(fā)布的轉(zhuǎn)移指令的FIFO中的標(biāo)志,和如果執(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)移——如果有的話——的標(biāo)志。這個控制信號使多路復(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ù)器將不減值,因此永遠(yuǎn)不會達到零。由于上計數(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。因此當(dāng)前游程長度總是保持在上計數(shù)器中(直到計數(shù)器到達最大值),即使轉(zhuǎn)移游程預(yù)測器被禁止(在步驟104后沿路徑207進行)。
      如果步驟105確定下計數(shù)器是零,那么沿路徑208進行。步驟109為下計數(shù)器重新裝載上計數(shù)器的當(dāng)前值,并由步驟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)達到最大值,那么剛剛完成的當(dāng)前游程(如被錯誤預(yù)測指示的)對于計數(shù)器來說太長,但下一個游程可能足夠短。沿路徑211進行,通過步驟112把下計數(shù)器設(shè)置為最大值以禁止轉(zhuǎn)移游程預(yù)測器工作,但步驟110將上計數(shù)器重新初始化為零。
      如果步驟111確定上計數(shù)器還沒有到達其最大值,那么沿路徑212進行。步驟113檢驗下計數(shù)器是否為零。如果下計數(shù)器是零,那么當(dāng)前游程被錯誤地預(yù)測為已經(jīng)結(jié)束,即預(yù)測的長度太短。在這種場合,上計數(shù)器一直計算這個游程的實際長度,并應(yīng)繼續(xù)計數(shù)。流程沿路徑213進行,步驟114將下計數(shù)器設(shè)置為最大值,以防止在當(dāng)前游程中進行任何預(yù)測,步驟108使上計數(shù)器的值遞增。
      如果步驟113確定下計數(shù)器不是零,那么錯誤地預(yù)測了當(dāng)前游程還尚未結(jié)束;即預(yù)測的長度太長。流程沿路徑216進行。步驟109將保持當(dāng)前游程實際長度的上計數(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進行求補。當(dāng)這個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ù)測。當(dāng)發(fā)布這個轉(zhuǎn)移時,更新模塊38見到小于最大值的上計數(shù)器,和在零與最大值之間的中間值的下計數(shù)器。因此,該模塊只是在步驟107簡單遞減下計數(shù)器的值,和在步驟108增加上計數(shù)器的值。在下兩次取出和發(fā)布轉(zhuǎn)移時重復(fù)這種相同的行為。如圖5的行5所示,在這個1的游程的終點,下計數(shù)器再次達到零,并因此再次對預(yù)測求補和再初始化計數(shù)器,以便為下一個游程計數(shù)。
      圖6顯示了當(dāng)一個長度為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中。
      當(dāng)修復(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)當(dā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進行。當(dāng)步驟111確定上計數(shù)器不是最大值后,后續(xù)的步驟113確定下計數(shù)器是零。在這種場合,仍然不知道游程的實際長度,所以不能預(yù)測其終點。因此,步驟114把下計數(shù)器設(shè)置為最大值,以防止任何預(yù)測游程終點的企圖。步驟108繼續(xù)遞增上計數(shù)器的值,以計算當(dāng)前游程的長度。
      由于下計數(shù)器被禁止,行8和9中的預(yù)測是直接從狀態(tài)機預(yù)測器取得的。在行9中發(fā)布的轉(zhuǎn)移預(yù)測是1,但發(fā)現(xiàn)是0,這指示一個長度為4的游程的終點(行5,6,7和8)。當(dāng)再發(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ù)測。也就是說,每當(dāng)一個比7短的游程后面跟隨著一個較長的游程時,產(chǎn)生一個額外的轉(zhuǎn)移修復(fù)。當(dāng)一個長度為7或比7小的長度的游程后面跟隨著一個較短的游程時,如行4中的例子,有或沒有轉(zhuǎn)移游程預(yù)測器都會發(fā)生一個修復(fù)。每當(dāng)一個短的游程后面跟隨著一個同樣長度的游程時,轉(zhuǎn)移游程預(yù)測器避開一個轉(zhuǎn)移修復(fù)。
      通過利用本發(fā)明,可以顯著地改善對于恒定或緩變游程長度的轉(zhuǎn)移的轉(zhuǎn)移預(yù)測速率。速變游程長度的轉(zhuǎn)移可能有較壞的性能,這取決于游程長度的恰當(dāng)分布。
      盡管以上是對本發(fā)明的優(yōu)選實施例的完整的說明,但也可以使用各種不同的替代,更改和等同物。顯而易見,通過對上述實施例進行適當(dāng)?shù)男薷?,本發(fā)明也同樣適用。因此,上述的說明不應(yīng)限制權(quán)利要求
      所定義的本發(fā)明的范圍。
      權(quán)利要求
      1.一種操作計算機系統(tǒng)從指令存儲器取出在計算機系統(tǒng)中執(zhí)行的指令序列的方法,所述序列包括無條件和條件控制轉(zhuǎn)移指令,所述方法包括在每個時鐘周期中,從所述的指令存儲器在程序計數(shù)器中的地址讀取至少一個指令;把來自所述的指令存儲器中的每個轉(zhuǎn)移指令分類為無條件的,條件的且已知被執(zhí)行的,條件的且已知不被執(zhí)行的,推測的;通過在轉(zhuǎn)變?yōu)榱硪粋€狀態(tài)之前計算保留在一個狀態(tài)中的推測的轉(zhuǎn)移指令的控制條件的次數(shù),在所述序列中為每個推測的轉(zhuǎn)移指令預(yù)測等于比所述控制條件游程長度大的最新游程長度的游程長度,以確定所述的推測的轉(zhuǎn)移指令的游程長度達到了預(yù)定的數(shù)值;如果存在對應(yīng)所述的預(yù)測步驟被分為無條件的,已知被執(zhí)行的,或是預(yù)測被執(zhí)行的第一轉(zhuǎn)移指令的指示,則為隨后的時鐘周期的讀取步驟替換所述程序計數(shù)器;由此如果所述的條件顯示一種一致的循環(huán)行為,所述的操作方法正確地預(yù)測控制存儲在所述指令存儲器中的條件轉(zhuǎn)移的控制條件。
      2.根據(jù)權(quán)利要求
      1所述的操作方法,其中所述預(yù)測步驟用于預(yù)測,當(dāng)所述推測的條件轉(zhuǎn)移指令的當(dāng)前游程長度等于或超過所述預(yù)定數(shù)值時,控制推測的轉(zhuǎn)移指令的條件對于所述推測的轉(zhuǎn)移指令的最后兩次或更多次數(shù)的取出操作是相同的。
      3.根據(jù)權(quán)利要求
      1所述的操作方法,其中所述程序計數(shù)器執(zhí)行的計數(shù)子步驟包括從所述推測的轉(zhuǎn)移指令的具有條件的從指令存儲器的最后取出起計算它的取出次數(shù),該最后取出具有的條件是一個已知或預(yù)測為是對于所述的推測的轉(zhuǎn)移指令的最后兩次或更多次的連續(xù)取出保持不變的條件求補的條件。
      4.根據(jù)權(quán)利要求
      3所述的操作方法,其中所述預(yù)測步驟包括從所述推測的轉(zhuǎn)移指令的具有條件的從指令存儲器的最后取出起存儲它的取出次數(shù),該最后取出具有的條件是一個已知或預(yù)測為是對于所述推測的轉(zhuǎn)移指令的最后兩次或更多次的取出保持不變的條件求補的條件。
      5.根據(jù)權(quán)利要求
      4所述的操作方法,其中所述預(yù)測步驟包括把以前的游程長度與所述推測的轉(zhuǎn)移指令的當(dāng)前取出次數(shù)進行比較,并假設(shè)所述控制條件對于所述推測的轉(zhuǎn)移指令的最后兩次或更多次的取出是相同的,除非所述以前的游程長度等于所述當(dāng)前取出次數(shù)。
      6.根據(jù)權(quán)利要求
      5所述的操作方法,其中所述預(yù)測步驟包括確定所述以前的游程長度是否等于或超過預(yù)定數(shù)值。
      7.根據(jù)權(quán)利要求
      6所述的操作方法,其中所述假設(shè)子步驟假設(shè)所述控制條件對于所述推測的轉(zhuǎn)移指令的最后兩次或更多次的取出是相同的,除非所述以前的游程長度小于所述預(yù)定數(shù)值和等于所述當(dāng)前取出次數(shù)。
      8.根據(jù)權(quán)利要求
      1所述的操作方法,其中所述預(yù)測步驟包括使第一二進制計數(shù)器與每個條件轉(zhuǎn)移指令相關(guān);當(dāng)取出條件轉(zhuǎn)移指令時,如果所述轉(zhuǎn)移指令不是所述轉(zhuǎn)移指令的再取出并且已知或被預(yù)測為具有對于所述轉(zhuǎn)移指令的最靠近的前面的取出控制條件的求補控制條件,或者是再取出并且已經(jīng)被預(yù)測具有與所述轉(zhuǎn)移指令的最靠近的前面的取出控制條件相同的控制條件,初始化相關(guān)的計數(shù)器;和如果所述計數(shù)器的值沒有達到預(yù)定的最大計數(shù),在所述轉(zhuǎn)移指令的每次后續(xù)取出把所述計數(shù)器增1。
      9.根據(jù)權(quán)利要求
      8所述的操作方法,其中所述預(yù)測步驟還包括使第二二進制計數(shù)器與每個條件轉(zhuǎn)移指令相關(guān),所述第二計數(shù)器的最大計數(shù)與所述第一二進制計數(shù)器相同;當(dāng)且僅當(dāng)所述第二計數(shù)器保持零計數(shù)時,預(yù)測相關(guān)的轉(zhuǎn)移指令的所述控制條件是對于所述轉(zhuǎn)移指令的最靠近的前面的取出控制條件的求補條件;和響應(yīng)所述取出操作是由于所述轉(zhuǎn)移指令的較早取出的不正確預(yù)測而必需的再取出操作時,在所述轉(zhuǎn)移指令的每次取出操作時修改所述第二二進制計數(shù)器。
      10.根據(jù)權(quán)利要求
      9所述的操作方法,其中如果所述轉(zhuǎn)移指令的取出操作不是所述轉(zhuǎn)移指令的再取出操作,對所述第二二進制計數(shù)器修改的步驟還包括如果第一二進制計數(shù)器保持在所述最大計數(shù),設(shè)置所述第二二進制計數(shù)器為所述最大計數(shù);否則如果第二二進制計數(shù)器不是保持一個零計數(shù),則將所述第二二進制計數(shù)器的值減1;和如果所述第二二進制計數(shù)器保持一個零計數(shù),把第一二進制計數(shù)器中的計數(shù)復(fù)制到所述第二二進制計數(shù)器中。
      11.根據(jù)權(quán)利要求
      9所述的操作方法,其中如果所述轉(zhuǎn)移指令的取出操作是所述轉(zhuǎn)移指令的再取出操作,對所述第二二進制計數(shù)器修改的步驟還包括如果所述轉(zhuǎn)移指令的較早的取出操作的控制條件沒有被預(yù)測為是對所述條件轉(zhuǎn)移指令的最后兩次或更多次的取出保持不變的控制條件的求補控制條件,則將所述第一二進制計數(shù)器中的在較早取出時的計數(shù)復(fù)制到第二二進制計數(shù)器中;和如果所述轉(zhuǎn)移指令的較早的取出操作的控制條件已經(jīng)被預(yù)測為是對所述條件轉(zhuǎn)移指令的最后兩次或更多次的取出保持不變的控制條件的求補控制條件,則將所述第二二進制計數(shù)器設(shè)置為所述最大計數(shù)。
      12.根據(jù)權(quán)利要求
      11所述的操作方法,其中所述預(yù)測步驟包括恢復(fù)對于條件轉(zhuǎn)移指令的最后兩次或更多次數(shù)的取出保持不變的所述轉(zhuǎn)移指令的控制條件,和在所述第一和第二二進制計數(shù)器中的,用于最靠近正被再取出的所述轉(zhuǎn)移指令的取出之前的所述轉(zhuǎn)移指令的計數(shù)。
      13.根據(jù)權(quán)利要求
      12所述的操作方法,其中所述預(yù)測步驟包括在所述轉(zhuǎn)移指令每次被取出時,存儲對于條件轉(zhuǎn)移指令的最后兩次或更多次的取出操作保持不變的所述轉(zhuǎn)移指令的控制條件,存儲在所述第一和第二二進制計數(shù)器中的用于所述轉(zhuǎn)移指令的取出操作的計數(shù),和存儲所述轉(zhuǎn)移指令的指令存儲器地址。
      14.根據(jù)權(quán)利要求
      1所述的操作方法,其中所述的預(yù)定數(shù)值由七個組成。
      專利摘要
      本發(fā)明提供了一種可以提高正確地預(yù)測一個條件轉(zhuǎn)移指令的方向的可能性的轉(zhuǎn)移預(yù)測技術(shù)。本技術(shù)基于觀察到許多轉(zhuǎn)移都具有恒定的或緩變的游程長度,即幾個連續(xù)的1的游程的長度是相同的這種事實。本技術(shù)利用每個轉(zhuǎn)移的存儲歷史,兩個小計數(shù)器(102,113),一個上計數(shù)器(102)和一個下計數(shù)器(113)增強了該歷史。為了很準(zhǔn)確的預(yù)測,這兩個計數(shù)器(102,113)與一個現(xiàn)有技術(shù)的狀態(tài)機轉(zhuǎn)移預(yù)測器(101)協(xié)同操作。
      文檔編號G06F9/38GKCN1159648SQ95196554
      公開日2004年7月28日 申請日期1995年11月20日
      發(fā)明者戴維·L·伊薩曼, 戴維 L 伊薩曼 申請人:現(xiàn)代電子美國公司, 美塔福路技術(shù)公司導(dǎo)出引文BiBTeX, EndNote, RefMan
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1