計算機體系結構中程式碼排程有哪些不同的級別?


程式碼排程用於覆蓋依賴項檢測和解析以及並行最佳化。程式碼排程通常與傳統編譯結合使用。程式碼排程器將一組或一系列可執行指令和一組對其強制執行的優先順序約束(通常以 DAG 的形式)作為輸入。作為輸出,它在每個排程階段都承擔著交付一個無依賴項的指令的任務,並定義了排程管理精確可用執行時間的最佳選項。

**傳統的非最佳化編譯器**可以被視為包含兩個主要部分。編譯器的前端部分實現源字串的掃描、解析和語義分析,並生成中間表示。這種中間形式通常由帶屬性的抽象語法樹和符號表描述。反過來,後端部分建立目的碼。

**傳統的最佳化編譯器**透過刪除冗餘操作來加快順序執行速度並減少所需的記憶體空間。順序最佳化需要程式分析,包括前端部分的控制流、資料流和依賴項分析。

將傳統編譯和程式碼排程合併有兩種不同的方法。第一種是將程式碼排程整合到編譯過程中。在這種方法中,程式碼排程器利用編譯器前端部分進行的程式分析的結果。

程式碼排程器通常在後端部分的暫存器分配和後續程式碼生成之前遵循傳統的順序最佳化器。這種型別的程式碼排程稱為**預遍歷排程**。另一種方法是輔助傳統的(順序)最佳化編譯器並在之後執行程式碼排程,稱為**後遍歷排程**。

程式碼排程可以在三個不同的級別實現,例如基本塊、迴圈和全域性級別,如圖所示。

相關的排程技術被稱為基本塊(或區域性)、迴圈和全域性技術。這些技術按列出的順序提高效能。

**基本塊排程**在這種情況下,排程和程式碼最佳化是為每個基本塊獨立完成的,一個接一個。

**迴圈級排程**下一級排程是迴圈級排程。因此,屬於迴圈後續迭代的指令通常可以重疊,從而導致顯著的加速。

人們普遍認為迴圈是並行性的重要來源,尤其是在數學程式中。因此,對於包括 VLIW 體系結構在內的高度並行 ILP 處理器,編譯器必須至少在迴圈級別實現排程。因此,已經開發了大量用於在此級別進行排程的技術。

**全域性排程**- 排程的最有效方法是在儘可能大的級別上使用全域性排程技術來完成。因此,並行性是在基本塊和簡單迴圈之外以及在包含迴圈和條件控制結構的複合程式方法等結構中期望和獲得的。

更新於: 2021年7月20日

2K+ 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告