什麼是全域性排程?
ILP 編譯器必須提取可接受的指令級並行性,才能正確利用可用的硬體資源,特別是 EU。對於極度並行的 ILP 處理器(包括 VLIW 機或高度超標量處理器)來說,這不是一項簡單的任務。具體來說,通用程式(包括作業系統或應用程式程式),其基本塊大小很小,並行性極不規則,使用不可預測的分支進行表徵,這使得這項任務極其困難,甚至無法解決。
在這種方法中,無法預測基本塊排程器能否提取足夠的並行性來準確地饋送高度並行的 ILP 處理器。因此,針對並行性貪婪的 ILP 處理器的編譯器必須使用非常有效的排程技術,即全域性排程。
全域性排程器在基本塊邊界之外,甚至在後續迴圈迭代中起作用,以提取儘可能多的並行性。全域性排程完全是一項困難的任務。首先,有兩個基本任務需要處理:跨基本塊排程單個指令和排程迴圈,如下面的圖所示。

超越基本塊排程
基本塊排程器僅在基本塊範圍內提取並行性。相反,全域性排程器試圖感知控制流圖中儘可能多的獨立指令,並在圖中儘可能地向上移動它們,甚至超出基本塊邊界,以儘可能地在每個週期保持多個 EU 工作。將指令向上移動的困難限制是正確的資料依賴性,因為錯誤的資料依賴性可以透過暫存器重新命名來消除。
通常,全域性排程器不滿足於僅透過在基本塊邊界之前甚至之後移動獨立指令而實現的並行性程度。此外,全域性排程器通常會嘗試猜測未解決的條件語句的結果。因此,沿著猜測路徑的指令也將被視為程式碼移動的後繼者。
大多數全域性排程器將分兩個階段排程單個指令,這與列表排程器的工作方式相同。首先,全域性排程器必須為每個週期選擇一組可接受的排程指令,遵循選定的啟發式方法。
其次,需要進一步的啟發式方法從合格指令集中進行選擇。排程決策還可以包含程式碼移動,程式碼移動僅限於條件分支的其中一條路徑,稱為**推測性**。此名稱強調了以下情況:這些程式碼移動是在以下假設下進行的:條件分支遵循程式碼移動的方向,因此,向上移動的指令的執行將是有益的。
迴圈排程
迴圈是 ILP 處理器並行性的重要來源。因此,控制結構的一致性可以加快計算速度。有兩種基本方法可以排程迴圈:迴圈展開和軟體流水線。第一種方法是一種簡單、效率較低的方法,與第二種方法相比。在當前的使用方面,迴圈展開通常用作更復雜的排程方法(包括軟體流水線或跟蹤排程)的一部分。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP