# Design of a High Performance Branch Predictor Based on Global History Considering Hardware Cost ## Abstract * 分支預測(Branch prediction)是提高效能的關鍵技術 * CPU 執行時,分支佔所有指令的 20~30% * 基於 global history 的動態分支預測結構簡單,占用的內存少,但有 index aliasing 的問題 * 本文對分支預測改進,將預測生成的 index 和指令 PC 位址最後 8-bits 做 XOR,緩解 index aliasing 的問題 * 使用 simplescalar 3.0 模擬 * 實驗表明,GHR 為 12 時,改進的分支預測器效果最好,平均比原本的高出 1.93% ## Introduction * 以一般 MIPS 架構的 five-level pipeline 為例,如果沒有分支預測,在遇到分支指令時可能導致 pipeline 中所有指令都被清除 * 分支預測分為靜態和動態 * 靜態的通常預測率較低 * 基於全局歷史寄存器(GHR)的動態分支預測器使用移位的分支歷史寄存器記錄第一級最近 n 條指令的執行情況,並使用具有四個狀態值的模式歷史表(PHT)來預測分支的跳轉方向二級指令 * 因為 GHR 寬度有限,不同指令可能有相同的 GHR,導致預測率下降 * 本文目標是改進 Gselect 類型的分支預測器 ## Shortages of Several Classical Dynamic Branch Predictors ### Branch Predictor Based on 1-bit Saturation Counter * 用 1-bit 來紀錄上次有沒有跳轉 * 如果一直預測成功就永遠不會改變狀態 * 如果預測結果頻繁改變效果就會很差,實務上沒有過這種作法 ### Branch Predictor Based on 2-bit Saturation Counter * 用 2-bits 紀錄前兩次有沒有跳轉 * 變成四種狀態的狀態機,概念和上面的基本一樣 ### One-Level Branch Predictor * 用一部分的 PC 值當作 index 去找 PHT * ![](https://i.imgur.com/6esyLAy.png) * 第一個問題是不同 PC 會有同樣的 index * 第二個問題是某些狀況之下預測率會很低 ### Two-level branch predictor * 有三個 PHT * ![](https://i.imgur.com/Fyq1CIR.png) * 用 Choice-PHT 決定要用哪張 PHT * 只改變 Choice-PHT * 硬體成本高 * 看不太懂= = ### Hybird and Neural Network Predictor * 結合多個預測器 * 延遲高,需要時間訓練 * 硬體成本也高 ## New Scheme Proposal * Gselect 分支預測器使用 PC 高位和 GHR 低位當作 PHT 的 index,而沒使用 PC 低位 * 因為沒辦法準確區分沒使用到的 PC,導致 Gselect 預測率下降 * 為了充分使用 PC,本文將 Gselect 分支預測器生成的 index 和 PC 低位 8-bits XOR * ![](https://i.imgur.com/FEySnNp.png) * 假設 PC 和 GHR 為 16-bits,Gselect 將 PC 的高 8 位和 GHR 的低 8 位合併得到 index;然後我們再將 PC 的低 8 位和結果做 XOR * 只影響結果的低 8 位 * 一個 Gselect 會重複 index 但 XOR 不會的例子 | Index Name | Value | Gselect | XOR-Gselect | | -------- | -------- | -------- | --- | | PC1 | 1010001111001111 | 1010001110101010 | 1010001101100101 | | GHR1 | 0011110010101010 ||| | PC2 | 1010001100000001 | 1010001110101010 | 1010001110101011 | | GHR2 | 1010111110101010 ||| * 無法證明 XOR 有更好的表現,因此使用 simplescalar 執行一堆指令來判斷效能 ## Experimental Environment and Results ### Experimental Environment * 使用 SimpleScalar 3.0 sim-bpred 模擬,並使用 Gselect, Bimode 比較 ### Experimental Results * GHR 的長度會影響預測的成功率,因此這會是我們需要研究的因素之一 * ![](https://i.imgur.com/6hoVE7y.png) * 長度為 12 的時候飽和 * PC 低位使用的數量也會影響結果(for XOR) * ![](https://i.imgur.com/izfxSFI.png) * ![](https://i.imgur.com/aN814c4.png) * 根據上面的結果,GHR 長度使用 12,並和 Bimode, Gselect 比較的結果 * ![](https://i.imgur.com/RGNr8HP.png) * 平均比 Gselect 好 1.93%,但比 Bimode 差 * Bimode 的硬體成本高,因此輸了很正常 ## Conclusion * 使用 XOR-Gselect 改善 index aliasing 的問題 * 實驗表明 GHR 長度為 12 時效果最好,並且 XOR 能改善 Gselect 的預測率 ###### tags: `paper`