性能之王還是不進反退,Prescott全
要理解前頁所述的改進,我們就必須首先了解分支預測的一些基本原理。
同大多數處理器一樣,Prescott處理器的分支預測機構可以分為動態分支預測機構以及靜態分支預測機構兩大類,而其中動態分支預測機構由分支目標緩沖(Branch Target Buffer ,以下簡稱BTB)以及預測跳轉條件是否滿足的動態預測機構組成:
圖中可見,BTB與我們熟悉的一級、二級緩存十分類似,只不過緩存的對象不同而已,前者緩存了分支指令及其挑轉目標的地址,而后兩者則緩存具體的數據或指令。在每一個BTB的條目中,集中存儲了分支指令地址、跳轉地址以及分支指令的跳轉歷史紀錄。需要注意的是,由于P4對于其分支預測機構的細節一直不愿意做過多的透露,因此其中實際的分支預測機構組成狀況,與上圖所表示的結構必然在細節上存在許多不同之處,但從原理上說,二者是基本相同的。
大致了解了分支預測的原理之后,再回過頭來看Prescott中的分支預測改進狀況,就較好理解了。
◎ 動態分支預測方面,與其它處理器不太相同,P4處理器在指令預取單元和Tace Cache單元上,各放置了一套BTB機構,但兩套BTB機構的作用和工作原理是類似的。增加BTB條目數,能夠紀錄的分支指令數就越多,當遇上分支指令較密集,分支指令跳轉情況變化較復雜的程序時,將體現出一定的優勢。
◎ 此外,由于分支預測指令中的跳轉地址有可能使用變量表示,而不是如我們上面舉例的那樣總是5、150這樣的常數;這種情況我們稱為非直接跳轉分支(Indirect Branch)。如果此時仍然使用圖中的機構,顯然將造成BTB的頻繁預測失敗(儲存在BTB中的分支跳轉地址可能是不斷變化的)。Intel宣稱在Prescott的動態分支預測機構中加入由Pentiumn M(Banis)中引用的非直接跳轉分支預測功能。這樣,就提高了執行非直接跳轉分支時的預測成功率。
◎ 作為動態分支預測的一種侯補方案,靜態分支預測的性能對于處理器來說也具備一定的重要性。靜態分支預測方面,在過去的P4里,一直奉行以下的原則:
如果分支所跳轉的地址為逆向跳轉,則靜態預測為分支跳轉成立,執行跳轉;而如果分支所跳轉的地址為正向跳轉,則靜態預測為分支跳轉不成立,按照編譯順序讀取下一條指令,下圖表示了這種靜態策略:
Northwood的靜態分支預測(點擊放大)
的確,在分支循環次數較多的程序中,這樣的靜態預測方案所得到的預測命中率較高。但是如果遇到的不是循環用分支語句,如果還這樣預測就不行了。所幸大多數情況下,分支循環程序所包含的指令數目都比較小(意味著循環跳轉的地址偏移量不會很大),因此在Prescott中,Intel在原有的靜態分支策略中加入了距離判斷算法,僅在所跳轉的地址為逆向跳轉,且跳轉的地址距離分支指令本身的地址偏移量較小時,才執行跳轉。下圖表示Prescott與舊P4在這方面的區別:

更智能化的Prescott靜態分支預測
顯然,這樣的靜態分支預測辦法顯得比以前所使用的方法更加“智能化“一些。<
關注我們


