題組內容
四、中央處理單元的設計有一種稱為管道化(pipelined)處理的方式。相較於非管道化
(non-pipelined)處理,對某特定指令集架構而言:
⑷何者在編譯上需要作那些額外的考慮?並扼要說明原因。(5 分)
詳解 (共 1 筆)
詳解
管道化處理(Pipelined Processing)在編譯上需要作更多的額外考慮。
原因:
-
處理數據冒險(Data Hazards):
- 定義:數據冒險發生在一條指令依賴於另一條尚未完成的指令的結果時。編譯器必須識別這些依賴並進行適當處理。
- 編譯器考慮:編譯器需要重排指令,以減少數據依賴造成的延遲。例如,編譯器可以插入無操作指令(NOPs)或者重新安排指令順序,確保數據可用時再執行依賴指令。
-
處理控制冒險(Control Hazards):
- 定義:控制冒險發生在分支指令可能改變程序流向時,管道中可能存在多條分支未決定的指令。
- 編譯器考慮:編譯器需要進行分支預測和延遲槽(Delay Slots)的填充。編譯器可以重排指令,將獨立於分支結果的指令放在延遲槽中,以減少分支錯誤預測的影響。
-
處理結構冒險(Structural Hazards):
- 定義:結構冒險發生在硬體資源不足以同時支持多條指令的並行執行時。
- 編譯器考慮:編譯器必須考慮硬體資源的限制,避免同時發出需要相同資源的指令。例如,避免同時發出需要使用相同乘法器的指令。
-
寄存器分配和重命名:
- 定義:寄存器的使用在管道化處理中可能導致假冒險(False Dependencies),如寫後讀(Write After Read, WAR)和寫後寫(Write After Write, WAW)。
- 編譯器考慮:編譯器需要進行有效的寄存器分配和重命名,以避免這些假冒險,提高指令並行度。
-
平衡流水線:
- 定義:不同指令所需的執行時間不同,可能導致管道的不平衡和效率降低。
- 編譯器考慮:編譯器需要安排指令順序,盡可能平衡各個階段的負載,減少流水線的停滯。