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

**基於操作碼的預測**是透過假設對於某些操作碼分支將被“執行”,而對於其他操作碼分支將被“不執行”來進行的。例如,在 MC 88110 和 PowerPC 601/603 處理器中使用了這種預測技術。如表所示,展示瞭如何在 MC 88110(Motorola,1991)中實現基於操作碼的預測。
在 MC 88110(1993)中實現的靜態預測
| 指令 | |||
|---|---|---|---|
| 指定條件 | 指令程式碼的第 21 位 | 預測 | |
| = 0 | 0 | 不執行 | |
| ≠0 | 1 | 執行 | |
| Bcnd(條件分支) | >0 | 1 | 執行 |
| <0 | 0 | 不執行 | |
| ≥0 | 1 | 執行 | |
| ≤0 | 0 | 不執行 | |
| 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 重新編譯的程式中使用,如果可以預期更高的預測率。另一方面,較舊的程式(如庫例程)可以繼續使用動態預測作為預設預測方法。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP