靜態轉移預測技術

shuiliusheng發表於2020-10-21

靜態轉移預測技術

1. 靜態轉移預測技術:十分簡單,並且不會包含任何執行時的反饋資訊
  • 優點:實現非常簡單,只需要很少的硬體資源。問題在於在現代處理器中,電晶體的資源足夠,因此足夠提供動態轉移預測的資源,但是靜態的預測仍舊可以作為複雜的混合預測器中的元件,提供後備的預測方案使用。
  • 缺點:沒有使用程式執行時的動態行為特徵,預測器也將無法使用分支結果模式的變化,而這些變化通常是由於不同的程式輸入和程式不同階段的執行行為所決定的。
2. 基於剖視的靜態轉移預測:相對於基於簡單規則的靜態預測更好
  • 基本假設:程式的實際執行行為可以通過在不同輸入集上執行程式來分析近似得到
  • 優點:能夠利用分析得到近似的執行時行為資訊,也能夠利用編譯時可以看到的程式高階特徵,包括分支間相關資訊之類的資訊
  • 缺點:剖視技術需要在編譯時進行,因此對於已經編譯的程式需要再次重新編譯才行。同時如果分析得到的資訊不能夠代表實際的執行行為,將也無法帶來好處
3. 單方向的靜態預測:簡單的預測跳轉/不跳轉
  • 預測所有分支不跳轉:1997年,Intel i486
    • 優點:簡化了前端取指,因為不需要計算跳轉的目標地址,也不會打斷前端的取指流
    • 缺點:1997年有論文分析,對於整數程式,60%的分支都會發生跳轉
  • 預測所有分支跳轉:
    • 優點:通常情況下,比上一類更加準確
    • 缺點:硬體會更加複雜。因為預測跳轉需要跳轉地址的計算,這將導致處理器需要等待目標地址得到之後才能夠進行跳轉
    • 優化:MIPS的轉移延遲槽,用於在分支指令在計算目標地址的時間內執行一條一定會被執行的指令。1986年有論文研究,編譯器無法有效的使用所有可用的延遲槽,並且隨著流水線級數增加,計算地址延遲會更大,浪費也會更多。
4. 向後跳轉/向前不跳轉策略
  • 向後跳轉:如果分支指令的跳轉地址是在該指令之前的指令,則預測會發生跳轉。原因:大部分的後向分支都是迴圈分支,因此發生跳轉的可能性更大
  • Intel Pentium4在處理器的動態預測器無法提供預測時,採用此方案作為備用策略
5. 基於程式的預測:利用ISA提供的分支hint介面,在編譯時根據程式的高階資訊指導分支指令的預測
  • 示例:對於異常處理的分支指令通常不會發生,而這些資訊需要高階語言才能夠反映出來

    void *p=malloc(bytes);
    if(p==NULL){
        errorHandlingFuc();
    }
    
  • 1993年,Ball和Larus提供了一組基於程式結構的啟發式靜態條件轉移預測方案。這些方案充分的利用了分支指令的操作碼,運算元和分支指令之後的指令塊的特點,嘗試基於常見的程式設計習慣提供分支預測
    在這裡插入圖片描述

6. 剖視分析
  • 剖視技術會在樣本輸入資料上執行一個工具版(instrumented)的程式,收集執行過程中的資料,然後將這些資訊反饋給編譯器。編譯器利用這些資訊進行靜態的轉移預測,並且預測結果通過ISA中的hint介面傳遞給硬體使用
  • 簡單的分析方法:分析在執行時每條靜態分支指令發生跳轉的頻率,然後指導預測。1992年,Fisher和Freudenberger測試了這樣的方法,結果表明也僅是在部分程式中會帶來較好的結果,而其它程式的執行行為將取決於程式實際的輸入。
  • 優點:在硬體上容易實現
    來較好的結果,而其它程式的執行行為將取決於程式實際的輸入。
  • 優點:在硬體上容易實現
  • 缺點:每條靜態分支指令的預測結果固定,無法應對所有可能的程式輸入和行為。ISA必須要提供介面給程式設計師或者編譯器,用於傳遞hint資訊。在硬體上,為了使用hint資訊,流水線前端需要獲取到分支指令之後才能夠根據hint資訊進行預測

相關文章