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