欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

零周期加載的制作方法

文檔序號:6504257閱讀:240來源:國知局
零周期加載的制作方法
【專利摘要】用于減少加載操作的等待時間的系統(tǒng)與方法。處理器中的寄存器重命名單元確定解碼后的加載指令是否有資格轉(zhuǎn)換成零周期加載操作。如果有,控制邏輯就向該加載指令的目的地操作數(shù)分配與較舊的從屬存儲指令的源操作數(shù)關(guān)聯(lián)的物理寄存器標識符。此外,寄存器重命名單元標記該加載指令,以防它從存儲器中讀取與所述存儲指令的源操作數(shù)關(guān)聯(lián)的數(shù)據(jù)。由于副本重命名,這個數(shù)據(jù)可以從物理寄存器文件轉(zhuǎn)發(fā)到更年輕的且依賴于該加載指令的指令。
【專利說明】零周期加載
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及微處理器,尤其涉及有效地減小加載操作的等待時間和功率。
【背景技術(shù)】
[0002]微處理器一般包括重疊的管線階段(pipeline stage)和指令的無序執(zhí)行。另外,微處理器可以支持同時的多線程,以便增加吞吐量。這些技術(shù)利用了源代碼中的指令級并行性(ILP)。在每個時鐘周期中,對于管線的每個階段,微處理器理想地產(chǎn)生每個線程最多N條指令的有用執(zhí)行,其中N是大于一的整數(shù)。但是,控制依賴和數(shù)據(jù)依賴把微處理器的最大吞吐量降至低于每個周期N條指令。
[0003]不管源代碼中控制依賴,指令的推測性執(zhí)行還是用于執(zhí)行指令的并行執(zhí)行。在指令的操作數(shù)依賴于按照程序順序的較舊指令的結(jié)果的時候,會發(fā)生數(shù)據(jù)依賴。數(shù)據(jù)依賴可以出現(xiàn)在直線代碼片段中后續(xù)指令的操作數(shù)之間或者屬于后續(xù)循環(huán)迭代的指令的操作數(shù)之間。在直線代碼中,會遇到寫后讀(RAW)、讀后寫(WAR)或者寫后寫(WAW)依賴。盡管存在WAR和WAW依賴,但寄存器重命名還是用來允許指令的并行執(zhí)行。但是,真正的依賴,或者說RAW依賴,仍然是原封未動的。因此,重復(fù)地先用作目的地寄存器隨后又用作源寄存器的體系結(jié)構(gòu)寄存器對于關(guān)聯(lián)的源代碼片段導(dǎo)致指令執(zhí)行的串行化。
[0004]對于體系結(jié)構(gòu)寄存器來說,常見的RAW依賴的一個例子是試圖讀取已經(jīng)被(按照程序順序)較舊存儲指令修改但還沒有把其結(jié)果提交到該存儲器位置的存儲器位置的加載指令,或者說讀操作。這種類型的RAW依賴在程序執(zhí)行過程中會頻繁地發(fā)生。讀取存儲器位置可以包括能感覺到的等待時間并且降低處理器吞吐量。
[0005]鑒于以上所述,期望用于有效地降低加載操作的等待時間的有效方法與機制。

【發(fā)明內(nèi)容】

[0006]提供了用于有效地降低加載操作的等待時間的系統(tǒng)與方法。在一種實施例中,處理器包括寄存器重命名單元,該單元接收解碼的指令并且確定解碼的給定指令是否有資格成為零周期加載操作(zero-cycle load operation)。合格者的例子可以包括給定加載指令對于給定存儲指令的預(yù)測存儲器依賴(memory dependency)。此外,合格者可以包括存在用于為給定物理寄存器號維護映射的副本計數(shù)的可用支持的檢測。如果確定為真,重命名寄存器單元可以把與給定存儲指令的源操作數(shù)關(guān)聯(lián)的物理寄存器號指定給給定加載指令的目的地操作數(shù)。
[0007]另外,寄存器重命名單元中的控制邏輯可以標記給定的加載指令,以防它從存儲器中讀取與存儲指令的源操作數(shù)關(guān)聯(lián)的數(shù)據(jù)。由于副本重命名,這個數(shù)據(jù)可以從物理寄存器文件轉(zhuǎn)發(fā)到(按照程序順序)更年輕并且依賴于給定加載指令的指令。在隨后的管線階段中,可以驗證預(yù)測的存儲器依賴。如果存儲器依賴是正確的,就可以認為給定的加載指令不需要從存儲器(數(shù)據(jù)高速緩存)或者從存儲緩沖區(qū)讀取操作數(shù)數(shù)據(jù)就能夠完成。如果該存儲器依賴不正確,則給定的加載指令和(按照程序順序)更年輕的指令可以從管線中沖刷掉并且重放。
[0008]參考以下描述和附圖,這些及其它實施例將得到進一步的認識。
【專利附圖】

【附圖說明】
[0009]圖1是計算機系統(tǒng)的一種實施例的廣義框圖。
[0010]圖2是利用零周期加載操作執(zhí)行超標量(superscalar)、無序(out-of-order)執(zhí)行的處理器核心的一種實施例的廣義框圖。
[0011]圖3是用于檢測零周期加載操作的方法的一種實施例的通用流程圖。
[0012]圖4是用于處理零周期加載操作的方法的一種實施例的通用流程圖。
[0013]圖5是用于提交包括零周期加載操作的指令的方法的一種實施例的通用流程圖。
[0014]盡管本發(fā)明很容易有各種修改與備選形式,但是其具體實施例在附圖中作為例子示出并且將在這里詳細描述。但是,應(yīng)當理解,附圖及對其的具體描述不是要把本發(fā)明限定到所公開的特定形式,而是相反,本發(fā)明是要覆蓋屬于由所附權(quán)利要求定義的本發(fā)明主旨與范圍的所有修改、等同與備選。如貫穿本申請所使用的,“可以”一詞是在許可的意義上(即,意味著有可能)而不是在強制的意義上(即,意味著必須)使用的。類似地,“包括”一詞意味著包括但不限于。
[0015]各種單元、電路或者其它部件可以描述為“配置成”執(zhí)行一個或多個任務(wù)。在這種背景下,“配置成”是結(jié)構(gòu)的廣泛記載,通常意味著“具有”在操作過程中執(zhí)行所述任務(wù)的“電路”。因此,即使單元/電路/部件目前未開啟,單元/電路/部件也可以配置成執(zhí)行所述任務(wù)??偟膩碚f,構(gòu)成對應(yīng)于“配置成”的結(jié)構(gòu)的電路可以包括硬件電路。類似地,為了描述的方便,各種單元/電路/部件可以描述為執(zhí)行一個或多個任務(wù)。這種描述應(yīng)當解釋為包括短語“配置成”。記載配置成執(zhí)行一個或多個任務(wù)的單元/電路/部件明確地不是要對那個單元/電路/部件引用35U.S.C.§ 112的解釋。
具體實施例
[0016]在以下描述中,闡述了許多具體細節(jié),以便提供對本發(fā)明的透徹理解。但是,本領(lǐng)域普通技術(shù)人員應(yīng)當認識到,本發(fā)明沒有這些具體細節(jié)也能實踐。在有些情況下,為了避免模糊本發(fā)明,眾所周知的電路、結(jié)構(gòu)和技術(shù)沒有具體示出。
[0017]參考圖1,示出了計算機系統(tǒng)100的一種實施例的廣義框圖。如圖所示,微處理器110可以連接到一個或多個外圍設(shè)備150a-150b,及外部計算機存儲器,諸如盤存儲器130和動態(tài)隨機存取存儲器(DRAM) 140。盤存儲器130可以存儲用于計算機系統(tǒng)100的操作系統(tǒng)(OS)。軟件應(yīng)用的指令可以加載到微處理器110中的高速緩存存儲器子系統(tǒng)116中。軟件應(yīng)用可以已經(jīng)存儲在盤存儲器130、DRAM140和外圍設(shè)備150a_150b之一中的一個或多個當中。
[0018]盡管示出了單個處理器核心,但是微處理器110可以包括多個處理器核心。每個處理器核心可以連接到關(guān)聯(lián)的高速緩存存儲器子系統(tǒng)。此外,每個處理器核心可以共享另一高速緩存存儲器子系統(tǒng)。例如,多個處理器核心中的每一個可以使用關(guān)聯(lián)的一級(LI)高速緩存和二級(L2)高速緩存并且另外還與其它處理器核心共享三級(L3)高速緩存。如圖所示,處理器核心112可以從高速緩存存儲器子系統(tǒng)116加載軟件應(yīng)用指令并且處理這些指令。總的來說,當軟件程序員編寫根據(jù)一個算法或方法執(zhí)行工作的應(yīng)用時,程序員使用變量來引用臨時數(shù)據(jù)和結(jié)果數(shù)據(jù)。這種數(shù)據(jù)利用計算機存儲器中分配的空間。操作系統(tǒng)為軟件應(yīng)用分配存儲器區(qū)域。
[0019]處理器核心112可以包括物理寄存器文件中的多個物理寄存器114。物理寄存器114可以包括軟件程序員和/或編譯器可以在軟件應(yīng)用中識別的、在體系結(jié)構(gòu)上可見的寄存器。此外,物理寄存器114可以包括由重命名寄存器標識符識別的非體系結(jié)構(gòu)(推測性)寄存器。在體系結(jié)構(gòu)上可見的寄存器與給定的指令集體系結(jié)構(gòu)(ISA)關(guān)聯(lián)。在應(yīng)用的處理過程中,數(shù)據(jù)可以從所分配的存儲器區(qū)域加載到高速緩存存儲器子系統(tǒng)116中。物理寄存器114中的一個或多個可以用于加載并存儲臨時數(shù)據(jù)與結(jié)果數(shù)據(jù)。處理器核心112中的硬件包括根據(jù)給定ISA處理指令的電路。該硬件電路包括至少相關(guān)的一組體系結(jié)構(gòu)寄存器、功能性單元、管線分階段元件與控制邏輯??梢詾榻o定的ISA選擇ARM指令集體系結(jié)構(gòu)。備選地,可以選擇Alpha、PowerPC、SPARC、MIPS、x86或者任何其它ISA。
[0020]給定的ISA可以用于選擇聲明并分配存儲器區(qū)域的方式。給定的ISA可以進一步確定用于在包括物理寄存器114的微處理器110和盤存儲器130、DRAM140和外圍設(shè)備150a-150b中的一個或多個中的存儲器位置之間傳輸數(shù)據(jù)的被選尋址模式。加載和存儲指令一般都用于在存儲器和微處理器110之間及在高速緩存存儲器子系統(tǒng)116和物理寄存器114之間傳輸數(shù)據(jù)。計算機系統(tǒng)100中示出的虛線指示由加載和存儲操作執(zhí)行的數(shù)據(jù)傳輸?shù)睦印?梢愿杏X到的等待時間可以與這些數(shù)據(jù)傳輸中的每一個關(guān)聯(lián)。
[0021]除了指令對超標量微體系結(jié)構(gòu)中執(zhí)行單元的無序發(fā)布,處理器核心112還可以執(zhí)行寄存器重命名來增加吞吐量。利用硬件,處理器核心112動態(tài)地重命名用于目的地操作數(shù)的體系結(jié)構(gòu)寄存器標識符。與該目的地操作數(shù)具有相同的體系結(jié)構(gòu)寄存器標識符的源操作數(shù)可以利用用于該目的地操作數(shù)的相同重命名寄存器標識符來重命名。
[0022]在一種實施例中,處理器核心112包括檢測早期管線階段中的存儲指令并且緩沖至少所關(guān)聯(lián)的地址操作數(shù)標識符的控制邏輯。該早期管線階段可以按序處理指令,而在隨后的管線階段中,指令可以無序地發(fā)布和執(zhí)行。給定存儲指令的地址操作數(shù)在隨后的執(zhí)行管線階段中用于生成存儲地址。地址操作數(shù)可以包括用作基址寄存器ID的體系結(jié)構(gòu)寄存器標識符(ID)和用作偏移量的立即值。
[0023]在早期管線階段中,處理器核心112中的控制邏輯可以監(jiān)視后續(xù)指令,以便確定這些指令中的一個或多個是否修改用于給定存儲指令的一個或多個地址操作數(shù)。例如,可以發(fā)現(xiàn)地址操作數(shù)ID匹配一個或多個后續(xù)指令中的目的地操作數(shù)ID。這種監(jiān)視可以發(fā)生在無序發(fā)布與執(zhí)行管線階段之前的管線階段中。
[0024]控制邏輯可以繼續(xù)監(jiān)視給定存儲指令的后續(xù)指令,直到物理寄存器文件中對應(yīng)的條目被解除分配。這個條目可以響應(yīng)于所關(guān)聯(lián)的重命名寄存器標識符從映射表除去并返回空閑列表(free list)而解除分配。例如,(按照程序順序)存儲指令后面的指令可以具有等于給定存儲指令的源操作數(shù)標識符(源體系結(jié)構(gòu)寄存器標識符)的目的地操作數(shù)標識符(目的地體系結(jié)構(gòu)寄存器標識符)。當后續(xù)指令提交時,先前指定給該后續(xù)指令的目的地操作數(shù)的重命名寄存器標識符被放到空閑列表中以便讓另一個指令重用。這個被釋放的重命名寄存器標識符是用于給定存儲指令的源操作數(shù)的同一標識符。響應(yīng)于檢測到以上條件,對給定存儲指令的監(jiān)視可以終止。簡短地提供進一步的細節(jié)和例子。[0025]在一種實施例中,在監(jiān)視過程中,控制邏輯可以確定后續(xù)的加載操作與給定存儲指令具有匹配的地址操作數(shù),而且這些地址操作數(shù)已經(jīng)被居間指令修改過了。此外,控制邏輯可以確定沒有其它具有相同地址操作數(shù)的存儲指令位于給定的存儲指令與所述加載指令之間。換句話說,給定的存儲指令是具有地址操作數(shù)的最年輕的存儲指令。響應(yīng)于這種確定,可以設(shè)定或斷言這個加載指令與給定存儲指令之間的RAW依賴的指示。在另一種實施例中,附加信息,諸如至少指令標簽和程序計數(shù)器值,可以被比較或者用于索引預(yù)測表??刂七壿嬁梢栽谶@個早期管線階段中預(yù)測這個加載指令與給定存儲指令之間存在RAW依賴。這種RAW依賴的確定或預(yù)測可以發(fā)生在與寄存器重命名相同的管線階段中。備選地,所述確定或預(yù)測可以發(fā)生在比用于寄存器重命名的階段更早的管線階段中。在這里提供這種RAff依賴的例子:
[0026]ADD r7, r3, r5
[0027]STORE [rl0+4],r7 //地址操作數(shù)是 rlO 和 4
[0028]MOV rl2, rl6
[0029]LOAD rl4, [rlO+4] //地址操作數(shù)是 rlO 和 4
[0030]SUB r2,r6,rl4 //對于rl4,使用從存儲操作的源操
[0031]//作數(shù)r7轉(zhuǎn)發(fā)的數(shù)據(jù)
[0032]ADD rll,rl4,rl3 //對于rl4,使用從存儲操作的源操
[0033]//作數(shù)r7轉(zhuǎn)發(fā)的數(shù)據(jù)
[0034]在這個例子中,目的地操作數(shù)在指令助記符之后首先列出,隨后是一個或多個源操作數(shù)。寄存器使用后面跟著寄存器標識符的通用命名“r”。例如,寄存器7就表示為“r7”。以上例子中的指令意味著偽代碼例子而且與語言無關(guān)。如可以從以上看到的,加載指令具有與存儲指令相同的地址操作數(shù)。沒有居間指令修改地址操作數(shù)(rlO)。因而,控制邏輯可以確定加載指令對存儲指令具有RAW依賴。在其它實施例中,可以使用預(yù)測資格,諸如比較指令標簽,為了方便說明,這沒有示出。
[0035]響應(yīng)于確定或預(yù)測RAW依賴,加載指令的目的地操作數(shù)標識符(ID) (rl4)可以重命名成用于存儲指令的源操作數(shù)ID (r7)的同一重命名寄存器標識符。例如,如果存儲指令的源操作數(shù)ID (r7)被重命名成重命名寄存器標識符(P44),則加載指令的目的地操作數(shù)ID (rl4)可以重命名成相同的標識符P44。類似地,用于減法指令和最后的加法指令中每一個的源操作數(shù)ID rl4可以重命名成相同的重命名寄存器標識符(P44)。
[0036]處理器核心112中的控制邏輯可以無序地發(fā)布加載指令與后續(xù)指令。在這種情況下,盡管加載指令還沒有完成,但減法指令和最后的加法指令中的每一個可以在加載指令之前、期間或稍后發(fā)布。如果用于寄存器標識符r6和rl3的源操作數(shù)可用,那么減法指令和最后的加法指令可以在加載指令發(fā)布之前發(fā)布,更不用說完成。這些指令可以與從體系結(jié)構(gòu)源寄存器ID r7轉(zhuǎn)發(fā)的數(shù)據(jù)一起發(fā)布,其中r7是用于存儲指令的源操作數(shù)ID。通過使用寄存器重命名,要轉(zhuǎn)發(fā)的數(shù)據(jù)可以存儲在由重命名寄存器標識符P44識別的物理寄存器中,其中P44與源體系結(jié)構(gòu)寄存器ID r7關(guān)聯(lián)。因此,加載指令變成零周期操作。加載指令無需訪問存儲器,諸如片上多級高速緩存層次結(jié)構(gòu)和片外存儲器,就可以完成。
[0037]如果采取以上步驟并且加載指令被轉(zhuǎn)換成零周期操作,那么對于管線來說就可以增加指令吞吐量。由于(按照程序順序)更年輕的且依賴該加載指令的指令不用等待該加載指令從數(shù)據(jù)高速緩存、存儲緩沖區(qū)或片外存儲器檢索數(shù)據(jù),因此指令吞吐量可以增加。更確切地說,這些更年輕的依賴指令可以從物理寄存器文件接收數(shù)據(jù)。在繼續(xù)討論關(guān)于加載指令到零周期加載操作的轉(zhuǎn)換的進一步細節(jié)之前,提供計算機系統(tǒng)100中部件的進一步描述。
[0038]除了包括連接到對應(yīng)高速緩存存儲器子系統(tǒng)的一個或多個處理器核心,微處理器110還可以包括接口邏輯118和存儲器控制器120。為方便說明,沒有示出其它的邏輯及塊間和塊內(nèi)通信。所說明的微處理器110的功能可以結(jié)合到單個集成電路上。在另一種實施例中,所說明的功能結(jié)合到計算機母板上的芯片集中。在有些實施例中,微處理器110可以包括在臺式計算機或服務(wù)器中。在還有另一種實施例中,所說明的功能結(jié)合到在片上系統(tǒng)(SOC)上具有其它處理器管芯(processor die)的半導(dǎo)體管芯中。
[0039]處理器核心112可以包括如上所述的根據(jù)給定ISA執(zhí)行指令的電路。在一種實施例中,處理器核心112可以包括用于處理給定ISA的指令的超標量、多線程微體系結(jié)構(gòu)。在有些實施例中,處理器核心是通用的處理器核心。在各種其它實施例中,微處理器110可以包括一個或多個其它特定核心,諸如數(shù)字信號處理器(DSP)、圖形處理單元(GPU)、專用集成電路(ASIC)等等。
[0040]高速緩存存儲器子系統(tǒng)116可以為處理器核心112減少存儲器等待時間。由高速緩存存儲器子系統(tǒng)116提供的附加存儲器所實現(xiàn)的降低的缺失率(miss rate)有助于隱藏處理器核心112與片外存儲器之間的等待時間間隙。盡管處理器核心112與高速緩存存儲器子系統(tǒng)116之間的等待時間小于到片外存儲器的等待時間,但是,如果如上所述將加載指令轉(zhuǎn)換成零周期加載操作,這種等待時間會進一步減小。
[0041]如果發(fā)生高速緩存缺失(miss),諸如在高速緩存存儲器子系統(tǒng)116中沒有找到所請求的塊,就可以生成讀請求并將其發(fā)送到存儲器控制器120。存儲器控制器120可以翻譯對應(yīng)于所請求的塊的地址并且通過存儲器總線122把該讀請求發(fā)送到易失性片外DRAM140o存儲器控制器120可以包括用于與存儲器通道接口并且遵循對應(yīng)協(xié)議的控制電路。此外,存儲器控制器120可以包括用于對存儲器請求進行排隊的請求隊列。片外DRAM140可以用來自片外盤存儲器130的數(shù)據(jù)填充。片外盤存儲器130可以提供數(shù)據(jù)的非易失性、隨機存取輔助儲存器。在一種實施例中,片外盤存儲器130可以包括一個或多個硬盤驅(qū)動器(HDD)。在另一種實施例中,片外盤存儲器130利用固態(tài)盤(SSD)。
[0042]盡管為了說明在計算機系統(tǒng)100中只示出了兩個外圍設(shè)備,但是其它數(shù)量的外圍設(shè)備可以連接到微處理器110。外圍設(shè)備150a-150b中的一個或多個可以是顯示器,包括現(xiàn)代TV、計算機監(jiān)視器、膝上型或移動設(shè)備監(jiān)視器等等。視頻圖形子系統(tǒng)可以在顯示器與微處理器Iio之間使用。外圍設(shè)備150a-150b中的一個或多個可以是通常使用的輸入/輸出設(shè)備中的一種,諸如鍵盤、鼠標、打印機、調(diào)制解調(diào)器等等。
[0043]現(xiàn)在參考圖2,示出了說明處理器核心200的一種實施例的通用框圖,其中處理器核心200利用零周期加載操作執(zhí)行超標量的無序執(zhí)行。處理器核心200可以使用多階段管線來處理指令。盡管以特定次序并且在特定的管線階段中示出了功能和控制塊,但是其它組合也是可能和能夠預(yù)期的。此外,功能和控制塊可以占用多于一個管線階段。在大部分情況下,為了方便說明,為每個功能塊示出單個管線階段。
[0044]指令-高速緩存(1-高速緩存)204可以存儲用于軟件應(yīng)用的指令。由通過地址選擇邏輯202傳送的地址所指示的一條或多條指令可以從i_高速緩存204提取。如果沒有i_高速緩存缺失的話,每個時鐘周期可以從i_高速緩存204提取多條指令。地址可以被下一提取預(yù)測器206遞增。在隨后的管線階段中,分支方向預(yù)測器208可以耦合到下一提取預(yù)測器206和控制流評估邏輯212中的每一個。預(yù)測器208可以預(yù)測將指令流的流動從執(zhí)行下一條后續(xù)指令改變的指令信息。
[0045]解碼單元210解碼多條提取出的指令的操作碼。備選地,指令可以被分成微操作(micro-op)。如在此所使用的,術(shù)語“指令”、“微操作”和“操作”是可以互換的,因為本發(fā)明可以供利用任一種實現(xiàn)的體系結(jié)構(gòu)使用。在一種實施例中,控制流評估塊212可以更改地址選擇器202中指令的提取。例如,與無條件分支操作碼關(guān)聯(lián)的絕對地址可以發(fā)送到地址選擇器202。
[0046]重命名組內(nèi)依賴檢測邏輯214可以找出由解碼單元210解碼的指令之間的依賴。組內(nèi)指令可以包括來自一個或多個時鐘周期或管線階段的解碼指令。可以檢測諸如讀后與(WAR)、與后與(WAW)和與后讀(RAW)的依賴??梢陨芍覆恢噶钪g的依賴的依賴向量(dependency vector)。
[0047]依賴檢測邏輯可以包括存儲器依賴(MD)檢測器216。在有些實施例中,MD檢測器216可以確定存儲-對-加載(STL)的存儲器依賴。在這些實施例中,可以用一個表來存儲用作給定存儲指令的地址操作數(shù)的基址寄存器ID和立即值(偏移值)。此外,還可以存儲用于存儲指令的源操作數(shù)寄存器ID。對于(按照程序順序)更年輕的指令,目的地操作數(shù)寄存器ID、地址操作數(shù)寄存器ID和立即值可以與存儲在所述表中的值進行比較。響應(yīng)于確定滿足某些條件,MD檢測器216可以指示在更年輕的加載指令與給定存儲指令之間存在STL存儲器依賴。一個條件可以是更年輕的加載指令具有地址操作數(shù)寄存器ID和與用于存儲指令的地址操作數(shù)值匹配的地址操作數(shù)立即值。第二個條件可以是確定沒有居間指令修改表中所存儲的、用于給定存儲指令的值。第三個條件可以是確定存儲指令是比具有匹配的地址操作數(shù)的加載指令更舊的最年輕的存儲指令。MD檢測器216可以存儲對于RAW依賴存在于加載指令與給定存儲指令之間的指示。
[0048]此外,MD檢測器216可以向寄存器重命名單元220發(fā)送重命名加載指令的目的地操作數(shù)寄存器ID的指令,其中該目的地操作數(shù)寄存器ID具有用于給定存儲指令的源操作數(shù)寄存器ID的同一重命名寄存器標識符。在其它實施例中,編譯器可以分析代碼并且執(zhí)行上述步驟。如果編譯器確定在更年輕的加載指令與給定存儲指令之間存在RAW依賴,該編譯器就可以在程序代碼中插入要由至少MD檢測器216檢測的指示。該信息可以包括斷言位和給定存儲指令的源操作數(shù)寄存器ID。備選地,所述信息可以包括斷言位和用于識別給定存儲指令的程序計數(shù)器(PC)偏移量。其它信息也可以使用。
[0049]在還有其它實施例中,MD檢測器216可以包括STL存儲器依賴預(yù)測器。在這種實施例中,MD檢測器216可以利用至少與加載和存儲指令關(guān)聯(lián)的程序計數(shù)器(PC)值來來索引一個或多個表。部分地址標簽和其它指令識別信息也可以用于索引表。哈希函數(shù)的輸出可以用于索引預(yù)測表,其中預(yù)測表存儲飽和計數(shù)器或者其它預(yù)測信息。在有些實施例中,MD檢測器216可以確定這些地址操作數(shù)沒有被居間指令修改。在其它實施例中,MD檢測器216可以允許校正邏輯,諸如飽和計數(shù)器,來說明誤預(yù)測。從表中讀出的信息可以用于識別推測的依賴。響應(yīng)于確定推測性RAW存儲器依賴,MD檢測器216可以存儲在給定存儲指令與給定后續(xù)加載指令之間存在RAW依賴的指示。此外,MD檢測器216可以向寄存器重命名單元220發(fā)送重命名加載指令的目的地操作數(shù)寄存器ID的指示,其中該目的地操作數(shù)寄存器ID具有與用于給定存儲指令的源操作數(shù)寄存器ID相同的重命名寄存器標識符。在進一步的實施例中,可以使用以上方法與機制的組合來找出STL存儲器依賴。
[0050]映射器218可以利用諸如可用的并行性、依賴鏈的臨界性(criticality)及通信處罰的因素,在分布的硬件資源之間劃分指令。當硬件利用物理寄存器標識符重命名體系結(jié)構(gòu)寄存器標識符時,硬件在映射器218中存儲映射,其中映射器218可以是數(shù)據(jù)結(jié)構(gòu),諸如映射表。如在此所使用的,用于體系結(jié)構(gòu)寄存器或者物理寄存器的標識符還可以被稱為編號。因此,體系結(jié)構(gòu)寄存器標識符也可以稱為體系結(jié)構(gòu)寄存器號。類似地,物理寄存器標識符也可以稱為物理寄存器號。用于重命名體系結(jié)構(gòu)寄存器號的物理寄存器號也可以稱為重命名寄存器號。
[0051]寄存器重命名單元220可以包括重命名控制邏輯與陣列222和寄存器副本陣列(RDA)224。寄存器重命名單元220可以確定哪些物理寄存器標識符要用于重命名在指令中的目的地和源操作數(shù)中都使用的體系結(jié)構(gòu)寄存器標識符。寄存器重命名單元可以從空閑列表分配器230或重命名控制邏輯222中的重命名映射表中選擇候選物理寄存器標識符。在各種實施例中,RDA224配置成存儲副本映射的指示。副本映射可以在加載操作到零周期加載操作的轉(zhuǎn)換過程中使用。
[0052]寄存器重命名單元220可以從MD檢測器216接收加載指令有資格被轉(zhuǎn)換成零周期加載操作的指示。寄存器重命名單元220可以把該加載指令的目的地操作數(shù)寄存器ID指定成與該加載操作所依賴的存儲指令的源操作數(shù)寄存器ID所使用的相同的重命名寄存器標識符。映射器218可以存儲用于該重命名寄存器標識符的多個映射。此外,RDA224可以存儲用于該重命名寄存器標識符的副本計數(shù)。例如,在前面的代碼例子中,重命名寄存器標識符P44可以既用作存儲指令的源操作數(shù)寄存器ID(r7),又用作加載指令的目的地操作數(shù)寄存器ID(rl4)。這個副本計數(shù)可以包括任何給定體系結(jié)構(gòu)寄存器標識符已經(jīng)被映射到同一重命名寄存器標識符的次數(shù)。
[0053]在各種實施例中,當特定的體系結(jié)構(gòu)寄存器已經(jīng)映射到在映射時的重命名寄存器號時,對于這個映射,副本計數(shù)可以不遞增。RDA224可以存儲重命名寄存器號和關(guān)聯(lián)的副本計數(shù)。在一種實施例中,RDA可以實現(xiàn)為相對小的、加標簽的、完全關(guān)聯(lián)的結(jié)構(gòu)。RDA224可以具有用于存儲重命名寄存器號和關(guān)聯(lián)的副本計數(shù)的任意數(shù)量的條目。在一個例子中,ISA的實現(xiàn)可以包括144個物理寄存器號,因此,8位的物理寄存器索引可以既存儲在RDA的條目中又用于訪問該RDA。在一種實施例中,每個副本計數(shù)的大小是5位。因此,用于給定物理寄存器號的副本的最大個數(shù)為31。但是,其他副本計數(shù)大小也是可能的而且可以被選擇。
[0054]RDA224可以在指令在處理器管線中分派之前或者當時被更新。當MD檢測器216確定解碼后的加載指令是零周期加載操作時,可以訪問RDA224,以確定對于該物理寄存器號來說是否已經(jīng)存在要用于重命名關(guān)聯(lián)的存儲指令的源操作數(shù)寄存器ID和加載指令的目的地操作數(shù)寄存器ID中每一個的條目。如果存在條目,那么,每次當目前沒有映射到給定重命名寄存器號的任何給定體系結(jié)構(gòu)寄存器ID被映射到給定的重命名寄存器號時,關(guān)聯(lián)的副本計數(shù)可以遞增。如果在RDA中還不存在條目,就可以分配一個條目并且關(guān)聯(lián)的副本計數(shù)可以以2開始。[0055]RDA224還可以在處理器管線中的提交管線階段中更新。對于指令提交期間的任何給定的體系結(jié)構(gòu)寄存器,每次當物理寄存器標識符準備要返回到空閑列表時,副本計數(shù)可以遞減。物理寄存器標識符還可以被稱為重命名寄存器標識符。物理寄存器標識符可以是響應(yīng)于映射表中與該物理寄存器標識符關(guān)聯(lián)的條目由于指令提交要被除去或者失效而返回到空閑列表的候選。在一種實施例中,響應(yīng)于副本計數(shù)遞減到一,副本計數(shù)和副本映射可以不再被存儲。
[0056]在一種實施例中,響應(yīng)于給定的重命名寄存器標識符是在關(guān)聯(lián)的指令提交期間要返回空閑列表的候選,并且沒有關(guān)聯(lián)的副本信息存儲在RDA224中,該重命名寄存器標識符返回到空閑列表。在另一種實施例中,響應(yīng)于給定的重命名寄存器標識符是要返回空閑列表的候選并且RDA224中所存儲的副本計數(shù)從一遞減至零,該重命名寄存器標識符返回到空閑列表。
[0057]在一種實施例中,響應(yīng)于給定的重命名寄存器標識符是要返回空閑列表的候選并且所存儲的副本計數(shù)在遞減之后仍然大于一,該重命名寄存器標識符不返回到空閑列表。在這后一種情況下,該重命名寄存器標識符仍然具有到多個體系結(jié)構(gòu)寄存器的副本映射。在一種實施例中,檢查RDA224以獲得每個可能的零周期加載候選,以確定存在空閑的、用于跟蹤副本的條目。如果RDA224中沒有空閑的條目可供分配,則對應(yīng)的加載指令不轉(zhuǎn)換成零周期加載操作。類似地,如果存在為零周期加載候選分配的條目,但是副本計數(shù)已經(jīng)飽和,該加載指令也不轉(zhuǎn)換成零周期加載操作。
[0058]對于零周期加載操作,數(shù)據(jù)內(nèi)容可以從存儲用于存儲指令源操作數(shù)的數(shù)據(jù)的物理寄存器文件中的物理寄存器轉(zhuǎn)發(fā)到后續(xù)的加載指令并轉(zhuǎn)發(fā)到其它更年輕的依賴指令。數(shù)據(jù)可以不從數(shù)據(jù)高速緩存、存儲緩沖區(qū)或者片外存儲器讀取。更年輕的依賴指令可以不用等待從數(shù)據(jù)高速緩存、存儲緩沖區(qū)或者片外存儲器讀取數(shù)據(jù)就發(fā)布。
[0059]在指令被解碼和重命名之后,可以在分派隊列240中分配關(guān)聯(lián)的條目。指令和關(guān)聯(lián)的重命名標識符、程序計數(shù)器(PC)值、依賴向量、完成標記等可以發(fā)送到分配隊列240并隨后發(fā)送到調(diào)度器250。可以由諸如執(zhí)行核心260檢測各種例外。例子包括用于存儲器訪問的保護例外、無地址翻譯,等等。例外會造成對應(yīng)的例外處理例程由諸如微代碼242執(zhí)行。
[0060]調(diào)度器250可以調(diào)度指令在執(zhí)行核心260中的執(zhí)行。當操作數(shù)可用而且硬件資源也可用時,指令可以從調(diào)度器250無序地發(fā)布到執(zhí)行核心260中的功能單元之一。在利用映射表或者從操作數(shù)旁路邏輯翻譯重命名標識符之后,調(diào)度器250可以從物理寄存器文件(未示出)讀取其源操作數(shù)。源操作數(shù)可以提供給執(zhí)行核心260。執(zhí)行核心260可以求解用于加載和存儲指令的地址。此外,執(zhí)行核心260還可以執(zhí)行多個整數(shù)、浮點數(shù)和布爾操作中的一個或多個。
[0061]執(zhí)行核心260可以包括加載/存儲單元。該加載/存儲單元可以直接地或者通過重新排序緩沖區(qū)(rob) 270連接到數(shù)據(jù)高速緩存(未示出)和存儲緩沖區(qū)272。處理器200可以包括用于i_高速緩存204和數(shù)據(jù)高速緩存中每一個的翻譯后援緩沖區(qū)(TranslationLook-aside Buffer, TLB),以避免當執(zhí)行高速緩存訪問時執(zhí)行完全存儲器翻譯的成本。存儲緩沖區(qū)272可以存儲對應(yīng)于存儲指令的地址。rob270可以從執(zhí)行核心260接收結(jié)果。此外,對于轉(zhuǎn)發(fā)到已經(jīng)在管線中的依賴指令的數(shù)據(jù),結(jié)果可以被旁路到前面的管線階段。rob270可以確保指令的有序提交和退出。
[0062]現(xiàn)在參考圖3,示出了用于檢測零周期加載操作的方法300的一種實施例的通用流程圖。在方框302,處理程序指令。所述指令可以被編譯、從存儲器提取、解碼并執(zhí)行。在解碼之后,如果檢測到給定指令是存儲指令(條件方框304),就在方框306中緩沖至少該存儲指令的地址操作數(shù)基址寄存器ID、地址操作數(shù)立即值和源操作數(shù)寄存器ID。這些值可以存儲在給定的表中。還可以緩沖關(guān)聯(lián)的程序計數(shù)器(PC)和其它信息。在一種實施例中,這個信息被緩沖在存儲器依賴(MD)檢測器中的表中。
[0063]在方框308,監(jiān)視(按照程序順序)后續(xù)指令的信息以獲得與為(按照程序順序)前面的存儲指令所緩沖的信息的可能匹配。用于比較的信息可以包括至少后續(xù)指令的目的地操作數(shù)寄存器ID及后續(xù)加載指令的地址操作數(shù)基址寄存器ID和立即值??刂七壿嬁梢詸z測與給定存儲指令關(guān)聯(lián)的寄存器ID和與后續(xù)指令關(guān)聯(lián)的寄存器ID之間的匹配。寄存器ID可以是用于識別操作數(shù)的體系結(jié)構(gòu)寄存器ID。
[0064]存儲指令的地址操作數(shù)基址寄存器的修改可以是基于立即值的更新。利用前面的代碼例子,加法指令可以跟在存儲指令后面(按照程序順序),諸如ADD rl0,rl0,#4o符號“#”可以用于指示立即值數(shù)據(jù)操作數(shù)。修改存儲指令的地址操作數(shù)基址寄存器rlO。但是,這是基于立即值的修改。如果,除基于立即值的修改之外,加載指令與存儲指令之間的居間指令沒有對地址操作數(shù)基址寄存器rlO進行其它類型的修改,那么可以在表中執(zhí)行說明該基于立即值的修改的調(diào)整。如果檢測到給定存儲指令的地址操作數(shù)基址寄存器要被修改(條件方框310)并且修改是基于立即值更新(條件方框311),就在方框313中更新表中用于給定存儲指令的特定的存儲值。例如,所存儲的地址操作數(shù)立即值可以被更新。利用以上的例子,表中用于給定存儲指令的所存儲立即值4可以在表中遞減4,這是ADD指令所使用的立即值。在其它例子中,地址操作數(shù)基址寄存器可以遞減,而不是遞增,而且表中所存儲的立即值可以相應(yīng)地遞增。如果修改不是基于立即值更新(條件方框311),就可以在方框312中令存儲對應(yīng)于給定存儲指令的值的表條目失效。其后,方法300的控制流可以通過方框A返回方框302。
[0065]如果檢測到給定存儲指令的源操作數(shù)要被修改(條件方框314)而且存儲指令已經(jīng)退出(條件方框316),方法300的控制流就移到方框312。為了說明這種情況,在這里提供存儲器依賴的另一個代碼例子,其中修改了存儲指令的源操作數(shù)和爭用狀態(tài)(racecondition):
[0066]ADD r7, r3, r5
[0067]STORE [rlO+4], r7 //地址操作數(shù)是 rlO 和 4
[0068]ADD rl9, r24, rl8
[0069]ADD r7,r20,r21 //存儲操作的源操作數(shù)被修改了
[0070]LOAD rl4, [rlO+4] //地址操作數(shù)是 rlO 和 4
[0071]SUB r2,r6,rl4 //對于rl4,使用從存儲操作的源操作
[0072]//數(shù)r7轉(zhuǎn)發(fā)的數(shù)據(jù)
[0073]ADD r7,rl4,rl3 //對于rl4,使用從存儲操作的源操作
[0074]//數(shù)r7轉(zhuǎn)發(fā)的數(shù)據(jù)
[0075]ADD rl4,r22,r25 //加載操作的目的地操作數(shù)被重寫。在[0076]Il提交階段,把由r7和rl4共享的物
[0077]//理寄存器號返回到空閑列表
[0078]類似于前面的代碼例子,在以上的例子中,加載指令對存儲指令具有存儲器依賴。在這種情況下,第三個加法指令修改存儲指令的源操作數(shù)(r7)。管線中在把與源操作數(shù)(r7)關(guān)聯(lián)的重命名寄存器標識符標記為副本的加載指令和提交并使得同一重命名寄存器標識符返回到空閑列表的第三個加法指令之間存在爭用狀態(tài)。當加載指令把這個重命名寄存器標識符標記為副本時,該重命名寄存器標識符可能已經(jīng)在朝空閑列表傳播的歷史文件中了。
[0079]用于處理以上情況的一種選項是檢測居間指令,諸如第三個加法指令,修改存儲指令的源操作數(shù),并且作為響應(yīng),使加載指令失去被轉(zhuǎn)換成零周期加載操作的資格。用于處理以上情況的另一種選項是檢測居間指令修改存儲指令的源操作數(shù),并且作為響應(yīng),確定存儲指令是否已經(jīng)退出。如果存儲指令還沒有退出,那么該居間指令也沒有退出。因此,居間指令還沒有使與存儲指令的源操作數(shù)關(guān)聯(lián)的重命名寄存器標識符返回到空閑列表?,F(xiàn)在,可以維持這個重命名寄存器標識符的副本計數(shù)。類似地,由于以上代碼例子中的最后一個加法指令而使得用于加載指令的目的地操作數(shù)(rl4)的副本計數(shù)遞增。
[0080]返回方法300,如果檢測到給定存儲指令的源操作數(shù)要被修改(條件方框314)并且存儲指令還沒有退出(條件方框316),就確定是否有加載指令可以具有對給定存儲指令的存儲器依賴。類似地,如果沒有檢測到給定存儲指令的源操作數(shù)要被修改(條件方框314),就確定是否有加載指令具有對給定存儲指令的存儲器依賴。應(yīng)當指出,在有些實施例中,條件方框310、314和318中的每一個都可以同時進行評估。例如,控制邏輯和表可以同時接收與后續(xù)指令關(guān)聯(lián)的輸入。
[0081]在一種實施例中,利用與加載指令關(guān)聯(lián)的信息訪問存儲器依賴(MD)檢測器。如前所述,MD檢測器可以包括保留用于要與后續(xù)指令比較的特定存儲指令的信息的表。備選地,MD檢測器可以包括用于檢測來自編譯器的提示信息的控制邏輯。MD檢測器還可以包括STL預(yù)測器。另外,MD檢測器可以包括這些備選設(shè)計選項的組合。響應(yīng)于訪問MD檢測器,控制邏輯和存儲用于給定存儲指令和其它存儲指令的值的表都可以生成指示在加載指令與給定存儲指令之間存在存儲器依賴的結(jié)果。例如,在一種實施例中,用于加載指令和給定存儲指令中每一個的地址操作數(shù)基址寄存器ID和立即值可以匹配。此外,可以確定該存儲指令是比具有匹配地址操作數(shù)的加載指令更舊的最年輕的存儲指令。如果確定加載指令依賴于給定的存儲指令(條件方框318),在方框320中加載指令就可以作為零周期加載指令來處理。接下來,提供處理零周期加載指令的進一步細節(jié)。
[0082]現(xiàn)在參考圖4,示出了用于處理零周期加載操作的方法400的一種實施例的通用流程圖。在方框402中,可以確定給定加載指令依賴于(按照程序順序)較舊的存儲指令。給定加載指令可以有資格轉(zhuǎn)換成零周期加載指令。如前所述,一個條件可以是更年輕的加載指令具有地址操作數(shù)寄存器ID和與用于存儲指令的地址操作數(shù)值匹配的地址操作數(shù)立即值。第二個條件可以是確定沒有居間指令修改存儲在所訪問的表中的、用于給定存儲指令的值,諸如地址操作數(shù)和源操作數(shù)。第三個條件可以是確定存儲指令是比具有匹配地址操作數(shù)的加載指令更舊的最年輕的存儲指令。第四個條件可以是可用副本資源的指示。例如,用于存儲指令的源操作數(shù)寄存器ID的重命名寄存器號可以用于索引到諸如RDA224的數(shù)據(jù)結(jié)構(gòu)中。在其它實施例中,STL存儲器依賴預(yù)測器和/或來自編譯器的提示信息可以用于指示加載指令與給定存儲指令之間的RAW依賴。
[0083]RDA224中的命中可以指示源重命名寄存器標識符已經(jīng)被復(fù)制。缺失可以指示該源重命名寄存器標識符還沒有被復(fù)制。如果源重命名寄存器標識符還沒有被復(fù)制而且RDA224還沒有滿,就可以為該源重命名寄存器標識符在RDA224中分配一個條目。如果源重命名寄存器標識符已經(jīng)被復(fù)制,那么用于該源重命名寄存器標識符的副本計數(shù)可以與給定的閾值進行比較。在一種實施例中,該閾值可以對應(yīng)于特定的計數(shù)。如果關(guān)聯(lián)的副本計數(shù)還沒有達到所述閾值,副本資源就是可用的。如果關(guān)聯(lián)的副本計數(shù)已經(jīng)達到所述閾值,則副本資源就是不可用的。
[0084]如果副本資源不可用(條件方框404),就在方框406中利用來自空閑列表的重命名寄存器標識符,重命名用于加載指令的目的地體系結(jié)構(gòu)寄存器。重命名的標識符、關(guān)聯(lián)的程序計數(shù)器(PC)值、依賴向量等可以發(fā)送到分派隊列并且隨后發(fā)送到調(diào)度器。在方框408中,可以處理下一個可以獲得的指令。該下一個可以獲得的指令可以與以上步驟并行地或者在后續(xù)的時鐘周期中被處理。
[0085]如果副本資源不可用(條件方框404),就在方框410中利用用于最年輕的較舊依賴存儲指令的源操作數(shù)的重命名寄存器ID來重命名加載指令的目的地操作數(shù)標識符(ID)0在方框412中,更新用于物理寄存器的副本計數(shù)。每次當目前還沒有映射到所選重命名寄存器標識符的給定體系結(jié)構(gòu)寄存器標識符被映射到這個重命名寄存器標識符時,副本計數(shù)就遞增。在一個實施例中,副本計數(shù)可以初始化為值2。
[0086]用于加載指令和一個或多個其它指令的重命名標識符可以發(fā)送到分派隊列并隨后發(fā)送到調(diào)度器。關(guān)聯(lián)的程序計數(shù)器(PC)值、依賴向量等也可以發(fā)送。在一種實施例中,RAW依賴被認為是確信無疑的而且加載指令可以標記為完成。例如,如方法300中所描述的MD檢測器中表的訪問可以被認為沒有不確定性,因此加載指令不再被隨后的管線階段進一步處理。在其它實施例中,加載指令與存儲指令之間的RAW依賴不被認為沒有不確定性。因此,加載指令沒有標記為完成而且它被隨后的管線階段進一步處理。在方框414中,在管線中發(fā)布包括沒有標記為完成的加載指令的一個或多個指令。在方框416中,可以驗證存儲指令與加載指令之間的存儲器依賴。例如,可以利用求解的地址與其它指令識別信息對存儲緩沖區(qū)進行訪問。
[0087]如果發(fā)現(xiàn)存儲器依賴不正確(條件方框418),在方框420中加載指令和(按照程序順序)比該加載指令更年輕的指令就可以從管線中被沖刷掉。然后,可以重放該加載指令。如果發(fā)現(xiàn)預(yù)測的存儲器依賴是正確的(條件方框418),在方框422中該加載指令就在管線中前進到提交管線階段,而不從片上高速緩存層次結(jié)構(gòu)、存儲緩沖區(qū)或者片外存儲器讀取與源操作數(shù)關(guān)聯(lián)的數(shù)據(jù)。依賴于加載指令的更年輕的指令可以利用從與對應(yīng)存儲指令的源操作數(shù)關(guān)聯(lián)的物理寄存器文件接收到的轉(zhuǎn)發(fā)數(shù)據(jù)繼續(xù)進行。
[0088]現(xiàn)在參考圖5,示出了用于提交包括零周期加載操作在內(nèi)的指令的方法500的一種實施例的通用流程圖。為了討論,這種實施例及前面所述的方法300和400的后續(xù)實施例中的步驟是以順序次序示出的。但是,在其它實施例中,有些步驟可以按與所示次序不同的次序發(fā)生,有些步驟可以并發(fā)執(zhí)行,有些步驟可以與其它步驟組合,而且可以缺少有些步驟。[0089]在方框502,提交程序指令。數(shù)據(jù)結(jié)構(gòu)中指令的有序窗口可以用于確定何時提交和退出指令。例如,rob270可以用作這種數(shù)據(jù)結(jié)構(gòu)。當檢測到存儲器指令要提交時,可以執(zhí)行檢查,以確定所關(guān)聯(lián)的重命名寄存器標識符是否被復(fù)制。在一個例子中,用于目的地物理寄存器和源物理寄存器中每一個的關(guān)聯(lián)副本標簽或指示副本狀態(tài)的字段可以與用于該指令的其它關(guān)聯(lián)信息一起存儲。在另一個例子中,目的地重命名寄存器標識符與源重命名寄存器標識符中的每一個都可以用于索引到諸如RDA224的數(shù)據(jù)結(jié)構(gòu)中。命中可以指示對應(yīng)的重命名寄存器標識符已經(jīng)被復(fù)制。缺失可以指示對應(yīng)的重命名寄存器標識符還沒有被復(fù)制。
[0090]如果給定的重命名寄存器標識符沒有被復(fù)制(條件方框504),在方框506中該重命名寄存器標識符就返回到空閑列表。否則,在方框508中,用于對應(yīng)重命名寄存器標識符的副本計數(shù)可以遞減。通常,對于任何給定的體系結(jié)構(gòu)寄存器,每次當關(guān)聯(lián)的重命名寄存器標識符準備要返回到空閑列表時,副本計數(shù)就遞減。響應(yīng)于從映射表除去映射,可以確定重命名寄存器標識符準備要返回到空閑列表。一般來說,響應(yīng)于從映射表除去映射,重命名寄存器標識符返回到空閑列表。但是,對于映射表中由于零周期加載操作造成的副本映射,在任何返回到空閑列表之前,可以檢查諸如RDA224的數(shù)據(jù)結(jié)構(gòu)。
[0091]在遞減副本計數(shù)之后,如果該重命名寄存器標識符仍然被復(fù)制(條件方框510),在方框512中就可以把該重命名寄存器標識符標記為仍然被復(fù)制而且它不返回到空閑列表。例如,在諸如RDA224的數(shù)據(jù)結(jié)構(gòu)中可以仍然存在其副本計數(shù)大于I的有效條目。
[0092]在遞減副本計數(shù)之后,如果重命名寄存器標識符不是仍然被復(fù)制(條件方框510),就在方框514中把該重命名寄存器標識符標記為映射但不復(fù)制。例如,可以使諸如RDA224的數(shù)據(jù)結(jié)構(gòu)中的關(guān)聯(lián)條目失效。備選地,可以仍然存在其副本計數(shù)為I的有效條目。該重命名寄存器標識符不返回到空閑列表。
[0093]盡管以上已經(jīng)相當詳細地描述了實施例,但是,一旦完全理解了以上公開內(nèi)容,許多變化與修改將對本領(lǐng)域技術(shù)人員變得顯而易見。以下權(quán)利要求應(yīng)當解釋為涵蓋所有此類變化與修改。
【權(quán)利要求】
1.一種處理器,包括: 存儲器依賴檢測器,配置成確定給定加載指令對給定存儲指令的存儲器依賴;及 寄存器重命名單元; 其中,所述寄存器重命名單元配置成響應(yīng)于接收到所確定的存儲器依賴的指示并且確定滿足資格條件,向所述給定加載指令的目的地操作數(shù)寄存器ID分配與所述給定存儲指令的源操作數(shù)寄存器ID關(guān)聯(lián)的重命名寄存器標識符(ID),及防止所述給定加載指令從存儲器中讀取與所述源操作數(shù)關(guān)聯(lián)的數(shù)據(jù)。
2.如權(quán)利要求1所述的處理器,其中,為了防止所述給定加載指令從存儲器中讀取與所述源操作數(shù)關(guān)聯(lián)的數(shù)據(jù),所述寄存器重命名單元配置成指示所述給定加載指令要在以下項中的至少一個之后完成: 確定了所述存儲器依賴,和 驗證了所述存儲器依賴是正確的。
3.如權(quán)利要求2所述的處理器,其中,響應(yīng)于向所述給定加載指令的目的地操作數(shù)寄存器ID分配所述重命名寄存器ID,所述寄存器重命名單元進一步配置成存儲與所述重命名寄存器ID關(guān)聯(lián)的副本計數(shù)。
4.如權(quán)利要求3所述的處理器,其中為了確定滿足資格條件,所述寄存器重命名單元配置成至少確定: 按照程序順序在所述給定存儲指令與所述給定加載指令之間的指令具有與所述給定存儲指令的源操作數(shù)寄存器ID 相等的目的地操作數(shù)寄存器ID ;及 所述給定存儲指令還沒有退出。
5.如權(quán)利要求3所述的處理器,其中所述寄存器重命名單元進一步配置成檢測目的地操作數(shù)寄存器ID已分配給所述寄存器重命名ID的指令準備要提交,及響應(yīng)于確定所述重命名寄存器ID被復(fù)制,防止所述重命名寄存器ID返回到空閑列表。
6.如權(quán)利要求5所述的處理器,其中所述指令是以下項中的至少一個:所述給定加載指令、所述給定存儲指令及按照程序順序在所述給定加載指令和所述給定存儲指令之間的指令。
7.如權(quán)利要求5所述的處理器,其中所述寄存器重命名單元進一步配置成,每次在將當前沒有映射到所述重命名寄存器ID的體系結(jié)構(gòu)寄存器ID映射到所述重命名寄存器ID時,遞增所述副本計數(shù)。
8.如權(quán)利要求5所述的處理器,其中所述處理器還包括加載/存儲單元,配置成響應(yīng)于確定所述存儲器依賴不正確,重放所述給定加載指令和按照程序順序比所述給定加載指令年輕的程序指令。
9.如權(quán)利要求5所述的處理器,其中所述處理器還包括物理寄存器文件,配置成把與所述給定存儲指令的源操作數(shù)關(guān)聯(lián)的數(shù)據(jù)轉(zhuǎn)發(fā)到按照程序順序更年輕的且依賴于所述給定加載指令的指令。
10.一種方法,包括: 確定給定加載指令對給定存儲指令的存儲器依賴; 響應(yīng)于接收到所述存儲器依賴的指示并且確定滿足資格條件: 向所述給定加載指令的目的地操作數(shù)寄存器ID分配與所述給定存儲指令的源操作數(shù)寄存器ID關(guān)聯(lián)的重命名寄存器標識符(ID);及 防止所述給定加載指令從存儲器中讀取與所述源操作數(shù)關(guān)聯(lián)的數(shù)據(jù)。
11.如權(quán)利要求10所述的方法,其中,為了防止所述給定加載指令從存儲器中讀取與所述源操作數(shù)關(guān)聯(lián)的數(shù)據(jù),所述方法還包括:指示所述給定加載指令要在以下項中的至少 Iv之后完成: 確定了所述存儲器依賴,和 驗證了所述存儲器依賴是正確的。
12.如權(quán)利要求11所述的方法,其中,響應(yīng)于向所述給定加載指令的目的地操作數(shù)寄存器ID分配所述重命名寄存器ID,所述方法還包括:存儲與所述重命名寄存器ID關(guān)聯(lián)的副本計數(shù)。
13.如權(quán)利要求12所述的方法,其中確定滿足資格條件包括至少確定: 在所述給定存儲指令與所述給定加載指令之間的居間指令具有與所述給定存儲指令的源操作數(shù)寄存器ID相等的目的地操作數(shù)寄存器ID ;及 所述給定存儲指令還沒有退出。
14.如權(quán)利要求13所述的方法,還包括:與所述給定加載指令一起發(fā)布按照程序順序更年輕的且依賴于所述給定加載指令的指令。
15.如權(quán)利要求14所述的方法,其中,為了確定所述存儲器依賴,所述方法還包括:至少確定對于地址操作數(shù)基址寄存器ID和地址操作數(shù)立即值,所述給定存儲指令和所述給定加載指令具有匹配的值。
16.如權(quán)利要求15所述的方法,其中,響應(yīng)于確定居間指令用立即值更新修改了所述給定存儲指令的地址操作數(shù)基址寄存器,所述方法還包括:在確定所述給定加載指令的存儲器依賴之前,調(diào)整用于所述給定存儲指令的地址操作數(shù)立即值的存儲值。
17.如權(quán)利要求13所述的方法,還包括: 檢測指令準備要提交,其中所述指令的目的地操作數(shù)寄存器ID分配給所述寄存器重命名ID ;及 響應(yīng)于確定所述重命名寄存器ID被復(fù)制,防止所述重命名寄存器ID返回到空閑列表。
18.如權(quán)利要求17所述的方法,還包括: 每次在將當前沒有映射到所述重命名寄存器ID的任何給定體系結(jié)構(gòu)寄存器ID映射到所述重命名寄存器ID時,遞增所述副本計數(shù)。
19.一種寄存器重命名單元,包括: 第一接口,配置成接收解碼后的指令; 到分派單元的第二接口,配置成向調(diào)度器分派指令; 零周期加載邏輯,其中所述零周期加載邏輯配置成響應(yīng)于接收到給定加載指令對給定存儲指令的存儲器依賴的指示并且確定滿足了資格條件,向所述給定加載指令的目的地操作數(shù)寄存器ID分配與所述給定存儲指令的源操作數(shù)寄存器ID關(guān)聯(lián)的重命名寄存器標識符(ID),及防止所述給定加載指令從存儲器中讀取與所述源操作數(shù)關(guān)聯(lián)的數(shù)據(jù)。
20.如權(quán)利要求19所述的寄存器重命名單元,其中為了確定滿足資格條件,所述零周期加載邏輯配置成至少確定: 在所述給定存儲指令與所述給定加載指令之間的居間指令具有與所述給定存儲指令的源操作數(shù)相等的目的地操作數(shù)寄存器ID ;及所述給定存儲指令還沒有退出。
【文檔編號】G06F9/445GK103514009SQ201310236291
【公開日】2014年1月15日 申請日期:2013年6月14日 優(yōu)先權(quán)日:2012年6月14日
【發(fā)明者】G·R·威廉姆斯三世, J·H·米里爾斯, C·布拉斯考-阿魯 申請人:蘋果公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
民丰县| 凤冈县| 德兴市| 和田县| 普兰店市| 绩溪县| 鹿泉市| 门头沟区| 贵溪市| 南澳县| 湾仔区| 天祝| 盐山县| 天台县| 湛江市| 开平市| 镇沅| 河池市| 丽江市| 通山县| 布尔津县| 荆门市| 东港市| 揭东县| 儋州市| 临海市| 巴青县| 台安县| 抚州市| 衡阳市| 岑巩县| 文山县| 藁城市| 泸溪县| 怀柔区| 故城县| 潍坊市| 汤阴县| 奉化市| 扎鲁特旗| 建水县|