<超標量處理器概覽> 第 8 章 - 發射 (Part 1)

8.1 - 概述 Issue 就是將符合一定條件的指令從 Issue Queue 中選出來,並送到 FU (Function Unit) 中執行的過程 Issue Queue 會依照一定的規則,選擇那些 source registers 都已經準備好的指令,將其送到 FU 中執行,這個過程就稱為:Issue Issue Queue 也被稱為 Reservation Station 對於 in-order core,指令會按照程式原始順序加進 Issue Queue 中,此時 Issue Queue 就相當於一個 FIFO 對於 out-of-order core,只有少數指令,如 store 及分支指令,才會採用 in-order 的方式執行,對其他大部分的指令,都是採用 out-of-order 的方式執行 指令到了 Issue Queue 後,只要 Issue Queue 中任一條指令的 operands 都準備好了,且滿足 issue 的條件,就可以將其送到 FU 中執行 Issue Queue 設計的好壞,會直接影響處理器的 concurrency Issue stage 的硬體比較複雜,一般它都在 critical path 上,直接影響 CPU 的 cycle time ...

2025/04/09 · 11 分鐘 · 2236 字 · Frank Chang

<超標量處理器概覽> 第 8 章 - 發射 (Part 2)

8.5 - 喚醒 (Wake up) 8.5.1 - 單週期指令的喚醒 Wake up 是指被 select 電路選中的指令將其執行完後,將其 destination register 和 Issue Queue 中所有的 source registers 編號做比較,並將相同編號的 source registers 標記為 ready 的過程 因為需要將被選中指令的 destination register 編號需要傳遞到 Issue Queue 中的所有 entries,當 Issue Queue 容量比較大,或是 Issue Queue 的個數比較多時,這個編號就需要走很長的路徑 一般情況下,select 電路的個數等同於 issue width 以下是 Issue width = 4 的 wake-up 電路 (只包含一個 Issue Queue 的 entry,且所有 select 電路共用同一個 Issue Queue): SrcL /SrcR:第一、第二個 source register 的編號 ValL / ValR:指令是否存在第一、第二個 source register RdyL / RdyR:第一、第二個 source register 是否準備好 Dest:Destination register 的編號 Issued:指令是否已經被 issued 出去 當指令準備好,並被 select 電路選中時,此時該指令不一定會馬上被 issued 出去 (e.g. 一條指令使用了 load 指令的結果,即使其被 select 電路選中,也不可以馬上離開 Issue Queue),因此需要透過 Issued 記錄該指令是否已經被 issued 了 如果已經被 issued,select 電路就不會重複選到該指令 當指令準備好時,就會向 select 電路送 request 訊號,請求被仲裁 Select 電路會選擇根據是否選擇了該指令,送出 grant 訊號 四個 select 電路同時間只會有一個 grant 訊號是 valid 的 如果一條指令被 granted,那麼就會將其 Dest 送到 tag bus 上,以便 broadcast 給所有的 Issue Queue entries 實務上,為了提供速度,需要減少 Issue Queue 的容量,因此可以使用多個容量較小的 Issue Queue ...

2025/04/19 · 13 分鐘 · 2643 字 · Frank Chang

<超標量處理器概覽> 第 11 章 - 真實世界的例子:Alpha 21264 處理器

11.1 - 概述 DEC 的 Alpha 21264 是 superscalar CPU 的一個典範,其為 4-way out-of-order superscalar CPU,工作頻率是 466 ~ 667 MHz,benchmark:SPECint95 - 40、SPECfp95 - 86;與同時期其他的處理器 benchmark 對比: Alpha 21264 的 pipeline 最多同時支持 80 條指令,以及 80 個 checkpoints,因此對於 branch mis-prediction、exception、interrupt,Alpha 21264 都可以快速地恢復 CPU 狀態 Alpha 21264 的分支預測器實現了基於局部歷史 (Local prediction) 和基於全局歷史 (Global prediction) 兩種預測方式,並根據程式的執行情況,動態選擇預測率最高的方法,這就像是兩種分支預測方式在進行競爭一樣 對於 load/store 指令,Alpha 21264 採用了 Speculative Memory Disambiguation 和 Load hit/miss Prediction Alpha 21264 採用 7-stage pipeline,比較短的 pipeline 使 branch mis-prediction 發生時的 mis-penalty 比較低,從而提高處理器的效率: ...

2025/05/10 · 15 分鐘 · 3101 字 · Frank Chang