指令排程的方法是什麼?


當指令並行處理時,需要檢測和解決指令之間的依賴關係。它通常可以討論依賴關係檢測和解決,因為它與處理器類別和獨立包含的處理功能相關聯。

如果指令需要先前發出的指令可以利用的硬體資源,則該指令在資源上依賴於發出的指令。例如,如果只有一個單一的非流水線除法單元可用,就像 ILP 處理器中通常一樣,那麼在程式碼序列中,第二個除法指令在資源上依賴於第一個指令,並且不能並行執行。

資源依賴關係是由多個資源(包括 EU、匯流排或緩衝區)生成的約束。它們可以降低可以在執行的多個階段(包括指令解碼、發出、重新命名和執行等)管理的並行度。

指令排程的方案

有兩種基本方法:靜態和動態。**靜態檢測**和解決由編譯器完成,它透過重新排序程式碼來防止依賴關係。因此,編譯器的輸出被重新排序成無依賴關係的程式碼。VLIW 處理器始終期望無依賴關係的程式碼,而流水線和超標量處理器通常不會。

相反,**動態檢測**和解決依賴關係是由處理器實現的。如果必須在與指令發出相關的上下文中識別依賴關係,則處理器通常維護兩個滑動視窗。

發出視窗包含所有已獲取的指令,這些指令已預先確定將在下一個週期發出,而正在執行且結果尚未生成的指令則保留在實現視窗中。在每個週期中,將測試發出視窗中的所有指令的資料、控制和資源依賴關係,以瞭解執行指令。

動態檢測的優點

  • 它允許處理在編譯時未知的某些依賴關係情況。

  • 它簡化了編譯器的工作。

  • 它使針對一個流水線編譯的程式碼能夠有效地執行在多個流水線上。

透過並行程式碼最佳化可以自動提高 ILP 處理器的執行速度。如果依賴關係由編譯器靜態地遇到和解決,那麼編譯器肯定需要改進才能實現並行程式碼最佳化。

如果依賴關係檢測和解決是動態的,則程式碼最佳化必須由編譯器在與目的碼生成相關的上下文中預先執行。並行最佳化比傳統的順序程式碼最佳化更進一步。它透過對適合並行執行的程式碼進行適當的程式碼轉換來重新排序指令序列。

在並行程式碼最佳化促進的靜態排程中,編譯器在程式碼生成期間檢測資訊、控制和解決資訊、控制和資源依賴關係是其獨有的功能。此外,編譯器還實現並行程式碼最佳化。也就是說,編譯器為並行 ILP 執行生成無依賴關係的最佳化程式碼。

更新於:2021 年 7 月 20 日

4K+ 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.