moea_joint
107年
[資訊] 計算機原理、網路概論
第 18 題
下列哪一個編譯程式(Compiler)的最佳化過程與機器有關?
- A 布林表示式的最佳化(Boolean Expression Optimization)
- B 刪除共同的副式子(Elimination Of Common Subexpression)
- C 窺孔最佳化(Peephole Optimization)
- D 不變計算移至迴圈外面(Loop Optimization)
思路引導 VIP
如果我們將編譯過程想像成將文章翻譯成另一種語言:有些修改(如刪除重複的句子)不論翻譯成哪種語言都適用;但有些修改(如利用特定語言才有的韻腳來押韻)則必須根據目標語言的特性來決定。若要針對特定硬體進行最後的效能衝刺,你認為應該是在處理抽象邏輯時進行,還是直接針對該硬體產生的最終指令序列進行微調比較合理?
🤖
AI 詳解
AI 專屬家教
恭喜你準確選出了 (C) 窺孔最佳化,這代表你對編譯器各個階段的運作任務有著非常清晰的判斷!這道題目核心在於區分「邏輯層次」與「硬體層次」的最佳化差異。
機器無關與相關的最佳化
在編譯流程中,大多數的最佳化技術如選項 (A)、(B)、(D) 所提到的布林運算簡化、共同副式子刪除以及迴圈最佳化(如將 $x = y \times z$ 搬移至迴圈外),通常是在中間代碼 (Intermediate Representation) 階段進行。這些優化著重於程式邏輯的精簡,不論最終目標機器是 Intel 的 CPU 還是 ARM 架構的處理器,其邏輯優化的原則都是通用的。然而,窺孔最佳化 (Peephole Optimization) 是在目標代碼生成後,透過一個「小窗口」去觀察鄰近的幾條機器指令,尋找可以被更高效、更簡短的特定指令替換的機會。例如,將暫存器的加一操作替換為該處理器專有的 INC 指令,這類微調完全取決於特定硬體的指令集架構 (ISA)。
▼ 還有更多解析內容