徐永新
(華為技術有限公司 江蘇省南京市 210012)
為了提升處理性能,現代CPU 采用多級流水線機制,經典的五級流水線分成取指,譯碼,執行,訪存,寫回等幾個階段。流水線機制可以有效提升指令的并行度,但是存在一些流水線沖突的場景,造成流水線效率的降低。這樣的流水線沖突包括結構沖突,控制沖突和數據沖突。
流水線的控制沖突也稱為分支沖突。程序執行過程中有許多分支跳轉的情況,流水線遇到分支跳轉時,并不知道后面要真正執行的指令在哪里,因為分支跳轉的目標地址還沒有被計算出來。這個時候流水線就需要采用某種策略,來預測后面將要執行的分支。如果預測對了,那么流水線的效率將能維持在較好的水平。反之,預測錯了,則錯誤的流水線處理結果都會被丟棄,重新從正確的目標地址取出指令重新執行,這將嚴重影響流水線的執行效率。
靜態分支預測是一種實現簡單的方法,比如預測永遠不發生跳轉,取指單元總是按順序取指,直到發現錯誤才丟棄不正確的中間狀態,重新取指。
靜態分支預測特點是實現簡單,但是預測的精度不高,在早期的CPU 設計中會使用這種方式。
現代處理器使用較多的是動態分支預測器,該類預測器能夠記錄分支的歷史跳轉信息,來預測將要執行的分支跳轉行為。如果由于程序執行的行為發生改變,預測器也會根據執行情況自動調整,從而擁有較好的預測準確度和自適應性。……