如何在計算機體系結構中處理未解決的條件分支處理策略?
條件分支不能早於引用條件已知時計算。例如,如果指定的條件定義了先前指令結果的符號,則計算的前提是先前指令已執行。
在引用條件變得已知之前,條件分支被認為是未解決的。處理器使用三種基本元素來處理未解決的條件分支,例如阻塞分支處理、推測執行和多路分支,如圖所示 -
阻塞分支處理是處理未解決的條件分支的簡單方法。在確定條件可以解決之前,條件分支的執行會中斷。早期的流水線微處理器,如 MC 68020、MC 68030 和 80386,就是阻塞分支處理的示例。這種方法會導致由於流水線停頓而造成的長時間延遲,如表所示。因此,高階處理器採用了一種更優越的策略,稱為推測執行。
阻塞分支處理中的分支懲罰
處理器型別 | 分支預測成功時的懲罰週期 | 分支預測失敗時的懲罰週期 |
---|---|---|
MC 68020 (1984) | 5 | 3 |
MC 68030 (1987) | 5 | 3 |
80386 (1985) | 8 | 2 |
使用推測分支處理,可以防止由於未解決的分支條件導致的流水線中斷。在檢測到未解決的條件分支後,會猜測條件的結果,並沿著猜測的路徑繼續推測執行。
如圖所示,推測執行包含三個關鍵要素,例如使用的分支預測方案、推測執行的範圍以及在發生錯誤預測時使用的恢復方案。
分支預測可以是固定的或真實的預測。在固定預測中,會持續進行類似的猜測,要麼“預測為跳轉”(taken),要麼“預測為不跳轉”(not-taken)。真實的預測有兩個可能的結果,要麼“預測為跳轉”(taken),要麼“預測為不跳轉”(fall through,順序路徑)。
在推測執行中,處理器會繼續推測執行指令,直到條件確定。但是,條件執行開始與相應條件解決之間的時間間隔可能會有很大差異。
在發生錯誤預測的情況下,需要實現兩個基本要素,例如丟棄推測執行的結果並繼續執行另一個路徑,例如正確的路徑。當存在多個掛起的條件分支時,應選擇並遵循相應的備用路徑。
最後,多路分支是處理未解決的條件分支的最積極的方案。因此,在遇到未解決的條件分支時,會同時遵循兩個可能的路徑。當計算出特定條件時,正確的路徑會保留下來。這條路徑被接受,錯誤的路徑被丟棄。