分支預測的方案有哪些?
處理器中使用的分支預測方案對其執行具有核心影響。因此,人們在推廣有效的方案方面投入了大量精力。

預測可以是固定的或真實的預測。在**固定預測**中,會持續做出相同的猜測,即“跳轉”或“不跳轉”。這是一種單一結果的猜測。“始終不跳轉”方法偏向於“不跳轉”路徑,因此跳轉懲罰 (TP) 通常高於不跳轉懲罰 (NTP)。
“不跳轉”方案比“跳轉”方案更容易實現。許多流水線微處理器採用這種方案,包括某些早期的處理器,如 i486,以及許多出現在 20 世紀 90 年代初的處理器。例如 SuperSparc、Power1 和 Power2,以及 α 21064 和 α 21064A。
預計跳轉懲罰將小於不跳轉分支的懲罰 (NTP)。
**真實預測**有兩種可能的結果,“跳轉”或“不跳轉”(貫穿執行,順序路徑)。對於真實預測,如上圖所示,靜態預測和動態預測之間存在差異。如果預測僅基於相關的程式碼,則稱為靜態預測。如果預測取決於前面類似分支指令的執行,特別是預測依賴於執行歷史,則它們處理的是**動態預測**。
靜態預測比動態預測更容易。在靜態預測技術中,分支是“始終跳轉”或分支是“始終不跳轉”。它可以透過檢查目的碼的特定屬性來進行靜態預測。
靜態預測包括以下元件,例如基於操作碼的預測、基於位移的預測和編譯器引導的預測。
基於操作碼的預測是透過假設對於某些操作碼分支將“跳轉”,而對於其他操作碼分支將“不跳轉”來進行的。例如,在 MC 88110 和 PowerPC 601/603 處理器中使用這種預測技術。
基於位移的預測取決於位移的符號。如果 D < 0,則預測為“跳轉”,反之,如果 D≥0,則預測為“不跳轉”。這裡隱含的假設是具有負位移的條件分支用作迴圈結束分支。
最後,靜態預測也可以來自編譯器的提示。這種預測稱為編譯器引導預測。
相反,**動態預測**基於分支歷史。動態預測的基本原理是,在其最後一次出現(或最後 n 次出現)時跳轉的分支在其下次出現時也可能跳轉。
動態技術比靜態方案具有更高的效能潛力。但代價是更復雜的實現,因為處理器必須儲存和更新大量分支的最後結果。相比之下,靜態方案忽略分支歷史,而是即時進行基於程式碼的預測。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP