寄存器再命名方法
2023-09-11 22:02:25 1
專利名稱:寄存器再命名方法
技術領域:
本發明涉及在採用可以執行無序(Out-of-order)的超標量結構的處理器中,每一時鐘周期可進行多個指令處理的寄存器再命名方法。
背景技術:
在採用可執行無序(Out-of-order)的超標量結構的處理器中,具有數量上超過結構上規定的邏輯寄存器數量的物理寄存器,能靈活使用動態寄存器命名的方法。
即,在每個周期,在多個指令中比較作為操作數表示的邏輯寄存器序號,檢查依賴關係,將邏輯寄存器序號分別再命名為適當的物理寄存器序號,使其依賴關係解除。
為了實現寄存器再命名,已經知道有採用再調配緩衝器的方式和採用變換表的方式。採用再調配緩衝器的方式,例如已在可從美國加利福尼亞州Santa Clara的Intel公司購入的商標為Pentium處理器中採用了。採用變換表的方式如Keller,R.M.「Look-AheadProcessors」Computing Surveys,Vol.7,no.4(1975年12月),pp.177~195中所示,例如已在可從美國加利福尼亞州Mountain View的MIPS公司(MIPS Technologies,Inc.)購入的商標為R10000處理中採用了。
與採用再調配緩衝器的方式相比較,採用變換表的方式額外需要存取變換表的步聚,但檢查指令間依賴性的邏輯電路卻比較簡單。
在超標量處理器中,通過更有效地進行寄存器再命名,在一周期中進行更多的指令的解碼/發行,可以提高處理性能。
但是,問題是當使一周期進行寄存器再命名的數量比現在的水平再進一步增加時,將使邏輯電路規模極度增大,所以很困難。
發明的公開本發明是為解決上述問題而提出的,其目的在於提供一種寄存器再命名方式,可以使一周期能處理的指令數比現在的水平進一步增加。
採用本發明的寄存器再命名方式的處理器具有獨立的、即保持未被分配的物理寄存器序號的獨立表;及分別對應於各邏輯寄存器所設置的各入口中可寫入物理寄存器序號的變換表。
本發明的寄存器再命名方式,通過將指令間依賴性檢測作為前處理進行的流水線化,可以在一周期進行更多指令的處理。
首先,對同時進行寄存器再命名的多個指令,進行以下的前處理。
(a)對於作為目標操作數(operand)表示的各邏輯寄存器序號,加上指令順序的符號。該符號應該是將來置換成從獨立表取出分配的物理寄存器序號的指標。
(b)對於作為源操作數表示的各邏輯寄存器序號,與同時進行寄存器再命名的指令有WAR(writ-after-read)依賴關係時,加上處於該依賴關係的指令的目標操作數中帶有的符號。
在上述的前處理之後,將指令群中作為操作數表示的邏輯寄存器序號分別再命名為適當的物理寄存器序號。加上符號的邏輯寄存器序號分別再命名為對應於所加的符號從獨立表中取出分配的物理寄存器序號。未加符號的邏輯寄存器序號分別再命名為存取變換表所得到的物理寄存器序號。
以相同定時進行變換表內容的更新。即,在指令群中將分別對應於目標操作數表示的邏輯寄存器序號的變換表入口內容,分別改寫為對應所帶符號分配的物理寄存器序號。在多個指令中,當相同邏輯寄存器序號作為目標操作數表示時,有關位於其中最後面的指令的寫入是有效的。
如上所述,通過由2個階段進行的即流水線化,可以採用比較簡單的電路,一周期進行更多指令的寄存器再命名。
附圖的簡要說明第1圖是為實現本發明的寄存器再命名方式所需要的硬體方框圖。
第2圖是在本發明的一實施例中,具體表示關於某指令串進行寄存器再命名時的變換表及各F寄存器內容變化的圖。
實施發明的最佳方式下面參照附圖對實現本發明的寄存器再命名方式的最佳實施例進行說明。下面所述的採用本發明的寄存器再命名方式的處理器實施例,在結構上假定存在R0、R1、……R7,8個邏輯寄存器,但是硬體卻是具有P00、P01、……P31的32個物理寄存器的RISC機器,其構成為1周期可進行4個指令的寄存器再命名。
圖1是為實現本發明的寄存器再命名方式所需要的硬體方框圖,1表示變換表(mapping list),2表示獨立表(free list)。
下面對上述各構成單元說明其詳細的構成。
(A)變換表(MT)如圖1所示,在本實施例中,變換表(以下稱為MT)1由分別對應於R0、R1、……R7的8個邏輯寄存器所設置的10~17的8個入口(entry)構成。MT的各個入口可寫入一個物理寄存器序號。
(B)獨立表(FL)獨立表(以下稱為FL)保持獨立的、即未被分配的物理寄存器序號。
當分配獨立的物理寄存器時,從FL取出獨立的物理寄存器序號。反之,當解除某物理寄存器分配時,將該物理寄存器序號登錄在FL中。
如圖1所示,在本實施例中,FL2包括F寄存器21、22、23、24和寄存器文件28。
各F寄存器可寫入1個物理寄存器序號,從FL取出獨立的物理寄存器序號是從F寄存器得到的。即,需要有與一個周期進行寄存器再命名的指令數量相當的F寄存器,在本實施例的處理器中具有F1、F2、F3、F4,4個F寄存器。
FL中的寄存器文件28在各入口寫入一個物理寄存器序號,構成循環型的F1FO隊列。即,解除分配的物理寄存器的序號加在隊列的未尾,在取出物理寄存器序號的F寄存器中從隊列的前面補充物理寄存器序號。
下面說明本實施例中的寄存器再命名過程。
在本實施例中,以①前處理、②寄存器再命名的執行及MT內容的更新2個步驟進行寄存器再命名。以下對各步驟說明操作內容。
①前處理對同時進行寄存器再命名的多個指令進行以下的前處理。
(1a)對於作為目標操作數表示的各邏輯寄存器序號加@1、@2、……指令順序的符號。在本實施例中,符號@1、@2、@3、@4分別對應於FL中的F寄存器F1、F2、F3、F4。
(1b)對於作為源操作數表示的各邏輯寄存器序號,當與同時進行寄存器再命名的指令有WAR(writ-after read)依賴關係時,加上處於該依賴關係的指令的目標操作數上帶有的符號。即,在位於第2個以後的各指令中,將作為源操作數表示的各邏輯寄存器序號,與位於其指令以前的作為指令的目標操作數表示的邏輯寄存器序號相比較,當一致時加相同符號。當一致的有多個存在時,選擇位於其中最後指令的那個。
②寄存器再命名的執行及MT內容的更新在上述的前處理之後,在指令群中將作為操作數表示的邏輯寄存器序號分別再命名為適當的物理寄存器序號,更新MT的內容。具體來說進行以下的處理。
(2a)加有符號的邏輯寄存器序號,再命名為對應於各加有的符號從FL取出分配的物理寄存器序號。未加有符號的邏輯寄存器序號分別再命名為存取MT所得到的物理寄存器序號。
(2b)在指令群中將分別對應於作為目標操作數表示的邏輯寄存器序號的MT入口的內容,改寫為分別對應於加有符號所分配的物理寄存器序號。在多個指令中,當相同的邏輯寄存器序號作為目標操作數表示時,關於其中位於最後的指令的寫入是有效的。
以上是本實施例中的寄存器再命名的過程,下面對具體的操作例進行說明。假設在本實施例的處理器中進行以下4個指令的寄存器再命名。
指令1 mul R0,R1,R2;R0=R1*R2指令2 mul R1,R3,R4;R1=R3*R4指令3 add R0,R0,R1;R0=R0+R1指令4 div R0,R0,R5;R0=R0/R5以上的指令串通過位於其以前的指令,在R1、R2、R3、R4、R5的各寄存器中分別輸入數據D1、D2、D3、D4、D5,計算{(D1*D2)+(D3*D4)}/D5,放入寄存器R0中。
在本實施例的處理器中,關於上述指令串進行寄存器再命名的過程,詳細說明如下。
首先,為寄存器再命名的前處理,如下進行。
指令1 mul R0(@1),R1(none),R2(none)指令2 mul R1(@2),R3(none),R4(none)指令3 add R0(@3),R0(@1),R1(@2)指令4 div R0(@4),R0(@3),R5(none)
即,在各指令中,對於指令碼的下一個所示的目標寄存器操作數,分別順序加上符號@1、@2、@3、@4。
在位於第2個以後的各指令中,使各源寄存器操作數與位於其指令前的指令目標寄存器操作數相比較,當一致時加上相同符號,當一致的存在多個時,選擇其中位於最後的指令的那個。
在指令1中,無論哪一個源操作數中都不加符號。實際上,在「未加符號」的源操作數上加有省缺的符號(例如@0)。
在指令2中,使各源操作數與指令1的目標操作數R0相比較,這時由於沒有一致的,所以不加符號。
在指令3中,使各源操作數與指令1及2的目標操作數相比較,這時,由於第1源操作數與指令1的目標操作數一致、第2源操作數與指令2的目標操作數一致,所以分別加符號@1、@2。
在指令4中,使源操作數與指令1、2及3的目標操作數相比較,這時,由於第1源操作數與指令1及3的目標操作數一致,所以加上後面的指令3上的符號@3。
用於進行上述的寄存器再命名的前處理,通過採用適當的電路可在1周期內實現。
在下一周期中,執行寄存器再命名及進行MT的內容更新,此時的MT及FL中的各F寄存器的內容如圖2(A)中所示。
加有符號的寄存器操作數分別再命名為對應於所加符號從FL取出分配的物理寄存器序號。而未加符號的寄存器操作數分別再命名為以邏輯寄存器序號存取MT所得到的物理寄存器序號,給出的指令改讀為以下內容。
指令1 mul P19,P03,P22指令2 mul P08,P29,P05指令3 add P27,P19,P08指令4 div P21,P27,P07
另外,將分別對應於指令1~4的目標操作數的MT入口內容,分別改寫為對應於加有符號分配的物理寄存器序號。此處如圖2(B)所示,對應於R0及R1的MT入口的內容分別改寫為P21、P08。關於R0,存在P19、P27、P21三重分配,但在MT中寫入最後的P21。另外,如圖2(B)所示,在取出物理寄存器序號的各F寄存器中,補充獨立的物理寄存器的序號P31、P01、P17、P14。
以上是關於在本實施例的處理器中給予的指令串的寄存器再命名的過程。
另外,在前處理階段,也可以確定有關變換表內容更新的邏輯寄存器序號和符號的對應關係。即,在前處理階段,在同時進行寄存器再命名的多個指令中,當相同邏輯寄存器序號作為目標操作數表示時,除了位於其中最後的指令之外,有關變換表內容的更新確定為無效。
例如在上述的操作例中,在前處理階段,確定指令11R0→@1無效指令2R1→@2有效指令3R0→@3無效指令4R0→@4有效在下一周期中,只有在有效時,才可以進行對應於加有符號而分配的物理寄存器序號的寫入。
如上所述,關於變換表內容的更新也可以通過進行前處理,進一步使電路簡化。
產業上利用可能性如上所述,根據本發明的寄存器再命名方式,通過將指令間依賴性的檢測作為前處理進行的流水線化,可以採用比較簡單的電路,在一周期進行更多指令的處理。
權利要求
1.一種寄存器再命名方法,其特徵在於在採用具有數量超過結構上所規定的邏輯寄存器數量的物理寄存器、保持未分配的物理寄存器序號的獨立表、及在對應於各邏輯寄存器所設置的各入口上寫入物理寄存器序號的變換表的可執行無序的超標量結構的處理器中,在同時進行寄存器再命名的多個指令中,(a)對目標操作數所表示的各邏輯寄存器序號,加指令順序的符號;(b)對源操作數表示的各邏輯寄存器序號,在同時進行寄存器再命名的指令與WAR(writ-after-read)有依賴關係時,加上具有該依賴關係的指令的目標操作數所帶有的符號,然後,加有符號的邏輯寄存器序號,分別再命名為與所加的符號對應、從該獨立表中取出並被分配的物理寄存器序號,而未加符號的邏輯寄存器序號,分別再命名為存取該變換表所得到的物理寄存器序號。
2.一種獨立表,其特徵在於包括F寄存器,其數量與每1時鐘周期進行寄存器再命名的指令數相當,其中各寫入一個物理寄存器序號;循環型FIFO隊列,由在各入口中寫入一個物理寄存器序號的寄存器文件構成;將解除分配的物理寄存器序號隨機加在該隊列的末尾;根據從F寄存器所取出的物理寄存器序號,在取出物理寄存器序號的F寄存器中從該隊列的前頭補充物理寄存器序號。
全文摘要
一種寄存器再命名方法,在採用超標量結構的處理器中,具有保持未分配的物理寄存器序號的獨立表、及在分別對應於各邏輯寄存器而設置的各入口中寫入物理寄存器序號的變換表,通過將指令間依賴性的檢測作為前處理進行的流水線化,可在一周期處理很多指令。
文檔編號G06F9/38GK1373869SQ00812604
公開日2002年10月9日 申請日期2000年9月6日 優先權日1999年9月8日
發明者關一 申請人:關一