網(wǎng)站建設(shè)套餐介紹網(wǎng)絡(luò)營銷官網(wǎng)
重命名
- 寄存器重命名過程的恢復(fù)
- 使用 Checkpoint 對 RAT 進行恢復(fù)
- 使用 WALK 對 RAT 進行恢復(fù)
- 使用 Architecture State 對 RAT 進行恢復(fù)
- 總結(jié)
- 分發(fā)(Dispatch)
寄存器重命名過程的恢復(fù)
當(dāng)發(fā)生異常、分支預(yù)測失敗時,指令占用 RAT、ROB 和 Issue Queue 等資源恢復(fù)
使用 Checkpoint 對 RAT 進行恢復(fù)
對一個正在工作的部件來說,兩種方式
名字 | 隨機訪問的 GC | 串行訪問 GC |
---|---|---|
縮寫 | Random Access GC, RAGC | Sequential Access GC,SAGC |
區(qū)別 | 將整個內(nèi)容放到任意 GC 中 | 逐步地移位才能放到指定的 GC 中 |
和主存儲器連接方式 | 連接每個 GC | 連接單個 GC |
要求 | 驅(qū)動負載較大(接緩沖器) | 恢復(fù)時,可能需要移位多次 |
選擇 | 更合適 |
- MBC(Main Bit Cell)
- SRAM 最小存儲單元
- 兩讀一寫
- CBC(Checkpoint Bit Cell)
- 一讀一寫
RAT 狀態(tài)保存時(Allocation):將 MBC 的內(nèi)容復(fù)制到指定的 CBC 中
RAT 狀態(tài)恢復(fù)時( Restore ):將 CBC 的內(nèi)容復(fù)制到指定的 MBC 中
使用 WALK 對 RAT 進行恢復(fù)
ROB 存儲了這條指令前對應(yīng)的物理寄存器,可以逐步倒退
當(dāng)發(fā)現(xiàn)一條分支指令預(yù)測失敗時,使用分支指令的編號,將流水線中所有相關(guān)指令都給抹除
同時暫停流水線,從 ROB 的底端開始(最新的指令),逐條將每條指令之前對應(yīng)的映射關(guān)系寫到 RAT 中。
- 分支預(yù)測錯誤時,首先需要抹除流水線,需要逐個指令地進行恢復(fù),需要消耗很多時間(增大分支預(yù)測失敗的懲罰)
- 異常時,只需要恢復(fù),不需要抹掉指令(因為異常需要等到該指令變成最舊的指令時才進行)
占用資源少,可用于處理異常發(fā)生頻率低的處理器
使用 Architecture State 對 RAT 進行恢復(fù)
處理器外部訪問邏輯寄存器時,RAT 中存儲的是未提交狀態(tài),所以不一定
例子:
指令 A 提交成功,此時訪問 RAT r1 對應(yīng)的是 P34,但 D 可能出現(xiàn)異常,由此外部不應(yīng)該讀取這個映射關(guān)系
因此在提交時,也使用一個 RAT,所有正確的流水線指令都會更新 RAT,稱為 aRAT(architecture RAT)
利用 aRAT 也可以完成修復(fù)
- 出現(xiàn)分支預(yù)測失敗時,并不馬上進行 RAT 狀態(tài)修復(fù),而是繼續(xù)執(zhí)行,直到運行到該分支指令變成最舊指令時,此時 aRAT 則是正確狀態(tài)的指令
缺點
- 流水線中存在 D-cache 缺失的 load 指令時,該分支指令需要等待很長時間才能順利離開
總結(jié)
復(fù)位方式 | Checkpoint | WALK | Architecture State |
---|---|---|---|
內(nèi)容 | 將 RAT 內(nèi)容復(fù)制出來 | 根據(jù) ROB 序列完成刪掉、恢復(fù)指令 | 等待分支指令成為最老指令 利用 ARAT 復(fù)制 |
占用資源 | 多 | 少 | 直接復(fù)制比較簡單 |
處理速度 | 快 | 慢 | 可能由于 D-cache 原因變慢 |
常用于 | 異常發(fā)生概率低的處理器中 | 不需要過多處理,降低功耗 |
分發(fā)(Dispatch)
經(jīng)過重命名后,會進入
- 隊列
- 發(fā)隊隊列 (out of order)
- 大部分 FU (function Unit),等待操作數(shù)
- 發(fā)射隊列 (in order)
- Store 指令和分支指令
- 發(fā)隊隊列 (out of order)
- 重排序緩存 (ROB)
- 亂序執(zhí)行的指令拉回到原始順序,并且記錄指令執(zhí)行的狀態(tài)(是否發(fā)生異常)