<超標量處理器概覽> 第 9 章 - 執行
9.1 - 概述 FU 的個數決定了每個 cycle 最大可以同時執行的指令個數,也就是 issue width Execute stage 另一個重要的部份就是 bypassing network,其負責將 FU 的運算結果送到其他需要它的地方,像是 physical register file (PRF)、其他 FU 的輸入端、store buffer 等 隨著每個 cycle 可以同時執行的指令個數的增多,bypassing network 變得越來越複雜,已經是處理器中速度提昇的一個關鍵部份 在不使用 bypassing network 的情況下,指令的 operands 值可以來自於 PRF (for non-data-capture),或是 payload RAM (for data-capture),每個 FU 都是透過 select 電路將 PRF 或是 payload RAM 串連起來的 每個 select 電路和 PRF (或是 payload RAM) 的 read ports 是一一對應的,每個 FU 和 PRF (或是 payload RAM) 的 read ports 也是一一對應的 因此,PRF 總共需要的 read ports 個數與 issue width 是直接相關的;如果對處理器追求更大的 issue width,就代表著 PRF 需要更多的 read ports,反而會限制了處理器的執行速度,現代處理器多會採用 cluster 架構來解決這個矛盾 Payload RAM 由於需要與 Issue Queue 綁定在一起,使用 distributed Issue Queue 可以減少 payload RAM read ports 的需求 9.2 - FU 的類型 9.2.1 - ALU ALU (Arithmetic and Logic Unit) 通常負責:整數加減法、shift、簡單的乘除法、資料搬移 (e.g. mov、byte-swap 指令)、分支指令目標位址的計算、記憶體存取位址的計算 很多處理器在 ALU 中也實現了比較簡單的乘法功能,用來支持乘法指令 不過為了追求比較高的處理效能,高性能處理器通常選擇將乘法器單獨使用一個 FU 來實現,並在這個 FU 中實現乘累加的功能 有些處理器基於功耗和成本的考量,會將整數類型的乘法交由浮點數運算的 FU 來運算 整數轉成浮點數 → 浮點數乘法 → 浮點數轉為整數 指令的 latency 會變長,但較省面積和功耗,Intel Atom CPU 就採用了此設計 9.2.2 - AGU AGU (Address Generate Unit) 用來計算記憶體存取位址,如 load/store 指令 在一般 pipeline 處理器中,記憶體的存取位址都是交由 ALU 來計算,但是在 superscalar CPU 中,由於需要同時執行多條的指令,記憶體存取指令的執行效率直接影響了處理器的性能,所以通常會單獨使用一個 FU 來計算其位址 9.2.3 - BRU BRU (Branch Unit) 負責處理 control flow 類型的指令,如 branch、jump、call 和 return 類型的指令,BRU 負責將這些指令所攜帶的目標位址計算出來,並根據一定的條件決定是否使用這些位址;同時,在這個 FU 中還會對分支預測與否正確進行檢查,一旦發現 mis-prediction,就需要啟動相對硬的恢復機制 ARM 和 PowerPC 等處理器在指令中的編碼加上了 condition code,根據 condition code 來決定指令是否執行 優點: ...