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