什麼是靜態預測?


在**靜態預測**技術中,分支採用“總是執行”或“從不執行”的方法。它可以透過調查目的碼的特定屬性來進行靜態預測。在實際實現中,靜態預測要麼基於操作碼,要麼基於位移,要麼基於編譯器提供的提示,如圖所示。

**基於操作碼的預測**是透過假設對於某些操作碼分支將被“執行”,而對於其他操作碼分支將被“不執行”來進行的。例如,在 MC 88110 和 PowerPC 601/603 處理器中使用了這種預測技術。如表所示,展示瞭如何在 MC 88110(Motorola,1991)中實現基於操作碼的預測。

在 MC 88110(1993)中實現的靜態預測


指令

指定條件指令程式碼的第 21 位預測

= 00不執行

≠01執行
Bcnd(條件分支)>01執行

<00不執行

≥01執行

≤00不執行

bb1(位設定分支)
執行

bb0(位清除分支)
不執行

此處理器提供了兩種條件分支。第一種稱為 bcnd,用於算術檢查。第二種稱為 bb1(位設定分支)或 bb0(位清除分支),用於布林檢查。如表所示,對於算術檢查,條件 ≠0、> 和 ≥0 被假定為滿足,因此預測為“執行”。相反,條件 =0、<0 和 ≤0 會導致“不執行”預測,並且第 21 位被重置。

**基於位移的**預測取決於位移的符號。如果 D < 0,則預測為“執行”,在相反的情況下,D≥0,則預測為“不執行”。這裡的基本假設是,具有負位移的條件分支用作迴圈閉合分支。

最後,靜態預測也可以從編譯器的提示中得出。這種預測稱為**編譯器定向預測**。在這種情況下,編譯器根據編譯的控制結構型別或使用者提供的提示進行預測。編譯器的預測透過設定或清除條件分支指令編碼中的一個位(稱為**預測位**)來指示。

例如,在 PowerPC 架構中,條件分支編碼的第 10 位是預測位。當這樣指定時,基於操作碼和基於位移的預測的結果將被反轉。使用預測位的處理器示例包括 PowerPC 601 和 PowerPC 603。

另一個利用編譯器定向預測的處理器是 PA 8000。在這種情況下,編譯器定向預測是一個可用的選項。如果指定,它將逐頁覆蓋動態預測。

這種顯著的解決方案使靜態預測能夠在為 PA 8000 重新編譯的程式中使用,如果可以預期更高的預測率。另一方面,較舊的程式(如庫例程)可以繼續使用動態預測作為預設預測方法。

更新於: 2021-07-23

970 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.