專利名稱::根據(jù)未命中距離將數(shù)據(jù)預(yù)取到高速緩存器中的系統(tǒng)和方法
技術(shù)領(lǐng)域:
:本發(fā)明的實施例涉及從存儲器中預(yù)取數(shù)據(jù)。具體的,本發(fā)明涉及從存儲器預(yù)取數(shù)據(jù)以供處理器使用的方法和裝置。背景由處理器執(zhí)行的指令經(jīng)常使用存儲在例如隨機存取存儲器(RAM)等存儲器件中的數(shù)據(jù)。例如,處理器可能執(zhí)行LOAD(加載)指令將存儲在特定存儲器地址中的數(shù)據(jù)加載到寄存器中。在許多系統(tǒng)中,因為系統(tǒng)存儲器的存取時間相對較慢,所以頻繁使用的數(shù)據(jù)元素要從系統(tǒng)存儲器中拷貝到稱作高速緩存器的較快速的存儲器件中,并且只要有可能,處理器在需要存取(即,讀入或?qū)懗?所述數(shù)據(jù)元素時,就可以使用在高速緩存器中的數(shù)據(jù)元素的拷貝。如果被指令訪問的存儲單元還沒有拷貝到高速緩存器中,則指令對存儲單元的訪問會引起“高速緩存器未命中(cachemiss)”,因為所需的數(shù)據(jù)不能從高速緩存器中獲得。如果最小化高速緩存器未命中的數(shù)量,則計算機系統(tǒng)的操作更加有效。一種減少等待訪問RAM所花費的時間的方法是在需要數(shù)據(jù)之前,即,在高速緩存器未命中發(fā)生之前從RAM存儲器中“預(yù)取”該數(shù)據(jù)。許多處理器具有這樣的指令周期,在該指令周期中,在一步中從存儲器中獲得要執(zhí)行的指令(即,取指令),并在另一步中執(zhí)行。如果要執(zhí)行的指令訪問存儲單元(例如,存儲器LOAD),則在所述單元的數(shù)據(jù)必須從高速緩存器,或者如果高速緩存器未命中,從系統(tǒng)存儲器中取出放在處理器的適當(dāng)部分。高速緩存器預(yù)取器(prefetcher)嘗試預(yù)測隨后指令將訪問哪些數(shù)據(jù)地址,并在需要數(shù)據(jù)之前從存儲器中預(yù)取要訪問的數(shù)據(jù)。該預(yù)取的數(shù)據(jù)可以存儲在高速緩存器或緩沖器中,以供以后的使用?,F(xiàn)有的預(yù)取方案確定例如LOAD的存儲器指令的“步幅(strid)”,然后用該步幅預(yù)取數(shù)據(jù)。在程序中指令的步幅可以定義為兩個連續(xù)執(zhí)行的指令加載的存儲器地址之間的距離。如這里所用的,“指令”是指在程序中的指令的特定實例,每個指令由不同的指令指針(“IP”)值標(biāo)識?;诓椒念A(yù)取方案的理論前提是,指令將訪問一系列彼此間隔相同距離的存儲單元。如果,例如,程序處在循環(huán)或嵌套循環(huán)中,或者步進通過表時(steppingthoughatable),該預(yù)測經(jīng)常是準(zhǔn)確的。附圖介紹圖1是根據(jù)本發(fā)明實施例的具有預(yù)取器的計算機系統(tǒng)的局部框圖。圖2是根據(jù)本發(fā)明實施例的存儲器和高速緩存器中的一系列地址的局部框圖。圖3是根據(jù)本發(fā)明實施例的臨界未命中預(yù)取表的局部框圖。圖4是根據(jù)本發(fā)明實施例管理數(shù)據(jù)預(yù)取的方法的流程圖。圖5是根據(jù)本發(fā)明另一個實施例的單次未命中表和臨界未命中預(yù)取表的局部框圖。圖6是根據(jù)本發(fā)明另一個實施例的具有臨界未命中預(yù)取器的計算機系統(tǒng)的局部框圖。圖7是根據(jù)本發(fā)明另一個實施例的前端表和后端表的局部框圖。圖8是根據(jù)本發(fā)明另一個實施例的具有預(yù)取器的計算機系統(tǒng)的局部框圖。詳細(xì)介紹本發(fā)明的實施例涉及這樣的預(yù)取器,所述預(yù)取器根據(jù)由指令引起的高速緩存器未命中之間的距離為指令預(yù)取數(shù)據(jù)。在實施例中,預(yù)取器建立記錄指令的連續(xù)高速緩存器未命中之間的距離的預(yù)取表。該距離是高速緩存器未命中的步幅,并且可以稱作指令的“未命中距離”。如果指令的未命中距離以某種模式出現(xiàn),則根據(jù)該模式出現(xiàn)的未命中可以稱作“臨界高速緩存器未命中”。在指令引發(fā)“當(dāng)前高速緩存器未命中”之后,本實施例的預(yù)取器可以請求預(yù)取位于與造成當(dāng)前高速緩存器未命中的數(shù)據(jù)地址距離為未命中距離的數(shù)據(jù)。然后,該數(shù)據(jù)成為將來可用的。未命中距離可以存儲在臨界高速緩存器未命中預(yù)取表中。所介紹的臨界高速緩存器未命中的管理策略能夠使用比以前的預(yù)取器中的更小的表尺寸,同時保持以前預(yù)取機構(gòu)的大部分的性能優(yōu)點。因為臨界高速緩存器未命中預(yù)取器不保存通常不會引起未命中的LOAD指令的地址和步幅,所以可以實現(xiàn)這些高效的結(jié)果。此外,預(yù)取器不需要檢查即使在步幅內(nèi)通常也不會引起高速緩存器未命中的數(shù)據(jù)的高速緩存器未命中。本發(fā)明的實施例通過濾掉不是未命中模式的部分的未命中獲得進一步的性能改進。這種未命中可以稱作“冷未命中”或“噪聲未命中”。在實施例中,甚至不用記錄指令導(dǎo)致未命中的地址,除非檢測到該指令的至少兩次未命中。在另一個實施例中,不為指令進行預(yù)取,直到確定未命中的距離。在又一個實施例中,不為指令重新計算存儲在臨界未命中預(yù)取表中的未命中距離,除非兩次連續(xù)未命中發(fā)生的距離不同于所述的未命中距離。下面是對這些和其它實施例更詳細(xì)的介紹。圖1是根據(jù)本發(fā)明實施例的具有預(yù)取器120的計算機系統(tǒng)100的局部框圖。計算機系統(tǒng)100包括具有耦合到預(yù)取器120的譯碼器110的處理器101。計算機系統(tǒng)100還具有耦合到譯碼器110和預(yù)取器120的執(zhí)行單元107。術(shù)語“耦合”包含直接連接、間接連接、間接通信等。處理器101可以是能夠處理指令的任何微處理器,例如,INTELPENTIUM系列處理器中的通用處理器。執(zhí)行單元107是執(zhí)行指令的裝置。譯碼器110是將一種類型代碼改變?yōu)榭梢詧?zhí)行的另一種類型代碼的裝置或程序。例如,譯碼器110譯碼作為程序一部分的LOAD指令,然后,譯碼后的LOAD指令由執(zhí)行單元107執(zhí)行。處理器101耦合到高速緩存器130和隨機存取存儲器(RAM)140。RAM140為系統(tǒng)存儲器。在其它實施例中,可以在計算機系統(tǒng)100中使用不同于RAM的系統(tǒng)存儲器類型,代替RAM140或作為RAM140的補充。高速緩存器130可以是靜態(tài)隨機存取存儲器(SRAM)。在其它實施例中,高速緩存器130可以是處理器101的一部分。預(yù)取器120包括預(yù)取管理器122和預(yù)取存儲器125。預(yù)取管理器122包括根據(jù)由指令引起的高速緩存器未命中之間的距離預(yù)取指令數(shù)據(jù)的邏輯。如在本申請中所使用的,“邏輯”可以包括例如執(zhí)行操作的布線電路的硬件邏輯,或者例如執(zhí)行操作的固件的程序邏輯。預(yù)取存儲器125可以存儲含有包括由指令引起的高速緩存器未命中之間的距離的條目的臨界未命中預(yù)取表。在一個實施例中,預(yù)取存儲器125是內(nèi)容可尋址存儲器(CAM)。下面參考圖3、5和7討論臨界未命中預(yù)取表的例子。預(yù)取管理器122可以根據(jù)在預(yù)取表中為指令記錄的未命中距離確定要預(yù)取的數(shù)據(jù)元素的地址。圖2是根據(jù)本發(fā)明實施例的存儲器和高速緩存器中的一系列地址的局部框圖。圖2示出了RAM140和高速緩存器130的一部分。RAM140包括每個具有唯一地址的一系列存儲器單元或者存儲單元。在圖2中,在從1000到1100的一系列地址中每第十個地址用地址號標(biāo)注。圖2示出了在RAM140的地址1010、1020、1040、1050、1070、1080和1100中的數(shù)據(jù)的拷貝存儲在高速緩存器130中。圖2在這里用來說明由處理器101重復(fù)執(zhí)行的指令的高速緩存器未命中模式。例如,指令可以是程序中特定的LOAD指令。該指令可以用通常為IP=XXXX的指令指針值來識別。在例子程序中,該指令由處理器101在較短的時間段中重復(fù)執(zhí)行。這典型地出現(xiàn)在該指令是循環(huán)的一部分的情況下,但是在其它情況中也可能出現(xiàn)。在例子中所用的IP=XXXX的LOAD指令,可以在每次執(zhí)行LOAD指令時加載在不同存儲器地址存儲的數(shù)據(jù)。在圖2所示的例子中,假設(shè)指令從地址1000開始加載,并且指令的步幅201為10。即,在討論的程序的相關(guān)部分期間,該例子中的指令首先從地址1000加載,然后從隨后的每第十個存儲單元加載(例如,1000、1010、1020、1030、1040、1050、1060、1070、1080、1090、1100、…)。當(dāng)本例子的LOAD指令經(jīng)過執(zhí)行周期時,處理器101將嘗試從高速緩存器130中獲得執(zhí)行LOAD指令所需的數(shù)據(jù)。在圖2所示的例子中,當(dāng)從地址1010、1020、1040、1050、1070、1080和1100加載時,執(zhí)行LOAD指令所需的數(shù)據(jù)在高速緩存器中。這些地址可以稱作“被緩存的”。為了簡化,在本例中,存儲在高速緩存器中的地址的順序與它們在RAM140中的順序相同,但是,當(dāng)然它們可以以任何順序存儲在高速緩存器130中。圖2顯示出的地址1000、1030、1060和1090沒有被緩存。因此,當(dāng)LOAD指令從地址1000、1030、1060和1090加載時,將發(fā)生高速緩存器未命中。在本例子中,在導(dǎo)致高速緩存器未命中的一系列地址中的第一個地址與導(dǎo)致高速緩存器未命中的下一個地址之間的未命中距離202為30(即,1030-1000=30)。根據(jù)本發(fā)明實施例的一個實施例的臨界未命中預(yù)取器預(yù)取當(dāng)執(zhí)行在IP=XXXX的LOAD指令時會導(dǎo)致高速緩存器未命中的數(shù)據(jù)。在實施例中,該數(shù)據(jù)由預(yù)取根據(jù)來自存儲在預(yù)取存儲器125中的臨界未命中預(yù)取表的信息加以預(yù)取。圖3是根據(jù)本發(fā)明實施例的臨界未命中預(yù)取表300的局部框圖。臨界未命中預(yù)取表具有用條目編號310的1到8表示的八個條目,不過在本實施例中,條目編號只是為了說明的目的并且不是表中的字段。在另一個實施例中,臨界未命中預(yù)取表300可以具有更多或更少的條目。每個條目可以包括一條指令的信息。如圖3所示,臨界未命中預(yù)取表300具有5個字段,但是在其它實施例中可以具有更多或更少的字段。在臨界未命中預(yù)取表300中的第一個字段是指令I(lǐng)P字段301。該字段包括所述條目涉及的指令的指令指針。如圖3所示,第一條目存儲XXXX的指令指針值。在臨界未命中預(yù)取表300中的下一個字段是上次未命中地址字段302。該字段存儲指令上次高速緩存器未命中的地址。在圖3中的例子包括上次未命中地址1030,表示當(dāng)執(zhí)行IP=XXXX的LOAD指令時上次未命中的地址為1030。在臨界未命中預(yù)取表300中的下一個字段是未命中距離字段303。在實施例中,該字段存儲指令最后的連續(xù)兩次高速緩存器未命中之間的距離。例如,如果第一次高速緩存器未命中發(fā)生在加載地址1000時,并且下一次高速緩存器未命中發(fā)生在加載地址1030時,則在未命中距離字段303中存儲未命中距離為30。在臨界未命中預(yù)取表300中的下一個字段是未命中重復(fù)字段304和確認(rèn)字段305。這些字段可被包括噪聲濾波器的本發(fā)明實施例使用,以防止由于噪聲未命中弄臟臨界未命中預(yù)取表300和/或未命中數(shù)據(jù)。在一個實施例中,這些字段中的每個為一位。下面參考圖4討論這些字段的操作、以及臨界未命中預(yù)取器的一般操作。圖4是根據(jù)本發(fā)明實施例管理數(shù)據(jù)預(yù)取的方法的流程圖。該流程圖可以用來說明圖1的預(yù)取器120如何預(yù)取圖2中所示的數(shù)據(jù)集。對于本例,假設(shè)臨界未命中預(yù)取表300目前沒有條目,處理器101第一次執(zhí)行在IP=XXXX的指令,并且當(dāng)指令I(lǐng)P=XXXX第一次執(zhí)行時,它從地址1000以及隨后的每第十個地址加載。還假設(shè)高速緩存器處于圖2所示的狀態(tài)。如圖4所示,該方法包括確定在指令XXXX的執(zhí)行循環(huán)期間當(dāng)從第一地址加載時已經(jīng)有高速緩存器未命中(圖4的401)。根據(jù)圖2所示的高速緩存器的狀態(tài),指令I(lǐng)P=XXXX將導(dǎo)致地址1000的高速緩存器未命中。然后,預(yù)取管理器122將確定臨界未命中預(yù)取表300是否包含IP=XXXX的條目(圖4的402)。對于第一次高速緩存器未命中,臨界未命中預(yù)取表300將不包含IP=XXXX的條目。根據(jù)一個實施例,將在臨界未命中預(yù)取表300中建立IP=XXXX的條目(圖4的403)。在一個實施例中,建立新的條目包括在表中存儲上次未命中的地址(這里是1000)。在本實施例中,當(dāng)稍后發(fā)生該指令的第二次未命中時,預(yù)取管理器122將確定未命中距離等于30(1030-1000),并將該值存儲到未命中距離字段303中。注意,在圖2中,將不會發(fā)生針對地址1010和1020的未命中,因為這些地址被緩存了。在使用噪聲過濾技術(shù)的另一個實施例中,不存儲上一次未命中地址,直到出現(xiàn)該指令的第二次未命中。在本實施例中,未命中重復(fù)字段304用來指示對應(yīng)所述條目的指令是否已經(jīng)出現(xiàn)至少兩次未命中。在本實施例中,當(dāng)在臨界未命中預(yù)取表300中建立新的條目時,清除未命中重復(fù)位。當(dāng)指令XXXX下一次未命中發(fā)生在地址=1030時,預(yù)取器檢查臨界未命中預(yù)取表300,確定表中已經(jīng)有指令XXXX的條目,但是該條目的未命中重復(fù)位還沒有置位,置位未命中重復(fù)位,然后只在上一次未命中地址字段302中保存值。在這種情況下,上一次未命中地址將是1030。根據(jù)該實施例,對于只發(fā)生一次的噪聲未命中,將不會記錄上一次未命中地址。為了說明假設(shè)不使用噪聲過濾技術(shù),第二次未命中已經(jīng)發(fā)生了,并且由此條目包含作為未命中距離的值30和作為上一次未命中地址的值1030。當(dāng)指令I(lǐng)P=XXXX下一次未命中發(fā)生在地址1060時,預(yù)取器將確定臨界未命中預(yù)取表300是否已經(jīng)有指令I(lǐng)P=XXXX的條目(圖4的402)。然后,臨界未命中預(yù)取器將確定上次未命中的地址(在本例中,在上次未命中地址字段中的值為1030)與當(dāng)前未命中地址的未命中距離(圖4的404)。因為新的未命中在預(yù)計的未命中距離,所以在本實施例中預(yù)取管理器122預(yù)取與當(dāng)前未命中相距未命中距離的數(shù)據(jù)(圖4的405)。由此,預(yù)取在地址1090的數(shù)據(jù)以備當(dāng)后面執(zhí)行IP=XXXX的指令時使用。在本發(fā)明的實施例中,要預(yù)取的數(shù)據(jù)預(yù)取到高速緩存器130中,并作標(biāo)記表示已經(jīng)預(yù)取了。在實施例中,該標(biāo)記用在數(shù)據(jù)元素的高速緩存器條目中的一位實現(xiàn),該位可以被稱作“虛擬位”。在另一個實施例中,虛擬位可以作為多用途位。為了保持在臨界未命中預(yù)取表中的正確模式的目的,如果從高速緩存器加載的數(shù)據(jù)標(biāo)記為已經(jīng)預(yù)取,則這種加載定義為并被預(yù)取器理解為高速緩存器未命中。即,當(dāng)在執(zhí)行指令期間從高速緩存器130中請求這種標(biāo)記過的數(shù)據(jù)時,將從高速緩存器130提供數(shù)據(jù),但是預(yù)取管理器122將好像發(fā)生高速緩存器未命中那樣動作。在另一個實施例中,預(yù)取的數(shù)據(jù)加載到緩沖器(未示出)中,而不是加載到高速緩存器中。該緩沖器充當(dāng)預(yù)取數(shù)據(jù)的高速緩存器。在本實施例中,即使數(shù)據(jù)在緩沖器中也會發(fā)生高速緩存器未命中,但是因為可以從緩沖器中獲得數(shù)據(jù),而不從RAM加載,所以依然能夠高效地執(zhí)行指令。發(fā)送預(yù)取數(shù)據(jù)請求之后,預(yù)取管理器122更新指令I(lǐng)P=XXXX的臨界預(yù)取表條目300(圖4的406)。例如,預(yù)取管理器將在上次未命中地址字段中存儲當(dāng)前高速緩存器未命中的地址。如果存儲在未命中距離字段303中的未命中距離不同于當(dāng)前未命中的未命中距離(圖4的404),則在實施例中,不預(yù)取數(shù)據(jù)。在本實施例中,預(yù)取管理器可以通過存儲新的未命中距離和新的上次未命中地址來更新臨界未命中預(yù)取表300的指令I(lǐng)P=XXXX條目(圖4的407)。下面參考圖5的失配字段514討論包括這樣的濾波器的實施例,所述濾波器用于根據(jù)噪聲未命中防止重新計算未命中距離。然后,對于每個高速緩存器未命中,可以重復(fù)圖4所示的方法,包括在不使用本預(yù)取算法會是未命中的高速緩存器命中。在使用噪聲過濾技術(shù)的另一個實施例中,未命中距離不用來預(yù)取數(shù)據(jù),直到它已被確認(rèn)。在本實施例中,臨界未命中預(yù)取表300的確認(rèn)字段305可以用來指示在未命中距離上是否發(fā)生了指令的兩次連續(xù)的未命中。在本實施例中,當(dāng)在臨界未命中預(yù)取表300中建立新的條目時,清除確認(rèn)位。假設(shè)當(dāng)指令XXXX發(fā)生第二次未命中時,未命中距離被存儲在條目中。當(dāng)指令XXXX發(fā)生第三次未命中時,預(yù)取器檢查臨界未命中預(yù)取表300,并確定第三次未命中的地址與上次未命中地址相距是否為未命中距離。如果存儲在未命中距離字段303中的未命中地址距離被準(zhǔn)確地預(yù)測為當(dāng)前未命中的未命中距離,則置位確認(rèn)位。如果第三次未命中的未命中距離不同于存儲在條目中的未命中距離,則這次不置位確認(rèn)位。根據(jù)本實施例,預(yù)取管理器122不會為該指令引發(fā)數(shù)據(jù)預(yù)取,除非在臨界未命中預(yù)取表300中對應(yīng)該指令的確認(rèn)位被置位。圖5是根據(jù)本發(fā)明另一個實施例的單次未命中表520和臨界未命中預(yù)取表510的局部框圖。該局部框圖說明在其他技術(shù)中的兩種不同的噪聲過濾技術(shù)。一種技術(shù),通過使用單次未命中表520存儲只有單次未命中的指令的IP,來限制在臨界未命中預(yù)取表510中建立新條目。該技術(shù)(可以稱作“二表法(two-tableapproach)”)允許更小的表尺寸。第二種技術(shù)使用失配字段514防止根據(jù)噪聲未命中重新計算未命中距離。這些技術(shù)可以單獨或組合使用?,F(xiàn)在介紹二表法。在所說明的實施例中,臨界未命中預(yù)取表510允許四個條目,單次未命中表520允許多于四個條目。在單次未命中表520中的每個條目具有單個字段,指令I(lǐng)P字段521。因此,在單次未命中表520中的每個條目可以存儲指令的指令指針(例如,XXXX、YYYY、ZZZZ等)。臨界未命中預(yù)取表510類似于圖3的臨界未命中預(yù)取表300。臨界未命中預(yù)取表510具有指令I(lǐng)P字段511、上次未命中地址字段512、未命中距離字段513、失配字段514和確認(rèn)字段515。臨界未命中預(yù)取表500沒有臨界未命中預(yù)取表300中的未命中重復(fù)字段304,因為未命中重復(fù)字段的功能由單次未命中表520實現(xiàn)。在本實施例中,當(dāng)未命中出現(xiàn)時,預(yù)取器120確定臨界未命中預(yù)取表510是否具有導(dǎo)致這次未命中的指令的條目。如果臨界未命中預(yù)取表510沒有該指令的條目,則預(yù)取器120確定單次未命中表520是否具有該指令的條目。如果單次未命中表520中也沒有該指令的條目,則在單次未命中表520中建立該指令的條目。如果單次未命中表520具有有該指令的條目,則在臨界未命中預(yù)取表510中建立該指令的條目。當(dāng)使用本實施例的噪聲過濾技術(shù)時,將不會在臨界未命中預(yù)取表510中建立該指令的條目,除非該指令產(chǎn)生兩次未命中。(更準(zhǔn)確而言,將不會在臨界未命中預(yù)取表510中建立該指令的條目,除非單次未命中表520具有該指令較早前出現(xiàn)的未命中的記錄。)因此,如果指令只引起了單次噪聲未命中,則不會在臨界未命中預(yù)取表510中建立條目。臨界未命中預(yù)取表510的失配字段514用來根據(jù)噪聲未命中防止重新計算未命中距離。如果已經(jīng)確定指令的未命中距離,并且稍后出現(xiàn)的未命中不在未命中距離,這可能表示新的未命中模式的開始,在這種情況下應(yīng)當(dāng)重新計算未命中距離。但是,在新距離的未命中可能只是噪聲未命中,在這種情況下不應(yīng)當(dāng)重新計算未命中距離。例如,如果我們修改圖2所示的數(shù)據(jù)集,使得由于某些與該指令的未命中距離的真正模式不相關(guān)的原因?qū)е碌刂?070沒有存儲在高速緩存器130中,則即使該指令的未命中距離的真正模式具有未命中距離30,地址1070的加載也會導(dǎo)致未命中距離為10(1070-1060=10)的未命中。根據(jù)實施例,每當(dāng)在不同于存儲在未命中距離字段513中的距離的距離發(fā)生未命中時,預(yù)取器就檢查失配字段514中的匹配位。如果在這種情況下匹配位是沒有置位的,則預(yù)取器置位匹配位,并且不在未命中距離字段513中存儲新的距離。如果匹配位是置位的,則預(yù)取器在未命中距離字段513中存儲新的距離,并清除匹配位。最后,每當(dāng)未命中發(fā)生在未命中距離字段513中存儲的距離時就清除未命中位。因此,在新的未命中距離的單次未命中被假設(shè)為噪聲未命中,但是在不同于未命中距離的距離的兩次連續(xù)的未命中將導(dǎo)致重新計算失配位。圖6是根據(jù)本發(fā)明另一個實施例的具有臨界未命中預(yù)取器620的計算機系統(tǒng)600的局部框圖。該局部框圖示出了在其它物件中的可以結(jié)合臨界未命中預(yù)取器620一起操作的第二預(yù)取器,分隔跨過兩個存儲器的臨界未命中表,以及在臨界未命中預(yù)取器中包含的邏輯。在其它實施例中,可以分別使用圖6的這三個方面的一個或兩個。計算機系統(tǒng)600具有帶譯碼器110和執(zhí)行單元107的處理器601,類似于圖1的計算機系統(tǒng)100。此外,計算機系統(tǒng)600具有高速緩存器130和RAM140。高速緩存器130是處理器601的一部分,但在其它實施例中高速緩存器130可以在處理器601的外部。處理器601具有耦合到譯碼器110、執(zhí)行單元107和RAM140的第二預(yù)取器650。臨界未命中預(yù)取器620具有條目建立邏輯621、未命中距離更新邏輯622、噪聲過濾邏輯623和條目替換邏輯624。處理器601具有耦合到臨界未命中預(yù)取器620并由其使用的存儲器626和存儲器628。第二預(yù)取器650包括用來預(yù)取數(shù)據(jù)元素以供指令使用的預(yù)取邏輯。在實施例中,第二預(yù)取器650結(jié)合臨界未命中預(yù)取器620一起操作,但使用不同的預(yù)取機制。例如,第二預(yù)取器650可以是線索緩沖器,并且臨界未命中預(yù)取器和線索緩沖器(hintbuffer)都能夠同時預(yù)取程序的數(shù)據(jù)。在本實施例中,臨界未命中預(yù)取器和線索緩沖器可以互相補充(compliment)。在實施例中,條目建立邏輯621可以是電路,如果指令已經(jīng)引起多于一次的高速緩存器未命中,則所述電路在臨界未命中預(yù)取表中建立指令的條目。在另一個實施例中,條目建立邏輯621可以至少部分地根據(jù)單次未命中表的內(nèi)容確定指令產(chǎn)生了不止一次高速緩存器未命中。在實施例中,未命中距離更新邏輯622包括用于將指令的未命中距離記錄在預(yù)取表條目中的電路。在另一個實施例中,未命中距離更新邏輯622還包括用于記錄對于指令的至少兩次連續(xù)未命中已經(jīng)確認(rèn)未命中距離的電路。在實施例中,噪聲過濾邏輯623可以是防止由于噪聲未命中導(dǎo)致弄臟臨界未命中預(yù)取表和/或未命中數(shù)據(jù)。在實施例中,條目替換邏輯624是這樣的電路,該電路通過使用存儲在條目的未命中重復(fù)字段和確認(rèn)字段中的信息選擇在預(yù)取表中要替換的條目。例如,如果建立新的條目,但是表已經(jīng)滿了,則條目需要被替換。在另一個實施例中,臨界未命中預(yù)取表具有未命中重復(fù)字段和確認(rèn)字段,條目替換邏輯624首先選擇替換表中未命中重復(fù)位沒有置位的任何條目(即,未命中字段表示該條目沒有出現(xiàn)兩次未命中)。在又一個實施例中,條目替換邏輯624接著選擇替換確認(rèn)位沒有置位的任何條目(即,確認(rèn)字段表示未命中距離還沒有確認(rèn))。在另一個實施例中,在每種類型中以先進先出(FIFO)的方式選擇要替換的條目。圖7是根據(jù)本發(fā)明另一個實施例的前端表710和后端表720的局部框圖。在實施例中,用索引方案通過將臨界未命中預(yù)取表分為兩部分,并使臨界未命中表(前端表)的一部分位于處理器流水線的前端來改善臨界未命中預(yù)取器的效率。在本實施例中,前端表710和后端表720都允許相同數(shù)量的條目,并且在前端表710中的每個條目對應(yīng)于后端表720的條目。如前所述,在表中的每一個條目涉及一條指令。在實施例中,在前端表710中的條目包括在指令I(lǐng)P字段701中的指令指針的值。在本實施例中,后端表720包含上次未命中地址字段702、未命中距離字段703、未命中重復(fù)字段704和確認(rèn)字段705。后端表720構(gòu)成主預(yù)取表,但是不存儲用于標(biāo)識條目所涉及的指令的任何信息。預(yù)取器通過搜索前端表710中的指令的IP確定在后端表720中要讀出或更新的條目的位置。例如,為了更新在后端表720中的XXXX的條目的上次未命中地址字段702,預(yù)取器通過在前端表710的第一條目中找到值XXXX確定在兩個表中的第一條目都涉及IP=XXXX的指令。這樣,前端表710和后端表720可以當(dāng)作好像是一個表來加以處理。在實施例中,圖6的存儲器626存儲前端表710,而存儲器628存儲后端表720。在另一個實施例中,存儲器628比譯碼器110更接近高速緩存器130,存儲器626比高速緩存器130更接近譯碼器110。因此,可以是32位的IP不需要向下游傳遍所有的流水線。圖8是根據(jù)本發(fā)明另一個實施例的具有預(yù)取器的計算機系統(tǒng)800的局部框圖。計算機系統(tǒng)800具有帶譯碼器110、執(zhí)行單元107和預(yù)取表存儲器125的處理器801,類似于圖1的計算機系統(tǒng)100。此外,計算機系統(tǒng)800具有高速緩存器130和RAM140。處理器801還具有包括預(yù)取器硬件822和機械可讀介質(zhì)823的預(yù)取器820。機械可讀介質(zhì)823可以存儲這樣的預(yù)取器指令824,所述預(yù)取器指令824可以是由預(yù)取器硬件822執(zhí)行的以實現(xiàn)上述的一個或多個臨界未命中預(yù)取技術(shù)的可執(zhí)行指令。如在這里所用的,術(shù)語“可執(zhí)行指令”的意思是包括目標(biāo)代碼、源代碼、固件、微碼等,并包括以壓縮和/或加密的格式存儲的指令,以及在被處理器執(zhí)行之前必須被編譯或安裝器加以安裝的指令。本發(fā)明的實施例涉及臨界未命中預(yù)取器。臨界未命中預(yù)取器根據(jù)指令的高速緩存器未命中之間的距離為指令預(yù)取數(shù)據(jù)。本發(fā)明利用未命中距離的可預(yù)測性確定要預(yù)取的地址。本發(fā)明的幾個實施例在這里專門說明和/或介紹。但是,應(yīng)當(dāng)理解,本發(fā)明的修改和變型被上述說明所覆蓋,并在附帶的權(quán)利要求書的范圍內(nèi),沒有脫離本發(fā)明的精神和范圍。例如,可以使用上述介紹的方面的一個或多個的任意組合。此外,本發(fā)明可以用于物理地址或線性地址。此外,當(dāng)確定要預(yù)取的地址時,預(yù)取器可以使用多個未命中距離。權(quán)利要求1.一種預(yù)取器,根據(jù)由指令引起的高速緩存高速緩存器未命中之間的距離為指令預(yù)取數(shù)據(jù)。2.根據(jù)權(quán)利要求1的預(yù)取器,其中預(yù)取器具有存儲含有一個或多個包括由指令引起的高速緩存未命中之間的距離的條目的預(yù)取表的存儲器,所述條目包括由指令引起的高速緩存器未命中之間的距離。3.根據(jù)權(quán)利要求2的預(yù)取器,其中如果指令已經(jīng)引起至少兩個次高速緩存高速緩存器未命中,則預(yù)取表只包含所述指令的條目。4.根據(jù)權(quán)利要求2的預(yù)取器,其中根據(jù)在預(yù)取表中記錄的指令的高速緩存高速緩存器未命中之間的距離確定預(yù)取的數(shù)據(jù)元素的地址。5.根據(jù)權(quán)利要求2的預(yù)取器,其中預(yù)取器具有噪聲過濾,用于防止至少一種類型的噪聲未命中的至少一種改變預(yù)取數(shù)據(jù)所用的未命中距離。6.一種預(yù)取器,包括存儲具有多個條目的預(yù)取表的存儲器,每個條目包含關(guān)于涉及指令的信息,條目具有未命中距離字段,所述未命中距離字段存儲引起第一次高速緩存高速緩存器未命中的第一地址和引起第二次高速緩存高速緩存器未命中的第二地址之間的距離,第二次高速緩存高速緩存器未命中為第一次高速緩存高速緩存器未命中之后的指令的下一次高速緩存高速緩存器未命中;以及連接耦合到存儲器以便管理預(yù)取表的預(yù)取管理器。7.根據(jù)權(quán)利要求6的預(yù)取器,其中在預(yù)取表中的條目具有未命中重復(fù)字段,所述未命中重復(fù)字段表示是否檢測到該指令不止一次未命中。8.根據(jù)權(quán)利要求6的預(yù)取器,其中在預(yù)取表中的條目具有確認(rèn)字段,所述確認(rèn)字段表示是否存儲在未命中距離字段中的距離是否也是所述第二地址和引起第三次高速緩存高速緩存器未命中的第三地址之間的距離,第三次高速緩存高速緩存器未命中為第二次高速緩存高速緩存器未命中之后指令的下一次高速緩存高速緩存器未命中。9.根據(jù)權(quán)利要求6的預(yù)取器,其中在預(yù)取表中的條目還具有失配字段,所述失配字段表示,前一次未命中是否在與的距離是否匹配存儲在未命中距離字段中的距離相匹配的距離。10.根據(jù)權(quán)利要求6的預(yù)取器,其中在預(yù)取表中的條目具有未命中重復(fù)字段,所述未命中重復(fù)字段表示,是否檢測到該指令不止一次未命中;在預(yù)取表中的條目具有確認(rèn)字段,所述確認(rèn)字段表示,是否存儲在未命中距離字段中的距離是否也是所述第二地址和經(jīng)過第一次高速緩存高速緩存器未命中對象的第三地址之間的距離,第三次高速緩存高速緩存器未命中為第二次高速緩存高速緩存器未命中之后指令的下一次高速緩存高速緩存器未命中;以及預(yù)取管理器具有替代邏輯,所述替代邏輯通過使用存儲在條目的未命中重復(fù)字段和確認(rèn)字段中的信息選擇在預(yù)取表中要替換的條目。11.根據(jù)權(quán)利要求6的預(yù)取器,其中預(yù)取器還包括第二存儲器,所述第二存儲器存儲具有多個條目的前端表,每個條目報號包含指令指針,其中在前端表中的每個條目對應(yīng)于預(yù)取表中的一個條目,并且其中預(yù)取表不存儲用于標(biāo)識識別與條目所涉及相關(guān)的指令的任何信息。12.一種處理器,包括臨界未命中預(yù)取器,所述臨界未命中預(yù)取器根據(jù)記錄的由指令產(chǎn)生的高速緩存高速緩存器未命中之間的距離,預(yù)取數(shù)據(jù)供指令所使用的數(shù)據(jù);以及執(zhí)行指令的執(zhí)行單元。13.根據(jù)權(quán)利要求12的處理器,其中臨界未命中預(yù)取器包括這樣的第一電路,如果指令已經(jīng)產(chǎn)生了不止一個次高速緩存高速緩存器未命中,則所述第一電路在臨界未命中預(yù)取表中為指令產(chǎn)生建立條目指令的條目的第一電路,其中對于指令已經(jīng)產(chǎn)生了不止一次高速緩存器未命中的確定,至少一部分地是以根據(jù)單個次未命中表的內(nèi)容為基礎(chǔ)的確定指令已經(jīng)產(chǎn)生了不止一個高速緩存未命中。14.根據(jù)權(quán)利要求13的處理器,其中臨界未命中預(yù)取器包括第一電路,如果指令已經(jīng)產(chǎn)生了不止一個次高速緩存高速緩存器未命中,則所述第一電路在臨界未命中預(yù)取表中為指令產(chǎn)生建立條目指令的條目的第一電路,其中至少一部分根據(jù)單個未命中表的內(nèi)容確定對于指令已經(jīng)產(chǎn)生了不止一個次高速緩存高速緩存器未命中的確定,至少部分地是以單次未命中表的內(nèi)容為基礎(chǔ)的;第二電路,用于在預(yù)取表條目中為指令記錄未命中距離的第二電路;以及第三電路,用于記錄由于對于指令的至少兩個次連續(xù)未命中已確認(rèn)未命中距離。15.根據(jù)權(quán)利要求12的處理器,其中處理器還包括高速緩存高速緩存器;第一存儲器,用于存儲具有條目的預(yù)取表的第一存儲器,條目所述條目存儲關(guān)于涉及指令的預(yù)取信息,但不存儲用于標(biāo)識識別與條目所涉及相關(guān)的指令的信息條目,第一存儲器連接耦合到臨界未命中預(yù)取器,并比譯碼器更接近高速緩存高速緩存器;以及第二存儲器,用于存儲前端表的第二存儲器,前端表具有對應(yīng)于預(yù)取表的條目的條目的條目,其中前端表條目存儲用于標(biāo)識識別與條目所涉及相關(guān)的指令的信息,并且其中第二存儲器連接耦合到臨界未命中預(yù)取器,并且比高速緩存高速緩存器更接近譯碼器。16.根據(jù)權(quán)利要求12的處理器,其中處理器還包括第二預(yù)取器,所述第二預(yù)取器用于預(yù)取指令所用的數(shù)據(jù)元素以供指令使用,其中第二預(yù)取器采用不同的預(yù)取機制,并結(jié)合與臨界未命中預(yù)取器一起工作操作。17.一種管理數(shù)據(jù)預(yù)取的方法,該方法包括確定在執(zhí)行從第一地址裝載加載的指令周期期間存在高速緩存高速緩存器未命中;確定第一預(yù)取表是否含有該指令的條目,該條目存儲了未命中距離和該指令上次引起高速緩存高速緩存器未命中的第二地址;以及如果第一預(yù)取表含有該指令的條目,則部分地根據(jù)存儲在條目中的信息確定是否預(yù)取數(shù)據(jù)。18.根據(jù)權(quán)利要求17的方法,其中確定是否預(yù)取數(shù)據(jù)包括如果第一地址和第二地址之間的距離等于存儲的未命中距離,則確定應(yīng)當(dāng)發(fā)送預(yù)取請求。19.根據(jù)權(quán)利要求17的方法,其中第一預(yù)取表條目包含確認(rèn)字段,其中確定是否預(yù)取數(shù)據(jù)包括如果第一地址和第二地址之間的距離等于存儲的未命中距離,并且該確認(rèn)字段表示存儲的未命中距離已確認(rèn),則確定應(yīng)當(dāng)發(fā)送預(yù)取請求。20.根據(jù)權(quán)利要求18的方法,其中方法還包括如果第一預(yù)取表不包含該指令的條目,則在第一預(yù)取表中為該指令產(chǎn)生建立該指令的條目,并且其中只有當(dāng)在預(yù)取表中的其它條目也具有表示存儲在那些其它條目中的未命中距離得到確認(rèn)之后的情況下,新的條目代替預(yù)取表中這樣的條目的條目,該條目的確認(rèn)字段表示存儲在該條目中的未命中距離的確認(rèn)字段已得到確認(rèn)。21.根據(jù)權(quán)利要求17的方法,其中確定第一預(yù)取表是否包含該指令的條目包括,確定是否在第二預(yù)取表中的條目是否中保護包含用于標(biāo)識識別所述指令的信息,其中第二預(yù)取表駐留在不同于與第一預(yù)取表的屬于不同的存儲器中。22.根據(jù)權(quán)利要求17的方法,其中在第一預(yù)取表中的指令的條目包括失配字段,并且其中當(dāng)處理上次未命中時,失配字段表示,當(dāng)處理上次未命中時,指令的上次未命中是否發(fā)生在存儲在條目中的未命中距離。23.根據(jù)權(quán)利要求22的方法,其中方法還包括確定第一預(yù)取表包含指令的條目,并且在第一地址和第二地址之間的距離不等于未命中距離;如果失配字段表示上次未命中發(fā)生在存儲的未命中距離,則更新失配字段,以便表示指令的上次未命中未發(fā)生在存儲的未命中距離;以及如果失配字段表示上次未命中未發(fā)生在存儲的未命中距離,則在未命中距離字段存儲未命中距離,并更新失配字段,以便表示指令的上次未命中未發(fā)生在存儲的未命中距離。24.根據(jù)權(quán)利要求17的方法,其中方法還包括如果第一預(yù)取表不包含該指令的條目,并且第二預(yù)取表包含該指令的條目,則在第一預(yù)取表中為該指令產(chǎn)生建立該指令的條目;以及如果第一預(yù)取表不包含該指令的條目,并且第二預(yù)取表不包含該指令的條目,則在第二預(yù)取表中為該指令產(chǎn)生建立該指令的條目。25.一種機械機器可讀介質(zhì),其上存儲多個可執(zhí)行指令,多個指令用來包括執(zhí)行如下操作的指令確定在執(zhí)行從第一地址裝載加載的指令周期期間存在高速緩存高速緩存器未命中;確定第一預(yù)取表是否含有該指令的條目,該條目存儲未命中距離和上次未命中地址,上次未命中地址是指令上次引起高速緩存高速緩存器未命中的地址;以及根據(jù)高速緩存高速緩存器未命中更新第一預(yù)取表中的條目。26.根據(jù)權(quán)利要求25的機械器可讀介質(zhì),其中更新第一預(yù)取表中的條目的指令用來執(zhí)行如下操作在條目中的上次未命中地址字段中存儲第一地址;更新確認(rèn)字段以便,表示,如果這是發(fā)生在存儲的未命中距離的第二次連續(xù)未命中,則上次未命中地址已經(jīng)確認(rèn),并且確認(rèn)字段不表示已經(jīng)確認(rèn)了未命中距離;以及如果失配字段表示上次未命中沒有發(fā)生在存儲的未命中距離,則在未命中距離字段中存儲第一地址和第二地址之間的距離。27.根據(jù)權(quán)利要求25的機械機器可讀介質(zhì),其中多個指令還包括執(zhí)行如下操作的指令如果第一預(yù)取表不包含該指令的條目,并且第二預(yù)取表包含該指令的條目,則在第一預(yù)取表中為該指令產(chǎn)生建立該指令的條目;以及如果第一預(yù)取表不包含該指令的條目,并且第二預(yù)取表不包含該指令的條目,則在第二預(yù)取表中為該指令產(chǎn)生建立該指令的條目。28.一種處理器的預(yù)取系統(tǒng),預(yù)取系統(tǒng)包括根據(jù)為在預(yù)取表中存儲的指令存儲的的未命中距離預(yù)取數(shù)據(jù)的裝置;以及更新預(yù)取表以包含指令的新的未命中距離的裝置。29.根據(jù)權(quán)利要求28的預(yù)取系統(tǒng),其中更新預(yù)取表的裝置包括過濾噪聲未命中的裝置。30.根據(jù)權(quán)利要求28的預(yù)取系統(tǒng),其中根據(jù)未命中距離預(yù)取數(shù)據(jù)的裝置將帶有數(shù)據(jù)已經(jīng)預(yù)取的標(biāo)記的預(yù)取器數(shù)據(jù)存儲到高速緩存高速緩存器中,指示所述數(shù)據(jù)已經(jīng)被預(yù)取。全文摘要一種根據(jù)由指令引起的高速緩存器未命中之間的距離為指令預(yù)取數(shù)據(jù)的預(yù)取器。在一個實施例中,預(yù)取器包括存儲預(yù)取表的存儲器,預(yù)取表含有一個或多個包括由指令引起的高速緩存器未命中之間的距離的條目。在另一個實施例中,根據(jù)記錄在預(yù)取表中的指令的高速緩存器未命中之間的距離確定預(yù)取的數(shù)據(jù)元素的地址。文檔編號G06F9/38GK1484788SQ01821629公開日2004年3月24日申請日期2001年12月18日優(yōu)先權(quán)日2000年12月29日發(fā)明者M·阿布達(dá)拉,K·阿爾-達(dá)亞尼,M阿布達(dá)拉,達(dá)亞尼申請人:英特爾公司