專利名稱:執(zhí)行存儲(chǔ)器消歧的技術(shù)的制作方法
技術(shù)領(lǐng)域:
本公開涉及信息處理領(lǐng)域,以及更具體來(lái)說(shuō),涉及存儲(chǔ)器存取管理領(lǐng)域。
背景技術(shù):
在一些現(xiàn)有技術(shù)微處理器或處理系統(tǒng)中,信息(數(shù)據(jù)或指令)可由微處理器采用諸如“加載”操作或“存儲(chǔ)”操作之類的操作來(lái)存取。此外,加載和存儲(chǔ)操作可響應(yīng)由處理器執(zhí)行的指令(或者子指令,例如微操作或“uop”)而執(zhí)行。在一些處理體系結(jié)構(gòu)中,加載指令可被解碼為一個(gè)uop,而存儲(chǔ)指令則可被解碼為兩個(gè)或兩個(gè)以上uop,其中包括存儲(chǔ)地址(STA)uop和存儲(chǔ)數(shù)據(jù)(STD)uop。為了本公開的目的,存儲(chǔ)uop以及指令將稱作“存儲(chǔ)操作”或“存儲(chǔ)”,以及加載uop和指令將稱作“加載操作”或“加載”。
在一些處理器或處理系統(tǒng)中,多個(gè)加載和存儲(chǔ)操作可同時(shí)執(zhí)行或者掛起。例如,在包含其中的每個(gè)可同時(shí)對(duì)不同操作起作用的多個(gè)處理級(jí)的流水線式處理器中,可能有若干加載和存儲(chǔ)操作被同時(shí)進(jìn)行,每個(gè)在流水線中的不同級(jí)上進(jìn)行。但是,在各個(gè)流水線級(jí)上,通過(guò)加載指令從其中加載數(shù)據(jù)或者通過(guò)存儲(chǔ)指令向其中存儲(chǔ)數(shù)據(jù)的地址(統(tǒng)稱“目標(biāo)地址”)是未知的或者“不明確的”。這是因?yàn)榧虞d和存儲(chǔ)指令或uop的目標(biāo)地址有時(shí)在已經(jīng)開始執(zhí)行加載或存儲(chǔ)之后才確定。
圖1說(shuō)明一種流水線式處理器的一部分,其中具有取/預(yù)取級(jí)、對(duì)適當(dāng)指令或uop分配寄存器的一個(gè)或多個(gè)重命名單元、以及調(diào)度和存儲(chǔ)指令或uop、例如與加載和存儲(chǔ)對(duì)應(yīng)的uop、直到確定它們相應(yīng)的目標(biāo)地址為止的一個(gè)或多個(gè)調(diào)度單元/保留站單元。
當(dāng)加載和存儲(chǔ)(例如STA uop)從保留站分發(fā)時(shí),它們可被發(fā)送到地址生成單元,地址生存單元生成要發(fā)送到存儲(chǔ)器或高速緩存的加載和存儲(chǔ)的相應(yīng)線性地址。加載操作通常從保留站分發(fā)到存儲(chǔ)器有序緩沖器(MOB)內(nèi)的加載緩沖器中,在其中檢驗(yàn)加載是否有沖突以及與其它存儲(chǔ)操作的相關(guān)性。如果不存在沖突或者與存儲(chǔ)的相關(guān)性,則加載可分發(fā)給存儲(chǔ)器/高速緩存群集。否則,在被分發(fā)到存儲(chǔ)器/高速緩存之前,加載可能需要在MOB等到解決了相關(guān)性和/或沖突。
一旦加載被分發(fā)給存儲(chǔ)器/高速緩存,存儲(chǔ)器/高速緩存可能把作為加載的目標(biāo)的數(shù)據(jù)返回給執(zhí)行單元保留站,執(zhí)行單元保留站可采用加載數(shù)據(jù)來(lái)生成下一個(gè)的地址,用作將從調(diào)度器/保留站分發(fā)的某個(gè)后續(xù)uop的操作數(shù)。
可能包括STA uop的存儲(chǔ)操作可遵照與加載相似的途徑。但是,通常不允許存儲(chǔ)不按程序順序分發(fā)給存儲(chǔ)器/高速緩存,而加載則可在加載與其它存儲(chǔ)操作之間不存在相關(guān)性/沖突時(shí)的任何時(shí)間被分發(fā)給存儲(chǔ)器/高速緩存。
在一些現(xiàn)有技術(shù)處理器中,MOB用于以適當(dāng)順序存儲(chǔ)加載和存儲(chǔ)操作,使得向存儲(chǔ)單元寫信息的所有存儲(chǔ)操作被分發(fā)并且允許它們?cè)诳刹捎脕?lái)自相同地址的信息的加載操作之前將其信息寫入存儲(chǔ)器。按照程序順序在相應(yīng)的加載操作(即加載操作具有與先前的存儲(chǔ)操作相同的目標(biāo)地址)之前出現(xiàn)的存儲(chǔ)操作可稱作“較舊的”存儲(chǔ)操作,以及相應(yīng)的加載操作可稱作比按程序順序的先前存儲(chǔ)操作“較新的”加載操作。
如果不存在加載與存儲(chǔ)之間的相關(guān)性/沖突,則加載相對(duì)于存儲(chǔ)可不按程序順序來(lái)存取存儲(chǔ)器。在現(xiàn)有技術(shù)的一部分中,在較舊的掛起存儲(chǔ)之前所處理的加載被假定為始終對(duì)應(yīng)于相同的目標(biāo)存儲(chǔ)器地址,以便阻止先前處理的加載可能加載將由較舊的存儲(chǔ)所較新的數(shù)據(jù),因而通過(guò)返回廢棄的信息而在它們所對(duì)應(yīng)的無(wú)論什么程序中產(chǎn)生不正確的結(jié)果。
但是,由于并非在處理按照程序順序的較舊的掛起存儲(chǔ)之前所處理的所有加載都對(duì)應(yīng)于相同的存儲(chǔ)器地址,所以這個(gè)假設(shè)可能證明是過(guò)于保守的。因此,加載可被延遲許多周期向存儲(chǔ)器發(fā)出,直到相應(yīng)的較舊的掛起存儲(chǔ)被處理并以適當(dāng)順序存儲(chǔ)在MOB中為止。這又可能引起存儲(chǔ)器存取時(shí)間的不必要延遲,它可能過(guò)度侵蝕處理器和系統(tǒng)性能。
通過(guò)附圖、作為示例而不是限制來(lái)說(shuō)明本發(fā)明。
圖1是現(xiàn)有技術(shù)處理器的簡(jiǎn)圖,其中,加載和存儲(chǔ)僅當(dāng)它們?cè)谟商幚砥鬟\(yùn)行之后處于程序順序時(shí)才向存儲(chǔ)器發(fā)出。
圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的處理器的簡(jiǎn)圖,其中,允許在處理器中處理的加載在相應(yīng)的較舊的存儲(chǔ)操作通過(guò)處理器處理之前來(lái)存取存儲(chǔ)器。
圖3說(shuō)明根據(jù)本發(fā)明的一個(gè)實(shí)施例的加載緩沖器,它可存儲(chǔ)將在相應(yīng)的較舊的存儲(chǔ)操作之前向存儲(chǔ)器發(fā)出的加載操作。
圖4說(shuō)明根據(jù)一個(gè)實(shí)施例、預(yù)測(cè)加載緩沖器條目中存儲(chǔ)的加載操作可在相應(yīng)的較舊的存儲(chǔ)之前向存儲(chǔ)器發(fā)出。
圖5是狀態(tài)圖,說(shuō)明根據(jù)一個(gè)實(shí)施例的看門狗單元的功能。
圖6是流程圖,說(shuō)明根據(jù)一個(gè)實(shí)施例、加載操作是否可在相應(yīng)的存儲(chǔ)操作之前向存儲(chǔ)器發(fā)出。
圖7是在其中可采用一個(gè)實(shí)施例的共享總線系統(tǒng)。
圖8說(shuō)明在其中可采用一個(gè)實(shí)施例的點(diǎn)對(duì)點(diǎn)總線系統(tǒng)。
具體實(shí)施例方式本發(fā)明的實(shí)施例涉及計(jì)算機(jī)系統(tǒng)。更具體來(lái)說(shuō),本發(fā)明的至少一個(gè)實(shí)施例涉及允許加載操作在較舊的掛起存儲(chǔ)操作之前向存儲(chǔ)器發(fā)出的技術(shù)。此外,本發(fā)明的一個(gè)實(shí)施例涉及根據(jù)加載和相應(yīng)的較舊的存儲(chǔ)操作相互沒(méi)有沖突的頻率來(lái)禁用或啟用在較舊的掛起存儲(chǔ)操作之前向存儲(chǔ)器發(fā)出加載操作的技術(shù)。在整個(gè)公開中,對(duì)于存儲(chǔ),術(shù)語(yǔ)“掛起”表示目標(biāo)地址(加載和存儲(chǔ)操作將存取的存儲(chǔ)器中的地址)仍未確定的事實(shí)。關(guān)于加載的術(shù)語(yǔ)“掛起”表示其目標(biāo)地址被確定但仍未向存儲(chǔ)器/高速緩存發(fā)出的加載。
不是始終等待讓加載相對(duì)于MOB中的掛起存儲(chǔ)操作按程序順序來(lái)處理,本發(fā)明的實(shí)施例而是通過(guò)帶有/沒(méi)有預(yù)測(cè)地推測(cè)掛起加載(即仍將要退出的加載)是否將從不是對(duì)應(yīng)于任何較舊的掛起存儲(chǔ)操作的存儲(chǔ)器地址中加載信息,來(lái)改進(jìn)對(duì)存儲(chǔ)器的加載存取的吞吐量。在至少一個(gè)實(shí)施例中,加載緩沖器的條目各對(duì)應(yīng)于散列預(yù)測(cè)器陣列條目,散列預(yù)測(cè)器陣列條目可保持關(guān)于是否將允許相應(yīng)加載緩沖器條目中的掛起加載在掛起的較舊的存儲(chǔ)操作之前來(lái)存取存儲(chǔ)器的預(yù)測(cè)。在一個(gè)實(shí)施例中,掛起加載操作是否可在掛起的較舊的存儲(chǔ)操作之前存取存儲(chǔ)器的預(yù)測(cè)取決于與特定預(yù)測(cè)器表?xiàng)l目對(duì)應(yīng)的先前掛起加載操作的成功(先前的掛起加載是否已存取存儲(chǔ)器而沒(méi)有與較舊的存儲(chǔ)操作沖突)。
在一個(gè)實(shí)施例中,飽和計(jì)數(shù)器可用來(lái)保持掛起加載是否將與較舊的掛起存儲(chǔ)操作沖突(即,試圖存取與較舊的掛起存儲(chǔ)操作對(duì)應(yīng)的存儲(chǔ)器地址)的預(yù)測(cè)。如果已經(jīng)允許在較舊的掛起存儲(chǔ)操作之前來(lái)存取存儲(chǔ)器的加載最終與較舊的存儲(chǔ)操作沖突,則至少一個(gè)實(shí)施例從導(dǎo)致沖突的推測(cè)加載重新開始。但是,至少一個(gè)實(shí)施例中,誤預(yù)測(cè)可能充分地不頻繁出現(xiàn),從而幫助對(duì)存儲(chǔ)器的加載/存儲(chǔ)存取的整體改進(jìn)。
在較舊的掛起存儲(chǔ)操作之前存取存儲(chǔ)器的推測(cè)加載的成功率下降到低于某個(gè)門限時(shí),則至少一個(gè)實(shí)施例可包括“看門狗”單元(邏輯和/或軟件)來(lái)禁止掛起加載在較舊的掛起存儲(chǔ)操作之前推測(cè)性地存取存儲(chǔ)器。在本公開中,“存儲(chǔ)器”可用來(lái)表示高速緩存、DRAM或者將由加載和存儲(chǔ)操作存取的其它任何存儲(chǔ)器結(jié)構(gòu)。
圖2說(shuō)明根據(jù)一個(gè)實(shí)施例的處理器的一部分,其中,可按照預(yù)測(cè)算法、如散列函數(shù),在其它較舊的掛起存儲(chǔ)操作之前向存儲(chǔ)器地址推測(cè)性地發(fā)出掛起加載。具體來(lái)說(shuō),圖2說(shuō)明一種流水線式處理器200的一部分,其中具有取/預(yù)取級(jí)201、解碼器級(jí)203、對(duì)適當(dāng)指令或uop分配寄存器的一個(gè)或多個(gè)重命名單元205、以及存儲(chǔ)與加載和存儲(chǔ)操作(例如STA uop)對(duì)應(yīng)的uop、直到確定它們相應(yīng)的目標(biāo)地址源操作數(shù)為止的一個(gè)或多個(gè)調(diào)度/保留站單元210。圖2還說(shuō)明生成與加載和存儲(chǔ)對(duì)應(yīng)的目標(biāo)線性地址的地址生成單元212以及根據(jù)通過(guò)向存儲(chǔ)器/高速緩存分發(fā)加載操作所返回的加載數(shù)據(jù)來(lái)生成對(duì)于將從調(diào)度器/保留站210分發(fā)的下一個(gè)操作的指針。圖2還說(shuō)明MOB 213,它可包含按照程序順序存儲(chǔ)加載和存儲(chǔ)并檢驗(yàn)加載與存儲(chǔ)之間的相關(guān)性/沖突的加載和存儲(chǔ)緩沖器。
在一個(gè)實(shí)施例中,可在向存儲(chǔ)器/高速緩存發(fā)出較舊的存儲(chǔ)之前向存儲(chǔ)器/高速緩存發(fā)出加載,而無(wú)需等待確定加載是否與較舊的掛起存儲(chǔ)相關(guān)或沖突。這樣,本發(fā)明的至少一個(gè)實(shí)施例可由于以下事實(shí)而改進(jìn)處理器性能可無(wú)需等待確定較舊的存儲(chǔ)的目標(biāo)地址而發(fā)出加載,來(lái)自其中的數(shù)據(jù)可能比某些現(xiàn)有技術(shù)體系結(jié)構(gòu)更快地由執(zhí)行單元用來(lái)分發(fā)來(lái)自調(diào)度器/保留站的后續(xù)操作。
在一個(gè)實(shí)施例中,散列表207可與例如存儲(chǔ)在加載緩沖器中的加載或者在處理器的任何位置掛起的加載對(duì)應(yīng)的多個(gè)條目配合使用。在一個(gè)實(shí)施例中,散列表存儲(chǔ)在以邏輯電路實(shí)現(xiàn)的和/或以軟件實(shí)現(xiàn)的存儲(chǔ)器中。在一個(gè)實(shí)施例中,散列預(yù)測(cè)表的各條目可包含至少一個(gè)飽和計(jì)數(shù)器來(lái)保持關(guān)于是否可在處理器中掛起的較舊的掛起存儲(chǔ)操作之前向存儲(chǔ)器發(fā)出各加載的預(yù)測(cè)。有利的是,散列預(yù)測(cè)條目可根據(jù)指令指針(EIP)或者它的某種派生(例如EIP的散列形式)來(lái)索引。
圖3說(shuō)明根據(jù)本發(fā)明的一個(gè)實(shí)施例的加載緩沖器,其中,各條目可包含可能允許在較舊的掛起存儲(chǔ)操作之前以及在加載退出并存儲(chǔ)于MOB之前來(lái)存取存儲(chǔ)器的加載操作。除了與加載操作305對(duì)應(yīng)的操作碼、數(shù)據(jù)和其它信息之外,包括例如加載緩沖器條目301在內(nèi)的加載緩沖器條目可包含跟蹤與加載緩沖器條目對(duì)應(yīng)的加載操作是否可在較舊的掛起存儲(chǔ)操作之前存取存儲(chǔ)器的其它字段。
例如,在一個(gè)實(shí)施例中,各條目可包含存儲(chǔ)表明是否允許加載在掛起的較舊的存儲(chǔ)操作之前來(lái)存取存儲(chǔ)器的位的字段(MDA字段307)、表明相應(yīng)的加載操作是否在較舊的掛起存儲(chǔ)操作之前實(shí)際上已存取存儲(chǔ)器的字段(MDD字段309)、表明相應(yīng)的加載操作是否應(yīng)當(dāng)使相應(yīng)的預(yù)測(cè)器條目被更新(例如根據(jù)具有未決定地址的較舊的存儲(chǔ)操作的存在)的字段(MDU字段311)、表明相應(yīng)的加載操作是否應(yīng)當(dāng)使預(yù)測(cè)器復(fù)位(例如在加載與存儲(chǔ)之間的沖突的情況下)的字段(MDR字段313)以及存儲(chǔ)表明比特定加載緩沖器條目?jī)?nèi)的加載較舊的存儲(chǔ)緩沖器中的最新的存儲(chǔ)的存儲(chǔ)緩沖器條目的存儲(chǔ)色值的字段315。類似地,圖2的處理器中的存儲(chǔ)緩沖器可在各條目中包含表明作為比加載色字段所涉及的存儲(chǔ)操作更新的加載緩沖器中的最舊的加載操作的加載色的字段。在各加載緩沖器條目中還可存在其它字段,其中包括用于對(duì)是否允許相應(yīng)的加載操作在其它掛起的較舊的存儲(chǔ)操作之前來(lái)存取存儲(chǔ)器執(zhí)行散列預(yù)測(cè)的飽和計(jì)數(shù)器字段。圖3所示的字段的相對(duì)位置和大小不代表所有實(shí)施例。在其它實(shí)施例中,這些字段可能處于不同的位置,并且可能具有不同的大小。
加載緩沖器或其它結(jié)構(gòu)中存儲(chǔ)的加載可與預(yù)測(cè)器表?xiàng)l目關(guān)聯(lián),預(yù)測(cè)器表?xiàng)l目在一個(gè)實(shí)施例中可采用飽和計(jì)數(shù)器(例如415)來(lái)實(shí)現(xiàn)散列函數(shù),以便記錄無(wú)沖突加載和存儲(chǔ)的成功預(yù)測(cè)的歷史。在其它實(shí)施例中可采用其它預(yù)測(cè)技術(shù)。圖4說(shuō)明根據(jù)本發(fā)明的預(yù)測(cè)器表400,其中的條目對(duì)應(yīng)于例如圖3所示的至少一個(gè)加載緩沖器的條目。在一個(gè)實(shí)施例中,預(yù)測(cè)表可能是一個(gè)或多個(gè)加載緩沖器的組成部分。在其它實(shí)施例中,預(yù)測(cè)表可能處于來(lái)自一個(gè)或多個(gè)加載緩沖器的獨(dú)立電路中。
圖4的預(yù)測(cè)表采用與加載操作對(duì)應(yīng)的EIP 405的散列形式401來(lái)索引。在一個(gè)實(shí)施例中,加載的EIP的六個(gè)最低有效位經(jīng)由索引邏輯410用來(lái)索引64個(gè)條目(標(biāo)記為0至63)的預(yù)測(cè)表。在一個(gè)實(shí)施例中,各預(yù)測(cè)器條目相當(dāng)于16種狀態(tài)的飽和計(jì)數(shù)器,其中包括復(fù)位狀態(tài),以4位來(lái)實(shí)現(xiàn)。在其它實(shí)施例中,EIP的更多或更少的位或者EIP的某個(gè)函數(shù)可用來(lái)索引更多或更少的預(yù)測(cè)器表?xiàng)l目。同樣地,在其它實(shí)施例中,各條目可能用作具有采用或多或少位的更多或更少狀態(tài)的飽和計(jì)數(shù)器。此外,在其它實(shí)施例中可采用其它歷史跟蹤技術(shù)。
在一個(gè)實(shí)施例中,與將在掛起的較舊的存儲(chǔ)操作之前對(duì)存儲(chǔ)器發(fā)出的加載對(duì)應(yīng)的加載飽和計(jì)數(shù)器(例如415)在加載退出期間被遞增或者重置為零值(或者另外的開始值)。在其它實(shí)施例中,在其它情況下可修改飽和計(jì)數(shù)器。在一個(gè)實(shí)施例中,如果加載退出而沒(méi)有與在發(fā)出加載時(shí)掛起的較舊的存儲(chǔ)操作“沖突”(即,從掛起的較舊的存儲(chǔ)操作將對(duì)其中寫信息的存儲(chǔ)器地址中加載數(shù)據(jù)),則與在其它較舊的掛起存儲(chǔ)之前對(duì)存儲(chǔ)器發(fā)出的加載對(duì)應(yīng)的飽和計(jì)數(shù)器遞增。在一個(gè)實(shí)施例中,如果加載與在發(fā)出加載(例如當(dāng)加載退出時(shí)所確定)時(shí)掛起的較舊的存儲(chǔ)操作沖突,則與將在較舊的掛起存儲(chǔ)器之前對(duì)存儲(chǔ)器發(fā)出的加載對(duì)應(yīng)的飽和計(jì)數(shù)器被復(fù)位。
在一個(gè)實(shí)施例中,如果與加載對(duì)應(yīng)的預(yù)測(cè)器表中的飽和計(jì)數(shù)器達(dá)到門限值,則在掛起的較舊的存儲(chǔ)操作之前從一個(gè)或多個(gè)處理器保留站(而不是從MOB)中發(fā)出加載。否則,加載可能不是從保留站發(fā)出,而是必須相對(duì)于較舊的掛起存儲(chǔ)按照程序順序從MOB中發(fā)出。在一個(gè)實(shí)施例中,飽和計(jì)數(shù)器的至少一個(gè)的門限值對(duì)應(yīng)于15個(gè)連續(xù)的無(wú)沖突加載發(fā)布,在一個(gè)實(shí)施例中以包括復(fù)位在內(nèi)的計(jì)數(shù)器的16種狀態(tài)中的15種來(lái)反映。在其它實(shí)施例中,可選擇較少保守的門限,例如10個(gè)連續(xù)的無(wú)沖突加載發(fā)布。
在一個(gè)實(shí)施例中,加載可在調(diào)度器中進(jìn)行無(wú)序調(diào)度,并且稍后發(fā)送到MOB。如果例如不存在掛起的先前存儲(chǔ),或者存在掛起的先前存儲(chǔ),但是預(yù)測(cè)器已經(jīng)達(dá)到門限值,加載則可從將被立即執(zhí)行的MOB(“MOB旁路”)轉(zhuǎn)發(fā)。MOB或者可判定加載仍然無(wú)法繼續(xù)送往執(zhí)行單元(例如,當(dāng)存在仍未解決的較舊的存儲(chǔ)并且相應(yīng)的預(yù)測(cè)器計(jì)數(shù)器未飽和時(shí)),在這些情況下,在解決有問(wèn)題的存儲(chǔ)時(shí),MOB將在稍后重新調(diào)度此加載)。
在一個(gè)實(shí)施例中,在與來(lái)自存儲(chǔ)器地址的信息的加載對(duì)應(yīng)的飽和計(jì)數(shù)器反映來(lái)自那個(gè)存儲(chǔ)器地址的加載的15個(gè)連續(xù)的無(wú)沖突發(fā)布之后,可不按程序順序?qū)Υ舜鎯?chǔ)器地址發(fā)出后續(xù)加載(即,在較舊的存儲(chǔ)之前,從保留站,經(jīng)由MOB旁路),而不是關(guān)于較舊的掛起存儲(chǔ)按程序順序等待從MOB發(fā)出。但是,在一個(gè)實(shí)施例中,如果在退出時(shí)確定已經(jīng)對(duì)于較舊的存儲(chǔ)將在其中存儲(chǔ)信息的存儲(chǔ)單元發(fā)出加載(即在加載與較舊的存儲(chǔ)之間發(fā)生沖突),則與那個(gè)加載對(duì)應(yīng)的(即與加載的EIP對(duì)應(yīng)的)預(yù)測(cè)表中的飽和計(jì)數(shù)器復(fù)位到初始狀態(tài)、如零值,或者遞減到較小的值,并且沒(méi)有來(lái)自那個(gè)地址的其它加載可被預(yù)測(cè)為無(wú)沖突(因而在那個(gè)地址的較舊的掛起存儲(chǔ)之前發(fā)出到存儲(chǔ)器),直到飽和計(jì)數(shù)器再次達(dá)到門限值為止(例如,在一個(gè)實(shí)施例中為15個(gè)連續(xù)無(wú)沖突加載之后)。如果加載被誤預(yù)測(cè)、對(duì)存儲(chǔ)器發(fā)出,并且實(shí)際上被確定為與較舊的存儲(chǔ)沖突,則此加載必須按照程序順序(即,在已確定較舊的存儲(chǔ)操作的目標(biāo)地址、并且存儲(chǔ)按照程序順序被存儲(chǔ)在具有加載的MOB中之后)從MOB中再發(fā)出(例如在執(zhí)行流水線刷新/重新開始操作之后)。
在一個(gè)實(shí)施例中,與將對(duì)存儲(chǔ)器發(fā)出的加載對(duì)應(yīng)的預(yù)測(cè)表中的飽和計(jì)數(shù)器根據(jù)散列EIP來(lái)索引。讀取計(jì)數(shù)器值的結(jié)果可存儲(chǔ)在與可能位于加載緩沖器或保留站或者另外的某種結(jié)構(gòu)中的加載關(guān)聯(lián)的MDA位中(例如“1”表示正預(yù)測(cè)或“允許”,“0”表示負(fù)預(yù)測(cè)或“不允許”)。如果計(jì)數(shù)器值飽和(即在門限值處或者高于門限值),則認(rèn)為加載與仍未對(duì)存儲(chǔ)器發(fā)出的任何較舊的存儲(chǔ)沒(méi)有沖突,以及可發(fā)出加載來(lái)存取目標(biāo)地址上的存儲(chǔ)器。如果稍后發(fā)現(xiàn)加載與較舊的存儲(chǔ)沖突(例如在已確定較舊的存儲(chǔ)目標(biāo)地址之后),則使加載刷新/作廢,并從MOB對(duì)存儲(chǔ)器再發(fā)出(即對(duì)于較舊的存儲(chǔ)按照程序順序)。
如果對(duì)于給定加載讀取預(yù)測(cè)器并且相應(yīng)的計(jì)數(shù)器未飽和(即包含低于門限的值),則加載將存儲(chǔ)在MOB中,并相對(duì)掛起的較舊的存儲(chǔ)按照程序順序?qū)Υ鎯?chǔ)器發(fā)出。在一個(gè)實(shí)施例中,如果加載與較舊的存儲(chǔ)沖突,則設(shè)置MDU位。如果加載實(shí)際上在較舊的掛起存儲(chǔ)之前從存儲(chǔ)器加載信息(即預(yù)測(cè)加載不會(huì)沖突),則不管加載是否實(shí)際上與較舊的存儲(chǔ)沖突,均設(shè)置MDD位??蓞⒖歼@個(gè)位來(lái)確定是否需要驗(yàn)證預(yù)測(cè)是正確的。同樣,如果預(yù)測(cè)不正確,并且實(shí)際上存在與較舊的存儲(chǔ)的沖突,則將使加載刷新/作廢,并與所有后續(xù)指令一起再發(fā)出。
根據(jù)一個(gè)實(shí)施例,為了檢測(cè)誤碼預(yù)測(cè),比在執(zhí)行加載之后決定的加載較舊的存儲(chǔ)的目標(biāo)地址與包括誤碼預(yù)測(cè)加載在內(nèi)的目標(biāo)地址較新加載進(jìn)行比較。一旦找到加載和較舊的存儲(chǔ)的匹配目標(biāo)地址,可設(shè)置MDR位來(lái)反映那個(gè)加載的計(jì)數(shù)器必須復(fù)位。此外,在一個(gè)實(shí)施例中,可設(shè)置MDD位來(lái)表明將使誤預(yù)測(cè)加載刷新/作廢。
在一個(gè)實(shí)施例中,與MOB關(guān)聯(lián)的邏輯采用MDU和MDR位(存儲(chǔ)于與在掛起的較舊的存儲(chǔ)之前對(duì)存儲(chǔ)器發(fā)出的加載對(duì)應(yīng)的加載緩沖器條目中)來(lái)確定將如何更新預(yù)測(cè)/誤預(yù)測(cè)加載的預(yù)測(cè)器表?xiàng)l目。例如,在一個(gè)實(shí)施例中,如果未設(shè)置MDU位,則不更新相應(yīng)的飽和計(jì)數(shù)器,而如果設(shè)置了MDU位并且未設(shè)置MDR位,則計(jì)數(shù)器遞增。但是,如果MDU和MDR位均被設(shè)置,則計(jì)數(shù)器復(fù)位。下表概述根據(jù)一個(gè)實(shí)施例、在確定如何或者是否更新給定加載的預(yù)測(cè)器表?xiàng)l目時(shí)的MDU和MDR位的使用
在一個(gè)實(shí)施例中,如果誤預(yù)測(cè)的數(shù)量或比率變得過(guò)高,則是否在較舊的存儲(chǔ)之前對(duì)存儲(chǔ)器發(fā)出加載的預(yù)測(cè)可暫時(shí)禁用,以便保持處理器性能。預(yù)測(cè)技術(shù)則可在一定時(shí)間量之后或者在滿足某個(gè)標(biāo)準(zhǔn)之后重新啟用。在一個(gè)實(shí)施例中,邏輯、軟件或者它們的某種組合可用來(lái)實(shí)現(xiàn)“看門狗”單元,它控制啟用還是禁用在較舊的掛起存儲(chǔ)之前對(duì)存儲(chǔ)器發(fā)出加載的預(yù)測(cè)。在一個(gè)實(shí)施例中,看門狗可概念化為實(shí)現(xiàn)兩種不同狀態(tài)(例如經(jīng)由邏輯狀態(tài)機(jī)),各采用兩個(gè)計(jì)數(shù)器來(lái)跟蹤在較舊的掛起存儲(chǔ)之前對(duì)存儲(chǔ)器發(fā)出的任一個(gè)或全部加載的預(yù)測(cè)的成功。
例如,在一個(gè)實(shí)施例中,當(dāng)上述預(yù)測(cè)機(jī)制啟用時(shí),兩個(gè)計(jì)數(shù)器-消歧計(jì)數(shù)器和刷新計(jì)數(shù)器-用來(lái)跟蹤加載預(yù)測(cè)的成功率。具體來(lái)說(shuō),每當(dāng)加載被成功地預(yù)測(cè)為與較舊的掛起存儲(chǔ)操作沒(méi)有沖突、因而從存儲(chǔ)器加載目標(biāo)信息而無(wú)需按照程序順序?qū)Υ鎯?chǔ)器發(fā)出(例如從MOB)時(shí),消歧計(jì)數(shù)器可遞增。另一方面,每當(dāng)加載被誤預(yù)測(cè)為與較舊的掛起存儲(chǔ)操作沒(méi)有沖突(在一個(gè)實(shí)施例中可在加載退出之后來(lái)確定)時(shí),刷新計(jì)數(shù)器可遞減。另外,刷新計(jì)數(shù)器可增加來(lái)自消歧計(jì)數(shù)器的進(jìn)位值。在刷新計(jì)數(shù)器遞減到低于零、由此創(chuàng)建消歧計(jì)數(shù)器值與刷新計(jì)數(shù)器值之間的負(fù)比率之后,預(yù)測(cè)機(jī)制被禁用,并且對(duì)于較舊的存儲(chǔ)從MOB中按照程序順序?qū)Υ鎯?chǔ)器發(fā)出加載。
是否啟用預(yù)測(cè)機(jī)制的確定也可依靠計(jì)數(shù)器、例如計(jì)算成功的將要變成的預(yù)測(cè)的數(shù)量的預(yù)測(cè)計(jì)數(shù)器以及另一個(gè)計(jì)數(shù)器、如計(jì)算將要變成的誤預(yù)測(cè)的數(shù)量的誤預(yù)測(cè)計(jì)數(shù)器的使用。在一個(gè)實(shí)施例中,在退出原本在啟用預(yù)測(cè)機(jī)制時(shí)會(huì)被成功地預(yù)測(cè)為與較舊的掛起存儲(chǔ)沒(méi)有沖突的加載之后,預(yù)測(cè)計(jì)數(shù)器遞減。在退出原本在啟用預(yù)測(cè)機(jī)制時(shí)會(huì)被誤預(yù)測(cè)為與較舊的掛起存儲(chǔ)沒(méi)有沖突的加載之后,預(yù)測(cè)計(jì)數(shù)器復(fù)位到某個(gè)初始值(例如“0”),并且誤預(yù)測(cè)計(jì)數(shù)器遞增。在預(yù)測(cè)計(jì)數(shù)器達(dá)到飽和值(例如計(jì)數(shù)器的最大數(shù)量)并且誤預(yù)測(cè)計(jì)數(shù)器沒(méi)有超過(guò)最大門限之后,可啟用加載的預(yù)測(cè)機(jī)制。飽和值可取決于實(shí)現(xiàn)者認(rèn)為存在足夠的成功加載預(yù)測(cè)來(lái)保證重新啟用預(yù)測(cè)機(jī)制的時(shí)間。在一個(gè)實(shí)施例中,這可通過(guò)對(duì)于每1個(gè)(例如對(duì)應(yīng)于一個(gè)或多個(gè)位的誤預(yù)測(cè)計(jì)數(shù)器)將要變成的誤預(yù)測(cè)的256個(gè)(例如對(duì)應(yīng)于8位的預(yù)測(cè)計(jì)數(shù)器)將要變成的成功預(yù)測(cè)的比率來(lái)反映。
類似地,預(yù)測(cè)機(jī)制可在滿足成功對(duì)不成功預(yù)測(cè)的預(yù)期比率之后被禁用。例如,在一個(gè)實(shí)施例中,如果對(duì)于每1024個(gè)(例如對(duì)應(yīng)于16位消歧計(jì)數(shù)器)成功預(yù)測(cè)出現(xiàn)4個(gè)(例如對(duì)應(yīng)于2位刷新計(jì)數(shù)器)或4個(gè)以上誤預(yù)測(cè),則禁用預(yù)測(cè)機(jī)制。在其它實(shí)施例中,其它技術(shù)可用來(lái)跟蹤預(yù)測(cè)的成功率,例如時(shí)間相關(guān)計(jì)數(shù)器,以便確定啟用或禁用預(yù)測(cè)機(jī)制的時(shí)間。
例如以上所述的看門狗單元可防止無(wú)沖突加載的不合理誤預(yù)測(cè)基本上影響處理器性能。圖5給出狀態(tài)圖,說(shuō)明根據(jù)一個(gè)實(shí)施例的看門狗單元的功能。在活動(dòng)狀態(tài)501,在各成功預(yù)測(cè)和刷新計(jì)數(shù)器根據(jù)高于其最大允許值的消歧進(jìn)位來(lái)遞增之后,消歧計(jì)數(shù)器將遞增,而刷新計(jì)數(shù)器則每當(dāng)加載被誤預(yù)測(cè)時(shí)遞減。在一個(gè)實(shí)施例中,如果刷新計(jì)數(shù)器遞減到低于零,則清除所有計(jì)數(shù)器,并且狀態(tài)圖轉(zhuǎn)變?yōu)榻脿顟B(tài)505。在禁用狀態(tài)中,如果預(yù)測(cè)已經(jīng)成功(即,如果處于啟用狀態(tài)),則刷新計(jì)數(shù)器遞增,而如果誤預(yù)測(cè)已經(jīng)發(fā)生(即,如果處于啟用狀態(tài)),則刷新計(jì)數(shù)器被清除到其初始狀態(tài)。在一個(gè)實(shí)施例中,在刷新計(jì)數(shù)器達(dá)到其最大值或者另外某個(gè)門限值之后,或者如果出現(xiàn)來(lái)自計(jì)數(shù)器的進(jìn)位,則啟用預(yù)測(cè)機(jī)制。
在一個(gè)實(shí)施例中,加載緩沖器條目也可包括存儲(chǔ)表明相應(yīng)的加載是否在較舊的存儲(chǔ)操作之前已經(jīng)分發(fā)給存儲(chǔ)器的存儲(chǔ)器消歧推測(cè)(MDS)位的存儲(chǔ)單元,但用于處于禁用狀態(tài)的看門狗單元。MDS位或者相似功能性的位可幫助確定各種加載操作的“命中率”。
圖6是流程圖,說(shuō)明根據(jù)一個(gè)實(shí)施例、在執(zhí)行本發(fā)明的各個(gè)方面時(shí)可執(zhí)行的操作。在操作601,如果加載緩沖器中的特定加載的飽和計(jì)數(shù)器處于門限,則在操作610在看門狗處于啟用狀態(tài)時(shí)加載被預(yù)測(cè)為與任何較舊的掛起存儲(chǔ)沒(méi)有沖突,因而可在操作615對(duì)存儲(chǔ)器無(wú)序地發(fā)出。如果加載的飽和計(jì)數(shù)器沒(méi)有處于門限,則飽和計(jì)數(shù)器在操作605遞增。如果看門狗不是處于啟用狀態(tài),則在操作611按照程序順序發(fā)出該加載。然后在操作612,檢驗(yàn)加載是否與較舊的掛起存儲(chǔ)沖突。如果加載有沖突,則將要變成的誤預(yù)測(cè)計(jì)數(shù)器在操作613遞減。如果沒(méi)有沖突,則將要變成的成功預(yù)測(cè)計(jì)數(shù)器在操作614遞增。如果加載被預(yù)測(cè)為與任何較舊的存儲(chǔ)沒(méi)有沖突,并且在操作620,預(yù)測(cè)在退出加載時(shí)原來(lái)是正確的,則成功消歧計(jì)數(shù)器在操作625遞增。但是,如果加載被誤預(yù)測(cè)為與任何較舊的掛起存儲(chǔ)沒(méi)有沖突,則在操作630,飽和計(jì)數(shù)器復(fù)位,以及刷新計(jì)數(shù)器遞減。
圖7說(shuō)明在其中可使用本發(fā)明的一個(gè)實(shí)施例的前端總線(FSB)計(jì)算機(jī)系統(tǒng)。處理器705從第一級(jí)(L1)高速緩沖存儲(chǔ)器710和主存儲(chǔ)器715中存取數(shù)據(jù)。在本發(fā)明的其它實(shí)施例中,高速緩沖存儲(chǔ)器可能是第二級(jí)(L2)高速緩存或者是計(jì)算機(jī)系統(tǒng)存儲(chǔ)器分層結(jié)構(gòu)中的其它存儲(chǔ)器。此外,在一些實(shí)施例中,圖7的計(jì)算機(jī)系統(tǒng)可包含L1高速緩存以及L2高速緩存。
圖7的處理器中所示的是機(jī)器狀態(tài)的存儲(chǔ)區(qū)706。在一個(gè)實(shí)施例中,存儲(chǔ)區(qū)可能是一組寄存器,而在其它實(shí)施例中,存儲(chǔ)區(qū)可能是其它存儲(chǔ)器結(jié)構(gòu)。圖7中還表示的是根據(jù)一個(gè)實(shí)施例、用于保持區(qū)段的存儲(chǔ)區(qū)707。在其它實(shí)施例中,保持區(qū)段可能位于其它裝置或存儲(chǔ)器結(jié)構(gòu)中。處理器可具有任何數(shù)量的處理核。但是,本發(fā)明的其它實(shí)施例可在系統(tǒng)的其它裝置、如獨(dú)立總線代理中實(shí)現(xiàn),或者通過(guò)硬件、軟件或它們的某種組合分布于整個(gè)系統(tǒng)。
主存儲(chǔ)器可通過(guò)各種存儲(chǔ)源來(lái)實(shí)現(xiàn),例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、硬盤驅(qū)動(dòng)器(HDD)720或者經(jīng)由網(wǎng)絡(luò)接口730遠(yuǎn)離計(jì)算機(jī)系統(tǒng)設(shè)置的包含各種存儲(chǔ)裝置和技術(shù)的存儲(chǔ)源。高速緩沖存儲(chǔ)器可設(shè)置在處理器內(nèi)或者設(shè)置在處理器附近,例如設(shè)置在處理器的本地總線707上。
此外,高速緩沖存儲(chǔ)器可包含較快的存儲(chǔ)單元、如六晶體管(6T)單元,或者接近相等或更快的存取速度的其它存儲(chǔ)單元。圖7的計(jì)算機(jī)系統(tǒng)可能是例如微處理器等的總線代理的點(diǎn)對(duì)點(diǎn)(PtP)網(wǎng)絡(luò),它們經(jīng)由專用于PtP網(wǎng)絡(luò)上的各代理的總線信號(hào)進(jìn)行通信。圖8說(shuō)明以點(diǎn)對(duì)點(diǎn)(PtP)配置來(lái)設(shè)置的計(jì)算機(jī)系統(tǒng)。具體來(lái)說(shuō),圖8說(shuō)明其中的處理器、存儲(chǔ)器和輸入/輸出裝置通過(guò)多個(gè)點(diǎn)對(duì)點(diǎn)接口互連的系統(tǒng)。
圖8的系統(tǒng)還可包括若干處理器,為了簡(jiǎn)潔起見(jiàn)僅示出其中兩個(gè)處理器870、880。處理器870、880均可包括與存儲(chǔ)器22、24連接的本地存儲(chǔ)控制器集線器(MCH)872、882。處理器870、880可采用PtP接口電路878、888經(jīng)由點(diǎn)對(duì)點(diǎn)(PtP)接口850來(lái)交換數(shù)據(jù)。處理器870、880均可采用點(diǎn)對(duì)點(diǎn)接口電路876、894、886、898經(jīng)由各個(gè)PtP接口852、854與芯片組890交換數(shù)據(jù)。芯片組890還可經(jīng)由高性能圖形接口839與高性能圖形電路838交換數(shù)據(jù)。本發(fā)明的實(shí)施例可設(shè)置在具有任何數(shù)量的處理核的任何處理器中或者設(shè)置在圖8的PtP總線代理的每個(gè)中。
但是,本發(fā)明的其它實(shí)施例可存在于圖8的系統(tǒng)的其它電路、邏輯單元或裝置中。此外,本發(fā)明的其它實(shí)施例可分布于圖8所示的若干電路、邏輯單元或裝置上。
本文涉及的處理器或者根據(jù)本發(fā)明的一個(gè)實(shí)施例設(shè)計(jì)的其它任何組件可在從創(chuàng)建到模擬到制造的各個(gè)階段中進(jìn)行設(shè)計(jì)。表示設(shè)計(jì)的數(shù)據(jù)可通過(guò)多種方式來(lái)表示設(shè)計(jì)。首先,如在模擬中可用的那樣,硬件可采用硬件描述語(yǔ)言或者另一種功能描述語(yǔ)言來(lái)表示。作為補(bǔ)充或替代,采用邏輯和/或晶體管門電路的電路級(jí)模型可在設(shè)計(jì)過(guò)程的部分階段產(chǎn)生。此外,在某個(gè)階段,大部分設(shè)計(jì)達(dá)到在其中它們可采用表示各種裝置的物理設(shè)置的數(shù)據(jù)來(lái)建模的等級(jí)。在使用傳統(tǒng)半導(dǎo)體制造技術(shù)的情況中,表示裝置設(shè)置模型的數(shù)據(jù)可能是指定在用于生產(chǎn)集成電路的掩模的不同掩模層上的各種特征是否存在的數(shù)據(jù)。
在設(shè)計(jì)的任何表示中,數(shù)據(jù)可存儲(chǔ)在任何形式的機(jī)器可讀媒體中。經(jīng)調(diào)制或者以其它方式產(chǎn)生以便傳送這種信息的光或電波、存儲(chǔ)器或者磁或光存儲(chǔ)裝置、如盤可能是機(jī)器可讀媒體。這些媒體的任一個(gè)可“承載”或“表明”該設(shè)計(jì)或者在本發(fā)明的實(shí)施例中使用的其它信息、如差錯(cuò)恢復(fù)例程中的指令。傳送表明或承載信息的電載波以便執(zhí)行電信號(hào)的復(fù)制、緩沖或重傳時(shí),制作新的副本。因此,通信提供商或網(wǎng)絡(luò)提供商的動(dòng)作可能是制作體現(xiàn)本發(fā)明的技術(shù)的產(chǎn)品、如載波的副本。
因此,公開用于引導(dǎo)存儲(chǔ)器存取、如加載或存儲(chǔ)的技術(shù)。雖然在附圖中描述和表示了某些實(shí)施例,但是要理解,這些實(shí)施例只是對(duì)廣泛的發(fā)明的說(shuō)明而不是限制,以及本發(fā)明不限于所示及所述的具體構(gòu)造和配置,因?yàn)楸绢I(lǐng)域的技術(shù)人員在研究本公開之后可能會(huì)想到其它各種修改。在其中的增長(zhǎng)迅速并且不易預(yù)見(jiàn)其它進(jìn)步的例如這樣的技術(shù)的領(lǐng)域中,通過(guò)實(shí)現(xiàn)技術(shù)進(jìn)步進(jìn)行促進(jìn),所公開的實(shí)施例在配置和細(xì)節(jié)上可易于修改,而沒(méi)有背離本公開的原理或所附權(quán)利要求書的范圍。
本發(fā)明的一個(gè)或多個(gè)實(shí)施例的各個(gè)方面可能在可使用本發(fā)明的一個(gè)或多個(gè)實(shí)施例的處理器或計(jì)算機(jī)系統(tǒng)的廣告中描述、論述或引用。這類廣告可包括但不限于新聞紙、雜志、廣告牌或其它報(bào)紙或有形媒體。具體來(lái)說(shuō),本發(fā)明的一個(gè)或多個(gè)實(shí)施例的各個(gè)方面可經(jīng)由網(wǎng)站、彈出 廣告或其它基于萬(wàn)維網(wǎng)的媒體在互聯(lián)網(wǎng)上做廣告,而不管包含生成網(wǎng)站或彈出廣告的程序是位于美國(guó)還是其領(lǐng)區(qū)。
權(quán)利要求
1.一種處理器,包括加載緩沖器,包括多個(gè)加載緩沖器條目,其中的每個(gè)具有與其關(guān)聯(lián)的預(yù)測(cè)器表?xiàng)l目,所述預(yù)測(cè)器表?xiàng)l目包括記錄對(duì)應(yīng)于相同目標(biāo)地址的加載與存儲(chǔ)之間的先前沖突的歷史的飽和計(jì)數(shù)器。
2.如權(quán)利要求1所述的處理器,還包括第一邏輯,用以發(fā)出加載操作以便在發(fā)出向存儲(chǔ)器地址存儲(chǔ)數(shù)據(jù)的存儲(chǔ)操作之前從所述存儲(chǔ)器地址中加載數(shù)據(jù),所述存儲(chǔ)操作按程序順序是在所述加載操作之前。
3.如權(quán)利要求1所述的處理器,其中在各加載被正確預(yù)測(cè)為與對(duì)應(yīng)于和所述加載相同的目標(biāo)地址的存儲(chǔ)沒(méi)有沖突之后,所述飽和計(jì)數(shù)器將遞增。
4.如權(quán)利要求3所述的處理器,其中如果所述飽和計(jì)數(shù)器達(dá)到門限計(jì)數(shù),則允許在對(duì)所述目標(biāo)地址發(fā)出較舊的掛起存儲(chǔ)之前對(duì)所述目標(biāo)地址發(fā)出后續(xù)加載。
5.如權(quán)利要求4所述的處理器,其中如果與所述相同目標(biāo)地址對(duì)應(yīng)的存儲(chǔ)和加載操作被誤預(yù)測(cè)為沒(méi)有沖突,則所述飽和計(jì)數(shù)器將被復(fù)位。
6.如權(quán)利要求1所述的處理器,還包括看門狗單元,用以在出現(xiàn)最大的不正確預(yù)測(cè)率時(shí)禁止所述預(yù)測(cè)表?xiàng)l目來(lái)預(yù)測(cè)對(duì)應(yīng)于所述相同目標(biāo)地址的加載和存儲(chǔ)是否彼此沖突。
7.如權(quán)利要求6所述的處理器,其中如果誤預(yù)測(cè)率降低到低于所述最大的不正確預(yù)測(cè)率,則所述看門狗單元將啟用所述預(yù)測(cè)表?xiàng)l目。
8.如權(quán)利要求1所述的處理器,其中所述存儲(chǔ)包括存儲(chǔ)地址微操作,以及所述加載包括加載微操作。
9.一種處理器,包括預(yù)測(cè)單元,用以預(yù)測(cè)從存儲(chǔ)器地址加載數(shù)據(jù)的加載操作是否將與向所述存儲(chǔ)器地址存儲(chǔ)數(shù)據(jù)的較舊的掛起存儲(chǔ)操作沖突;看門狗單元,用以在所述預(yù)測(cè)單元誤預(yù)測(cè)所述加載操作是否將與所述較舊的掛起存儲(chǔ)操作沖突時(shí)禁用所述預(yù)測(cè)單元。
10.如權(quán)利要求9所述的處理器,其中所述預(yù)測(cè)單元包括多個(gè)預(yù)測(cè)器表?xiàng)l目,各包括記錄對(duì)應(yīng)于所述相同目標(biāo)地址的加載與存儲(chǔ)之間的先前沖突的歷史的飽和計(jì)數(shù)器。
11.如權(quán)利要求9所述的處理器,還包括從其中發(fā)出加載操作以便在發(fā)出向存儲(chǔ)器地址存儲(chǔ)數(shù)據(jù)的存儲(chǔ)操作之前從所述存儲(chǔ)器地址中加載數(shù)據(jù)的保留站,所述存儲(chǔ)操作按照程序順序是在所述加載操作之前。
12.如權(quán)利要求9所述的處理器,還包括存儲(chǔ)多個(gè)加載直到確定其目標(biāo)地址為止的加載緩沖器,其中,所述加載緩沖器的各條目包括存儲(chǔ)表明是否將在存儲(chǔ)器地址的較舊的掛起存儲(chǔ)之前對(duì)所述相同存儲(chǔ)器地址發(fā)出相應(yīng)加載的MDA位的存儲(chǔ)器消歧允許(MDA)位存儲(chǔ)區(qū)。
13.如權(quán)利要求12所述的處理器,其中各加載緩沖器條目還包括存儲(chǔ)表明是否將在存儲(chǔ)器地址的較舊的掛起存儲(chǔ)之前對(duì)所述相同存儲(chǔ)器地址發(fā)出相應(yīng)加載的MDD位的存儲(chǔ)器消歧完成(MDD)位存儲(chǔ)區(qū)。
14.如權(quán)利要求13所述的處理器,其中各加載緩沖器條目還包括存儲(chǔ)表明是否將更新相應(yīng)的預(yù)測(cè)表?xiàng)l目的MDU位的存儲(chǔ)器消歧更新(MDU)位存儲(chǔ)區(qū)。
15.如權(quán)利要求14所述的處理器,其中各加載緩沖器條目還包括存儲(chǔ)表明是否將復(fù)位相應(yīng)的預(yù)測(cè)表?xiàng)l目的MDR位的存儲(chǔ)器消歧復(fù)位(MDR)位存儲(chǔ)區(qū)。
16.如權(quán)利要求15所述的處理器,還包括存儲(chǔ)多個(gè)存儲(chǔ)直到確定其目標(biāo)地址為止以及存儲(chǔ)表明比所述存儲(chǔ)緩沖器中的特定存儲(chǔ)更新的所述加載緩沖器中的最舊的加載的加載色的存儲(chǔ)緩沖器。
17.如權(quán)利要求16所述的處理器,其中所述加載緩沖器的每個(gè)將存儲(chǔ)表明比所述加載緩沖器中的特定加載較舊的所述存儲(chǔ)緩沖器中的最新的存儲(chǔ)的存儲(chǔ)色。
18.一種系統(tǒng),包括第一存儲(chǔ)器,用以存儲(chǔ)向第一存儲(chǔ)單元存儲(chǔ)數(shù)據(jù)的存儲(chǔ)指令以及從所述存儲(chǔ)單元加載數(shù)據(jù)的加載指令;處理器,用以在所述加載指令之前從所述第一存儲(chǔ)器中取所述存儲(chǔ)指令,其中,所述處理器包括預(yù)測(cè)是否在對(duì)第二存儲(chǔ)器發(fā)出存儲(chǔ)信號(hào)之前對(duì)所述第二存儲(chǔ)器發(fā)出加載信號(hào)的預(yù)測(cè)表,其中所述存儲(chǔ)信號(hào)從執(zhí)行所述存儲(chǔ)指令來(lái)產(chǎn)生,以及所述加載信號(hào)從執(zhí)行所述加載指令來(lái)產(chǎn)生,所述預(yù)測(cè)表的各條目包括存儲(chǔ)與所述第二存儲(chǔ)器的相同存儲(chǔ)器地址的存儲(chǔ)指令沖突的加載指令的記錄歷史的飽和計(jì)數(shù)器。
19.如權(quán)利要求18所述的系統(tǒng),還包括耦合到所述處理器以便傳送由執(zhí)行所述加載指令的所述處理器所產(chǎn)生的加載信號(hào)的總線,所述加載信號(hào)將在由執(zhí)行所述存儲(chǔ)指令的所述處理器所產(chǎn)生的存儲(chǔ)信號(hào)之前通過(guò)所述總線被傳送。
20.如權(quán)利要求19所述的系統(tǒng),其中所述預(yù)測(cè)表將根據(jù)與將在較舊的掛起存儲(chǔ)操作之前對(duì)存儲(chǔ)器發(fā)出的加載操作對(duì)應(yīng)的指令指針的散列形式來(lái)索引。
21.如權(quán)利要求20所述的系統(tǒng),還包括在達(dá)到加載的最大的不正確預(yù)測(cè)率時(shí)禁用與所述加載對(duì)應(yīng)的飽和計(jì)數(shù)器的看門狗單元。
22.如權(quán)利要求21所述的系統(tǒng),其中如果所述加載的誤預(yù)測(cè)率降到低于所述最大的不正確預(yù)測(cè)率,則所述看門狗單元將啟用所述飽和計(jì)數(shù)器。
23.如權(quán)利要求22所述的系統(tǒng),其中所述處理器將把加載指令解碼為至少一個(gè)加載微操作(uop)。
24.如權(quán)利要求23所述的系統(tǒng),其中所述處理器將把存儲(chǔ)指令解碼為至少一個(gè)存儲(chǔ)地址uop和至少一個(gè)存儲(chǔ)數(shù)據(jù)uop。
25.如權(quán)利要求24所述的系統(tǒng),其中如果所述至少一個(gè)加載uop被預(yù)測(cè)為與任何較舊的掛起存儲(chǔ)地址uop沒(méi)有沖突,則將對(duì)所述第二存儲(chǔ)器發(fā)出所述至少一個(gè)加載uop。
26.如權(quán)利要求25所述的系統(tǒng),其中所述處理器包括同時(shí)處理多個(gè)加載指令和多個(gè)存儲(chǔ)指令的多個(gè)流水線級(jí)。
27.一種方法,包括如果對(duì)應(yīng)于加載操作的飽和計(jì)數(shù)器低于門限值并且沒(méi)有出現(xiàn)最大的誤預(yù)測(cè)率,則把所述加載操作預(yù)測(cè)為與較舊的掛起存儲(chǔ)操作沒(méi)有沖突;如果所述加載操作被預(yù)測(cè)為與所述較舊的掛起存儲(chǔ)操作沒(méi)有沖突,則使所述飽和計(jì)數(shù)器遞增。
28.如權(quán)利要求27所述的方法,還包括在所述加載操作被預(yù)測(cè)為與所述較舊的掛起存儲(chǔ)操作沒(méi)有沖突時(shí),在所述較舊的掛起存儲(chǔ)操作之前加載與所述加載操作的目標(biāo)地址對(duì)應(yīng)的數(shù)據(jù)。
29.如權(quán)利要求28所述的方法,還包括確定所述預(yù)測(cè)是否正確。
30.如權(quán)利要求29所述的方法,還包括在所述預(yù)測(cè)不正確時(shí),復(fù)位所述飽和計(jì)數(shù)器。
31.如權(quán)利要求29所述的方法,還包括在所述預(yù)測(cè)不正確時(shí),銷毀(nuking)所述加載操作。
32.如權(quán)利要求29所述的方法,還包括在所述預(yù)測(cè)不正確時(shí),與所述較舊的掛起存儲(chǔ)操作按照程序順序再發(fā)出所述加載操作。
33.如權(quán)利要求29所述的方法,還包括在所述預(yù)測(cè)不正確時(shí),使看門狗刷新計(jì)數(shù)器遞減。
34.如權(quán)利要求33所述的方法,還包括在所述預(yù)測(cè)正確時(shí),使看門狗消歧計(jì)數(shù)器遞增。
35.如權(quán)利要求34所述的方法,還包括在所述消歧計(jì)數(shù)器值和所述刷新計(jì)數(shù)器值的比率達(dá)到最小值時(shí),禁用所述預(yù)測(cè)。
36.一種設(shè)備,包括看門狗單元,用以在存儲(chǔ)器消歧(MD)邏輯引起關(guān)于來(lái)自第一存儲(chǔ)器地址的加載操作和對(duì)于所述第一存儲(chǔ)器地址的存儲(chǔ)操作是否彼此有沖突的最大的誤預(yù)測(cè)率時(shí),禁用所述MD邏輯。
37.如權(quán)利要求36所述的設(shè)備,還包括響應(yīng)所述加載操作和所述存儲(chǔ)操作是否彼此有沖突的誤預(yù)測(cè)而遞減的刷新計(jì)數(shù)器。
38.如權(quán)利要求37所述的設(shè)備,還包括響應(yīng)所述加載操作和所述存儲(chǔ)操作是否彼此有沖突的正確預(yù)測(cè)而遞增的看門狗消歧計(jì)數(shù)器。
39.如權(quán)利要求38所述的設(shè)備,其中如果所述消歧計(jì)數(shù)器值和所述刷新計(jì)數(shù)器值的比率達(dá)到負(fù)值,則將禁用所述MD邏輯。
40.如權(quán)利要求39所述的設(shè)備,其中如果所述MD邏輯引起關(guān)于來(lái)自所述第一存儲(chǔ)器地址的所述加載操作和對(duì)于所述第一存儲(chǔ)器地址的存儲(chǔ)操作是否彼此沒(méi)有沖突的最小的正確預(yù)測(cè)率,則所述看門狗單元將啟用所述MD邏輯。
41.如權(quán)利要求40所述的設(shè)備,其中如果所述消歧計(jì)數(shù)器遞增產(chǎn)生進(jìn)位值,則所述刷新計(jì)數(shù)器將遞增。
42.如權(quán)利要求41所述的設(shè)備,其中所述看門狗單元包括具有至少一個(gè)活動(dòng)狀態(tài)和一個(gè)禁用狀態(tài)的狀態(tài)機(jī),其中,所述刷新計(jì)數(shù)器中的負(fù)值將使所述狀態(tài)機(jī)從所述活動(dòng)狀態(tài)轉(zhuǎn)變?yōu)樗鼋脿顟B(tài)。
43.如權(quán)利要求42所述的設(shè)備,其中如果在任何相應(yīng)的較舊的存儲(chǔ)操作之前滿足最小數(shù)量的無(wú)沖突加載,則所述狀態(tài)機(jī)將從所述禁用狀態(tài)轉(zhuǎn)變?yōu)樗龌顒?dòng)狀態(tài)。
全文摘要
一種存儲(chǔ)器存取管理技術(shù)。更具體來(lái)說(shuō),本發(fā)明的至少一個(gè)實(shí)施例涉及在對(duì)應(yīng)于相同目標(biāo)地址的較舊的存儲(chǔ)操作之前對(duì)存儲(chǔ)器發(fā)出加載的技術(shù)。
文檔編號(hào)G06F9/318GK101067781SQ20071008773
公開日2007年11月7日 申請(qǐng)日期2007年3月6日 優(yōu)先權(quán)日2006年3月7日
發(fā)明者E·克里默, G·薩夫蘭斯基, I·蒙亞克, J·多維克 申請(qǐng)人:英特爾公司