寄存器重命名:讓CPU擺脫假依賴的束縛

CPU只有16個整數(shù)寄存器(x86-64),但現(xiàn)代處理器內(nèi)部有上百個物理寄存器。寄存器重命名技術(shù)把程序看到的"邏輯寄存器"動態(tài)映射到"物理寄存器",消除WAW和WAR假依賴,讓指令亂序執(zhí)行成為可能。


1. 重命名的核心思想

程序看到的寄存器是邏輯寄存器(Architectural Register),x86-64有16個。處理器內(nèi)部有物理寄存器(Physical Register),現(xiàn)代CPU有200+個。

映射關(guān)系

  • 每條寫邏輯寄存器的指令,分配一個新的物理寄存器
  • 后續(xù)讀該邏輯寄存器的指令,讀取最新的物理寄存器
  • 舊物理寄存器在不再被使用時釋放

示例

原始代碼:
  ADD R1, R2, R3    ; 寫R1
  MUL R4, R1, R5    ; 讀R1
  SUB R1, R6, R7    ; 寫R1(WAW!)
  DIV R8, R1, R9    ; 讀R1

重命名后:
  ADD P10, P2, P3   ; R1→P10
  MUL P11, P10, P5  ; 讀P10
  SUB P12, P6, P7   ; R1→P12(新物理寄存器,消除WAW)
  DIV P13, P12, P9  ; 讀P12

現(xiàn)在ADD和SUB可以并行執(zhí)行,因?yàn)樗鼈儗懖煌奈锢砑拇嫫鳌?/p>


2. 三種實(shí)現(xiàn)方式

2.1 ROB-based重命名(Intel P6)

Intel P6架構(gòu)(Pentium Pro/II/III)使用重排序緩沖區(qū)(ROB)作為物理寄存器[1]

  • 推測結(jié)果存在ROB中
  • 退休時復(fù)制到架構(gòu)寄存器文件(ARF)
  • 重命名映射表記錄邏輯寄存器→ROB entry

問題

  1. 每條指令都占ROB entry,即使沒有目的寄存器(如分支)
  2. 源操作數(shù)可能來自ROB或ARF,需要雙端口支持
  3. 退休時需要數(shù)據(jù)搬運(yùn)(ROB→ARF),增加功耗

2.2 ARF擴(kuò)展(Intel Netburst早期)

使用獨(dú)立的物理寄存器文件(PRF)存儲推測結(jié)果[2]

  • 只有有目的寄存器的指令才占PRF entry
  • 退休時復(fù)制到ARF
  • 比ROB方案節(jié)省空間

問題:邏輯寄存器的值仍可能存在于PRF和ARF兩個地方,取數(shù)時需要判斷。

2.3 統(tǒng)一PRF(現(xiàn)代主流)

Intel Sandy Bridge及以后、ARM Cortex-A73及以后采用統(tǒng)一物理寄存器文件[1][3]

  • 合并ARF和PRF,所有寄存器值都存在PRF
  • 沒有數(shù)據(jù)搬運(yùn),退休時只需更新映射關(guān)系
  • 需要空閑列表(Free List)管理物理寄存器
  • 需要兩個重命名映射表(RAT):
    • Front-end RAT:記錄推測狀態(tài)
    • Retirement RAT:記錄已提交狀態(tài)

優(yōu)勢

  1. 指令結(jié)果只寫一次,降低功耗
  2. 源數(shù)據(jù)只在一個地方,簡化取數(shù)邏輯
  3. 減少電路連線和邏輯門級數(shù)

ARM Cortex-A73的具體實(shí)現(xiàn)[3]

  • 整數(shù)寄存器文件:41個物理寄存器(64位寬)
  • FP/向量寄存器文件:38個物理寄存器(128位寬)
  • 分離設(shè)計(jì)降低端口數(shù),節(jié)省面積和功耗

3. Tomasulo算法:重命名的經(jīng)典實(shí)現(xiàn)

Tomasulo算法(IBM 360/91,1967年)首次實(shí)現(xiàn)了寄存器重命名[4][5]。

3.1 核心組件

保留站(Reservation Station)

  • 每個功能單元有獨(dú)立的保留站
  • 緩存指令和操作數(shù)
  • 操作數(shù)未就緒時,記錄產(chǎn)生它的保留站標(biāo)簽(Tag)

寄存器重命名

  • 指令中的邏輯寄存器被替換為值或指向保留站的指針
  • 消除WAR和WAW依賴

公共數(shù)據(jù)總線(CDB)

  • 廣播已完成指令的<值, 標(biāo)簽>
  • 等待該標(biāo)簽的保留站捕獲值

3.2 執(zhí)行流程

  1. 發(fā)射(Issue)

    • 從指令隊(duì)列取指令
    • 分配空閑保留站
    • 重命名源寄存器:如果值已就緒,直接讀入;否則記錄標(biāo)簽
    • 重命名目的寄存器:分配新標(biāo)簽
  2. 執(zhí)行(Execute)

    • 監(jiān)視CDB,等待操作數(shù)就緒
    • 所有操作數(shù)就緒后,送入功能單元執(zhí)行
  3. 寫回(Writeback)

    • 結(jié)果通過CDB廣播<值, 標(biāo)簽>
    • 更新寄存器文件和等待的保留站
    • 釋放保留站

3.3 處理WAW和WAR

WAW示例

DIV F0, F2, F4    ; F0 = F2/F4
SUB F0, F6, F8    ; F0 = F6-F8(WAW?。?

Tomasulo處理:

  • DIV發(fā)射到保留站Mult1,目的F0重命名為Mult1的標(biāo)簽
  • SUB發(fā)射到保留站Add1,目的F0重命名為Add1的標(biāo)簽
  • 后續(xù)讀F0的指令會讀到Add1的標(biāo)簽(最新映射)
  • DIV的結(jié)果寫入F0時,如果映射已更新到Add1,則不更新(避免覆蓋)

WAR示例

SUB F4, F0, F8    ; 讀F0
DIV F0, F2, F4    ; 寫F0(WAR!)

Tomasulo處理:

  • SUB發(fā)射到Add1,源F0的值直接讀入(或記錄標(biāo)簽)
  • DIV發(fā)射到Mult1,目的F0重命名為Mult1的標(biāo)簽
  • SUB從Add1的Vj字段讀F0,不受DIV寫F0的影響

4. 物理寄存器的釋放

關(guān)鍵問題:什么時候釋放物理寄存器?

原理:當(dāng)后續(xù)指令都使用新的映射時,舊物理寄存器可以釋放。

實(shí)現(xiàn)[4]

  1. 重命名時,記錄目的寄存器的舊映射(Previous Mapping)
  2. 指令退休時,檢查該舊映射是否還被后續(xù)指令使用
  3. 如果沒有使用,放入Free List

示例

指令a: ADD R1, R2, R3    ; R1→P1(舊映射:P0)
指令b: SUB R1, R4, R5    ; R1→P6(舊映射:P1)

當(dāng)指令b退休時:
- 后續(xù)指令使用R1都讀到P6
- P1不再被使用,可以釋放

ROB在這里的作用是記錄指令順序,確保按程序順序退休和釋放寄存器。


5. 總結(jié)

依賴類型 是否可消除 消除方法 實(shí)現(xiàn)復(fù)雜度
RAW 轉(zhuǎn)發(fā)/等待 -
WAW 重命名目的寄存器
WAR 重命名目的寄存器

寄存器重命名的核心價值

  1. 消除假依賴,暴露更多指令級并行
  2. 支持亂序執(zhí)行,提升IPC
  3. 動態(tài)映射,比靜態(tài)編譯優(yōu)化更靈活

三種實(shí)現(xiàn)方式對比

  • ROB-based:設(shè)計(jì)簡單,但數(shù)據(jù)搬運(yùn)多,功耗高
  • ARF擴(kuò)展:節(jié)省PRF空間,但取數(shù)邏輯復(fù)雜
  • 統(tǒng)一PRF:無數(shù)據(jù)搬運(yùn),能效最優(yōu),現(xiàn)代主流

理解寄存器重命名,就能理解為什么現(xiàn)代CPU能在只有16個架構(gòu)寄存器的情況下,實(shí)現(xiàn)深度亂序執(zhí)行和高性能。


參考


  1. Chips and Cheese. Sandy Bridge: Setting Intel's Modern Foundation. P6 vs Sandy Bridge PRF. ? ?

  2. Chips and Cheese. Tracing Intel's Atom Journey: Goldmont Plus. PRF vs ROB. ?

  3. Chips and Cheese. Cortex A73's Not-So-Infinite Reordering Capacity. A73 PRF design. ? ?

  4. CSDN博客. 計(jì)算機(jī)體系結(jié)構(gòu)----寄存器重命名/Tomasulo算法. ? ?

  5. 中國科學(xué)技術(shù)大學(xué). 5-3 動態(tài)指令流調(diào)度II. Tomasulo算法詳解. ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容