為使流水線保持滿載,必須找出可以在流水線中重疊的不相關指令序列,充分開發指令級並行。
為避免流水線停頓,必須將相關指令與源指令隔開一定時間週期,這一間隔應等於源指令的流水線延遲。
編譯器排程能力影響因素:
程式中可用的ilp數量
流水線中功能單元的延遲
將迴圈體複製多次,調整迴圈的終止**。
目的:提高運算指令相對於分支和開銷指令的數目。
好處:展開後的迴圈暴露了更多可以排程的計算。
迴圈展開需進行的決策和變換:
確認迴圈迭代不相關(迴圈維護**除外),判定迴圈展開是有用的。
使用不同暫存器,以避免由於不同運算使用相同暫存器而施加的非必要的約束(比如,名稱相關)。
去除多餘的測試和分支指令,並調整迴圈終止和迭代**。
對**進行排程,保留任何必要的相關,以得到和原**相同結果。
有三種不同效果會限制迴圈展開帶來的好處:
每次展開操作分攤的開銷數目降低。
**規模限制
較大規模的迴圈,**規模增長會導致指令快取缺失率上公升。
編譯器限制
大量進行展開和除錯而造成的暫存器數量不足
.
編譯器的編譯基本過程
編譯器最基本的功能就是把高階語言 例如c fortran 編寫的 轉化為機器指令 就是01串 從這個角度來說它本質上是個轉換過程。經典的編譯過程主要包括 1 詞法分析 lexical analysis 語法分析的輸入是一連串的token 詞法分析的輸出 根據語言的語法規則不斷解析最後得到一棵抽象語法...
編譯原理 編譯器的編譯基本過程
原文出處 崤嶙的部落格 編譯器最基本的功能就是把高階語言 例如c fortran 編寫的 轉化為機器指令 就是01串 從這個角度來說它本質上是個轉換過程。經典的編譯過程主要包括 1 詞法分析 lexical analysis 2 語法分析 語法分析的輸入是一連串的token 詞法分析的輸出 根據語言...
即時編譯器優化技術。
型別 優化技術 編譯器策略 延遲編譯 分層編譯 棧上替換 延遲優化 程式依賴圖表示 基於效能監控的優化技術 樂觀空值斷言 樂觀型別斷言 樂觀型別增強 樂觀陣列長度增強 裁剪未被選擇的分支 樂觀的多型內聯 分支頻率 呼叫頻率 基於證據的優化技術 精確型別推斷 記憶體值推斷 記憶體值跟蹤 常量拆疊 重組...