使用依賴性消除的多階段寄存器重命名的制作方法
【專利摘要】描述了使用依賴性消除的多階段寄存器重命名。在實施例中,在兩個階段中對寄存器進行重命名階段。第一階段涉及消除正被一起重命名的一組指令中的所有的依賴性。隨后,最終階段使用重命名映射并行地對所有寄存器進行重命名。在各個實施例中,在第一階段中,使用固定映射對每個指令中的目標寄存器進行重命名,以消除依賴性,并且在一些實施例中,固定映射基于所述一組指令中的目標寄存器的位置。在第一階段中還對依賴寄存器進行重命名,依賴寄存器是在一條指令中被讀取但已經(jīng)在所述一組指令中的之前指令中被寫入的那些寄存器。在最終階段中,除了執(zhí)行重命名以外,還更新重命名映射。
【專利說明】使用依賴性消除的多階段寄存器重命名
【背景技術】
[0001]亂序處理器可以通過以下方式提供改進的計算性能:以與程序中的順序不同的次序來執(zhí)行指令,使得在指令的輸入數(shù)據(jù)可用時執(zhí)行指令,而不是等待程序中的之前的指令被執(zhí)行。為了允許指令在處理器上亂序運行,能夠?qū)χ噶钏褂玫募拇嫫鬟M行重命名是非常有用的。這使得能夠從指令中消除“讀后寫”(WAR)依賴性,這是因為這些并不是真正的依賴性。通過使用寄存器重命名以及消除這些依賴性,可以不按程序次序執(zhí)行更多的指令,并且進一步提高了性能。通過保持關于在指令中命名的哪些寄存器(稱作結構寄存器)被映射到處理器的物理寄存器上的映射,來執(zhí)行寄存器重命名。該映射可以被稱作“重命名映射”、“寄存器映射”、“寄存器重命名映射”、“寄存器別名表”(RAT)或其它類似的術語。
[0002]通常在每個周期中在多個指令上執(zhí)行重命名,但是在一個周期中被重命名的一組指令中的數(shù)據(jù)依賴性意味著不能完全并行地進行操作。每次對目標寄存器進行重命名(即在用當前可用的物理寄存器替換結構寄存器的情況下),就對重命名映射(即重命名映射中的數(shù)據(jù))進行更新。(所述一組中的)將來的讀取隨后必須使用更新的映射,而不是該周期起始時存在的映射。為了解決這一問題,可以使用從每個目標寄存器重命名操作的結果到每個將來的源寄存器讀取的轉(zhuǎn)發(fā)路徑。然而,這會迅速地變得十分復雜,并且不能很好的擴展(例如在一組中處理的指令的數(shù)量增加的情況中)。
[0003]已經(jīng)提出了一種使用兩條流水線重命名塊的兩階段重命名方法。該方法在兩個周期上操作,并且采用的是在中間點處而不是在時鐘邊沿處使用鎖存的更異步的方式。在第一個周期執(zhí)行寫入而在第二個周期執(zhí)行讀取,這導致了復雜性的增加,這是因為除了一組當中的依賴性以外,現(xiàn)在在當前的一組指令與時間上的下一組指令之間存在額外的依賴性,原因在于這兩個組在單個周期內(nèi)更新重命名映射/從重命名映射進行讀取。
[0004]如下描述的實施例不局限于解決用于寄存器重命名的已知方法和裝置的任何或全部缺點的實現(xiàn)。
【發(fā)明內(nèi)容】
[0005]提供本
【發(fā)明內(nèi)容】
以便以簡化形式介紹構思的精粹,下文在【具體實施方式】中進一步對這些構思進行描述。本
【發(fā)明內(nèi)容】
并不旨在標識要求保護的主題的關鍵特征或必要特征,也不旨在用作協(xié)助確定要求保護的主題的范圍。
[0006]描述了使用依賴性消除的多階段寄存器重命名。在實施例中,在兩階段中對寄存器進行重命名的。第一階段涉及消除一組指令中的全部依賴性,其中,所述一組指令正被一起重命名。隨后最終階段使用重命名映射并行地對所有寄存器進行重命名。在各個實施例中,通過使用固定的映射對每個指令中的目標寄存器進行重命名,來在第一階段中消除依賴性,并且在一些實施例中,固定的映射基于所述一組指令中的目標寄存器的位置。依賴寄存器也是在第一階段中被重名命的,所述依賴寄存器是在一條指令中被讀取但已經(jīng)在所述一組指令中的之前指令中被寫入的寄存器階段。在最終階段中,除了執(zhí)行重命名以外,還更新重命名映射。[0007]第一方案提供了一種亂序處理器中寄存器重命名的方法,包括:在第一階段中,使用在硬件邏輯中定義的固定映射來消除一組指令中的依賴性;以及在最終階段中,使用重命名映射并行地對所述一組指令中的全部寄存器進行重命名。
[0008]使用在硬件邏輯中定義的固定映射來消除一組指令中的依賴性可以包括:使用所述固定映射,用一組額外的寄存器中的一個來對所述一組指令中的全部目標寄存器和任意依賴寄存器進行重命名;并且將使用了哪一個額外寄存器來對每一個目標寄存器進行重命名的細節(jié)傳遞到所述最終階段。
[0009]目標寄存器與額外寄存器之間的固定映射可以基于所述一組指令中的每一個目標寄存器的物理位置。
[0010]所述最終階段可以進一步包括:更新所述重命名映射。
[0011]所述重命名映射可以包括與每一個額外寄存器相關聯(lián)的條目。
[0012]更新所述重命名映射可以包括:基于從第一階段傳遞的細節(jié)更新所述重命名映射中的與每一個目標寄存器相關聯(lián)的條目;以及更新所述重命名映射中的與每一個額外寄存器相關聯(lián)的條目,以將每一個額外寄存器映射到未分配的物理寄存器。
[0013]該方法可以進一步包括:存取未分配的物理寄存器的列表。
[0014]所述固定映射可以獨立于任何之前的狀態(tài)。
[0015]該方法可以進一步包括:在第一階段和最終階段之間執(zhí)行優(yōu)化操作。
[0016]所述一組指令可以包括N條指令,并且所述一組額外寄存器可以包括N個額外寄存器,其中N為整數(shù)。
[0017]所述一組指令中的每一條指令可以包括不超過Y個的目標寄存器,并且每一條指令可以具有一組Y個相關聯(lián)的有效位,每一個有效位指示在該指令中是否使用了 Y個目標寄存器中的一個。這一組指令可以包括N條指令,并且所述一組額外寄存器可以包括NXY個額外寄存器,其中N和Y都為整數(shù)。
[0018]所述一組指令中的每一個指令可以包括不超過X個的源寄存器,并且每一個指令可以具有一組X個相關聯(lián)的有效位,每一個有效位指示在該指令中是否使用了 X個源寄存器中的一個。
[0019]第二方案提供了一種亂序處理器,包括:重命名映射;定義寄存器之間的固定映射的硬件邏輯;依賴性消除邏輯,用于使用所述固定映射消除一組指令中的依賴性;重命名邏輯,用于使用所述重命名映射并行地對所述一組指令中的全部寄存器進行重命名;以及多個物理寄存器。
[0020]依賴性消除邏輯可以包括多個依賴性消除邏輯實例,并且其中,每一個依賴性消除邏輯實例用于消除所述一組指令中的單獨的、非重疊的子集中的依賴性。
[0021]依賴性消除邏輯可以用于通過以下方式來消除所述一組指令中的依賴性:使用所述固定映射,用一組額外寄存器中的一個對一組指令中的全部目標寄存器和任意依賴寄存器進行重命名;并且將使用了哪一個額外寄存器對每一個目標寄存器進行重命名的細節(jié)傳遞到重命名邏輯。
[0022]重命名映射可以包括與每一個額外寄存器相關聯(lián)的條目。
[0023]多個物理寄存器可以包括多個未分配的物理寄存器。
[0024]重命名邏輯可以進一步用于更新重命名映射。[0025]亂序處理器可以進一步包括依賴性消除邏輯與重命名邏輯之間的循環(huán)緩沖器,其中,所述循環(huán)緩沖器用于在依賴性消除邏輯消除了依賴性之后存儲位于循環(huán)之中的指令;以及一旦存儲了所述循環(huán)中的全部指令,就將所述指令釋放到重命名邏輯。
[0026]亂序處理器可以進一步包括依賴性消除邏輯與重命名邏輯之間的優(yōu)化邏輯。
[0027]第三方案提供了基本上參考附圖中的圖1、圖5和圖6中的任何一個所描述的一種亂序處理器。
[0028]第四方案提供了基本上參考附圖中的圖2-圖5中的任何一個所描述的一種亂序處理器中寄存器重命名的方法。
[0029]本文描述的方法由有形存儲介質(zhì)上的機器可讀形式的軟件來執(zhí)行,例如,計算機程序的形式,計算機程序包括計算機程序代碼模塊,所述計算機程序代碼模塊在所述程序運行在計算機上時適于執(zhí)行本文描述的任意方法的所有步驟,并且其中,計算機程序可以體現(xiàn)在計算機可讀介質(zhì)上。有形(或非暫時性)存儲介質(zhì)的實例包括磁盤、拇指驅(qū)動器、存儲卡等等,并且不包括傳播信號。軟件可以適于在并行處理器上或者串行處理器上執(zhí)行,使得方法步驟可以以任意合適順序或者同時地執(zhí)行。
[0030]本申請承認固件和軟件可以是有價值的、可單獨交易的商品。旨在涵蓋在“啞”或標準硬件上運行或?qū)Α皢 被驑藴视布M行控制以執(zhí)行期望功能的軟件。還旨在涵蓋“描述”或定義硬件的配置的軟件,例如HDL (硬件描述語言)軟件,如用于設計硅芯片,或用于配置通用編程芯片,以執(zhí)行期望功能。
[0031]優(yōu)選特征可以適當?shù)亟M合,這對于技術人員將是顯而易見的,并且可以與本發(fā)明的任意方面進行組合。
【專利附圖】
【附圖說明】
[0032]將通過例子的方式參考以下附圖來描述本發(fā)明的實施例,其中:
[0033]圖1為示例性亂序處理器的示意圖;
[0034]圖2為可以使用圖1中所示的亂序處理器來實現(xiàn)的示例性寄存器重命名方法的流程圖。
[0035]圖3示出了寄存器重命名的示例;
[0036]圖4示出了四個周期上的流水線重命名操作的示意圖;
[0037]圖5示出了五個周期上的流水線重命名操作的示意圖,其中依賴性消除被劃分為兩階段,并且示出了亂序處理器另一個示例的示意圖;以及
[0038]圖6為示出了兩個其它的示例性亂序處理器的示意圖。
[0039]全部圖中使用共同的參考數(shù)字來表示類似的特征。
【具體實施方式】
[0040]下面僅僅是通過例子的方式來描述本發(fā)明的實施例。這些例子代表了 申請人:當前已知的將本發(fā)明付諸于實踐的最佳方式,雖然這些最佳方式并不是能夠?qū)崿F(xiàn)本發(fā)明的僅有的方式。描述給出了例子的功能以及用于構造和操作例子的步驟的序列。然而,可以通過不同的例子來實現(xiàn)相同的或等同的功能和序列。
[0041]在亂序處理器中寄存器重命名的使用可以參考如下示例來描述,本示例包括兩條指令(標記為Il和12):
[0042]Il:R3=Rl+2
[0043]I2:R1=R2
[0044]因為Rl是12的目標寄存器,所以12不能在Il (在Il中,Rl為源寄存器)之前進行求值,否則的話,在對Il求值時存儲在Rl中的值就不正確了。然而,在這些指令之間并不存在“真正的”依賴性,并且這意味著可以使用寄存器重命名來消除依賴性。例如,12可以使其目標寄存器被重命名為如下:
[0045]I2:R4=R2
[0046]因為目標寄存器已經(jīng)更改成R4,所以現(xiàn)在在Il和12之間沒有依賴性,并且這兩條指令可以被亂序執(zhí)行。這個示例示出了讀后寫(WAR)依賴性的消除。在其它示例中,還可能存在寫后寫(WAW)依賴性,例如,如果指令集進一步包括第三指令(標記為13):
[0047]I3:Rl=R5+4
[0048]這條指令(13)向與之前的指令(12)相同的寄存器(Rl)進行寫入,這意味著第一次寫入可以被忽略,除非此操作有一些其它副作用。
[0049]圖1示出了亂序處理器100的示意圖,亂序處理器100包括提取階段102、解碼階段104、重命名階段106和多個物理寄存器107。應當清楚的是:亂序處理器還可以包括在圖1中沒有示出的其它元件(例如重新排序緩沖器、執(zhí)行流水線等)。提取階段102被安排用于提取程序計數(shù)器所指示的來自程序的指令(按程序順序)。解碼階段104被安排用于在重命名階段106執(zhí)行寄存器重命名之前解釋指令。如上所述,一組(或一批)指令可以同時被重命名。寄存器重命名可以由重命名階段106通過使用結構寄存器與處理器上的物理寄存器107之間的映射來執(zhí)行,并且在圖1中示出了示例性寄存器重命名映射108。寄存器重命名映射108由重命名階段106保持(即更新),它是一種存儲的數(shù)據(jù)結構,顯示了每一個結構寄存器與最近分配給該結構寄存器的物理寄存器之間的映射。結構寄存器為在指令中使用的寄存器的名稱/標識符,并且為了下面的解釋,這些結構寄存器被標記為A*(其中*表示寄存器的編號,例如A0、A1...)。物理寄存器107為處理器中存在的實際的存儲單元,并且這些物理寄存器被標記為P* (例如P0、PL...)。存在比結構寄存器更多的物理寄存器107,并且多個物理寄存器110包括多個未分配的物理寄存器109 (如圖1中陰影所指示的)。在圖1的示例中,寄存器重命名映射108包括四個條目,這些條目指示由結構寄存器標識符(A*)索引的物理寄存器標識符(P*)。例如,結構寄存器O (AO)當前映射到物理寄存器6 (P6),結構寄存器I (Al)當前映射到物理寄存器5 (P5)等等。重命名映射108可以存儲在處理器硬件邏輯中的觸發(fā)器中。
[0050]如圖1中所示,重命名階段106被分成兩個階段:依賴性消除階段110和重命名112,盡管如下更詳細地描述的,可能存在超過兩個的階段(例如,依賴性消除階段110可以被劃分成兩個或更多個子階段)。這些階段中的第一階段,即依賴性消除階段110,消除被并行重命名的一組(或一批)指令中的依賴性。通過使用固定映射在這一階段中為所述一組指令中的指令消除RAW和WAW依賴性,其中固定映射是完全可預測的,并且獨立于任何之前的狀態(tài)并被實現(xiàn)在硬件邏輯114中。如下文更詳細地描述的,固定映射將所述一組指令中的目標寄存器和依賴寄存器映射到中間寄存器(標記為N*)。通過使用這樣的固定映射,僅需要極少量的邏輯(例如硬件邏輯)來實現(xiàn)這一階段,其中所述映射鏈接到一組中的指令的物理單元。第一階段不使用重命名映射(重命名映射不是固定映射,而是存儲了可以隨著每個周期更改的動態(tài)的映射),也不需要執(zhí)行任何查找(例如在固定的數(shù)據(jù)結構中進行查找)。
[0051]這些階段中的第二階段,即重命名112 (其也可被稱為最終階段),然后使用(例如,從中間寄存器到物理寄存器的)重命名映射108并行地重命名所有的寄存器。這樣,重命名階段并行地執(zhí)行對重命名映射的所有讀取和更新(即,在執(zhí)行所有的讀取的同時建立所有的更新,但是直到時鐘邊沿這些更新才生效,使得讀取看不到當前更新的效果),這使得這一最終階段非常易于擴展(例如擴展到同一周期內(nèi)的大量指令)。所使用的重命名映射包括額外的寄存器映射,如圖3中所示并在下文描述。
[0052]雖然方法示出了(在方框208中)在每一個周期中更新重命名映射,但是應當清楚的是:可能存在不需要更改的情形,并且在這種情況下,更新重命名映射的步驟將使得映射不變。
[0053]以這種方式將重命名階段106劃分成兩個階段具有這樣的效果:重命名操作花費兩個周期,與單周期單階段操作相比,這增加了等待時間,但是并沒有減小吞吐量,這是因為兩個階段容易被流水線化(如參考圖4更詳細地描述的)。通過使用此方法,(通過增加一組指令中的指令的數(shù)量)增加吞吐量和/或增加最大時鐘速度是可能的。
[0054]依賴性消除階段和重命名階段110和112都可以完全地用處理器的硬件邏輯來實現(xiàn)?;蛘?,這些方法步驟中的一些或全部可以用軟件來實現(xiàn)。處理器可以是單線程處理器或多線程處理器。在處理器是多線程處理器的情況下,可以為每個線程重復圖1中所示的元件,使得每一個線程具有局部的一組結構寄存器和重命名階段106。可替換的多線程處理器可以共享硬件邏輯(方框106)的一些或全部來進行實際的重命名,其中可以結合寄存器編號來使用線程編號,以對重命名映射108進行索引(即,在重命名映射與超過一個的線程相關的情況下)。例如,重命名映射可以具有將用于線程O的結構寄存器O (AO)映射到物理寄存器6 (P6)的條目以及將用于線程I的相同的結構寄存器(AO)映射到物理寄存器26 (P26)的不同的條目。
[0055]圖2示出了重命名階段106的示例性操作方法的流程圖。在由圖1中所示的依賴性消除階段110執(zhí)行的第一階段21中,使用固定映射將所有的目標寄存器和依賴寄存器重命名成額外的寄存器(方框202)。本文中使用術語“依賴寄存器”來表示在一條指令中被讀取并且還被一組指令中的之前的指令寫入的那些寄存器(即,在一組指令中的之前的指令中是目標寄存器的任何源寄存器)。為了進行下面的解釋,目標寄存器可以被標記為0P*,其中*代表了指令的編號。
[0056]所使用的額外寄存器的數(shù)量(例如N個額外寄存器)與一組指令中的目標寄存器的最大數(shù)量相等。在許多的示例中,每一個指令僅向一個目標進行寫入,并且在這樣的示例中,所使用的額外寄存器的數(shù)量與在一起被重命名的一組指令中的指令的數(shù)量(例如,一組指令中的N條指令)相等。例如,在一組指令包括:
[0057]Il:R3=Rl+2
[0058]I2:R1=R2
[0059]I3:R5=Rl+4
[0060]的情況下,將存在三個使用的額外寄存器(N=3 )。一個額外寄存器將用于第一條指令(Il)的目標寄存器(R3),另一個額外寄存器將用于第二條指令(12)的目標寄存器(R1),并且第三個額外寄存器將用于第三條指令(I3)的目標寄存器(R5)。在這個示例當中,存在一個依賴寄存器,其是第三條指令(13)中的源寄存器R1,這是因為這個寄存器已經(jīng)在所述一組指令中的之前的指令中(即,在第二條指令中)被寫入。然而,在其它的示例中,指令可能具有超過一個的目標寄存器,并且因此所使用的額外寄存器的數(shù)量可能超過所述一組指令中的指令的數(shù)量。
[0061]在第一階段(方框201)以及在這個示例中所使用的固定映射可以如下表所示,其中使用符號N*。
[0062]
【權利要求】
1.一種亂序處理器中寄存器重命名的方法,包括: 在第一階段中,使用在硬件邏輯中定義的固定映射來消除一組指令中的依賴性(21);以及 在最終階段中,使用重命名映射并行地對所述一組指令中的所有寄存器進行重命名(22、206)。
2.根據(jù)權利要求1所述的方法,其中,使用在硬件邏輯中定義的固定映射來消除一組指令中的依賴性包括: 使用所述固定映射,用一組額外寄存器中的一個額外寄存器來對所述一組指令中的所有目標寄存器和任意依賴寄存器進行重命名(202);以及 將關于使用了哪個額外寄存器來對每一個目標寄存器進行重命名的細節(jié)傳遞到所述最終階段(204)。
3.根據(jù)權利要求2所述的方法,其中,目標寄存器和額外寄存器之間的所述固定映射基于所述一組指令中的每一個目標寄存器的物理位置。
4.根據(jù)權利要求1所述的方法,其中,所述最終階段進一步包括: 更新所述重命名映射(208 )。
5.根據(jù)權利要求4所述的方法,其中,所述重命名映射包括與每一個額外寄存器相關聯(lián)的條目。
6.根據(jù)權利要求5所述的方法,其中,更新所述重命名映射包括: 基于從所述第一階段傳遞的細節(jié),更新所述重命名映射中與每一個目標寄存器相關聯(lián)的條目(210);以及 更新所述重命名映射中與每一個額外寄存器相關聯(lián)的條目,以將每一個額外寄存器映射到未分配的物理寄存器(212)。
7.根據(jù)權利要求6所述的方法,進一步包括: 存取未分配的物理寄存器的列表。
8.根據(jù)權利要求1所述的方法,其中,所述固定映射獨立于任何之前的狀態(tài)。
9.根據(jù)權利要求1所述的方法,進一步包括: 在所述第一階段和所述最終階段之間執(zhí)行優(yōu)化操作。
10.根據(jù)權利要求2所述的方法,其中,所述一組指令包括N條指令,并且所述一組額外寄存器包括N個額外寄存器,其中,N為整數(shù)。
11.根據(jù)權利要求1所述的方法,其中,所述一組指令中的每一條指令包括不超過Y個的目標寄存器,并且其中,每一條指令具有一組Y個相關聯(lián)的有效位,每一個有效位指示在該指令中是否使用了所述Y個目標寄存器中的一個目標寄存器。
12.根據(jù)權利要求11所述的方法,其中,所述一組指令包括N條指令,并且所述一組額外寄存器包括NXY個額外寄存器,其中,N和Y為整數(shù)。
13.根據(jù)前述權利要求中的任何一個所述的方法,其中,所述一組指令中的每一條指令包括不超過X個的源寄存器,并且其中,每一條指令具有一組X個相關聯(lián)的有效位,每一個有效位指示在該指令中是否使用了所述X個源寄存器中的一個源寄存器。
14.一種亂序處理器(100、500、606),包括: 重命名映射(108);定義寄存器之間的固定映射的硬件邏輯(114); 依賴性消除邏輯(110),用于使用所述固定映射來消除一組指令中的依賴性; 重命名邏輯(112),用于使用所述重命名映射并行地對所述一組指令中的所有寄存器進行重命名;以及 多個物理寄存器(107)。
15.根據(jù)權利要求14所述的亂序處理器,其中,所述依賴性消除邏輯包括多個依賴性消除邏輯實例(110),并且其中,每一個依賴性消除邏輯實例用于消除所述一組指令中的單獨的、非重疊的子集中的依賴性。
16.根據(jù)權利要求14所述的亂序處理器,其中,所述依賴性消除邏輯用于通過以下方式消除一組指令中的依賴性:使用所述固定映射,用一組額外寄存器中的一個額外寄存器來對所述一組指令中的所有目標寄存器和任意依賴寄存器進行重命名;并且將關于使用了哪個額外寄存器來對每一個目標寄存器進行重命名的細節(jié)傳遞到所述重命名邏輯。
17.根據(jù)權利要求14所述的亂序處理器,其中,所述重命名映射包括與每一個額外寄存器相關聯(lián)的條目。
18.根據(jù)權利要求14所述的亂序處理器,其中,所述多個物理寄存器包括多個未分配的物理寄存器(109)。
19.根據(jù)權利要求14所述的亂序處理器,其中,所述重命名邏輯進一步用于更新所述重命名映射。
20.根據(jù)權利要求14-19中的任何一個所述的亂序處理器,進一步包括所述依賴性消除邏輯和所述重命名邏輯之間的循環(huán)緩沖器(602),其中,所述循環(huán)緩沖器用于:在所述依賴性消除邏輯進行了依賴性消除之后存儲位于循環(huán)中的指令;以及一旦所述循環(huán)中的所有指令都被存儲,就將所述指令釋放到所述重命名邏輯。
【文檔編號】G06F9/38GK103577159SQ201310333130
【公開日】2014年2月12日 申請日期:2013年8月2日 優(yōu)先權日:2012年8月7日
【發(fā)明者】H·杰克遜 申請人:想象力科技有限公司