CPU/GPU真融合!Intel新酷睿權威評測
第三章/第二節 SandyBridge架構解析:指令緩存和分支預測
從高級層面角度看,SandyBridge架構只是一次進化,但是如果看看Nehalem/Westmere以來晶體管變化的規模,絕對是一次革命。
Core 2引入了一種叫作循環流檢測器(LSD)的邏輯塊,檢測到CPU執行軟件循環的時候就會關閉分支預測器、預取/解碼引擎,然后通過自身緩存的微指令(micro-ops)供給執行單元。這種做法通過在循環執行的時候關閉前端節省了功耗,并改進了性能。Core i系列處理器沿用了這種設計。
SandyBridge里面又增加了一個微指令緩存,用于在指令解碼時臨時存放。這里沒有什么嚴格的算法,指令只要在解碼就會放入緩存。預取硬件獲得一個新指令的時候,會首先檢查它是否存在于微指令緩存中,如是則由緩存為其余的管線服務,前端隨之關閉。解碼硬件是x86管線里非常復雜的部分,關閉它能夠節約大量的功耗。
這個緩存是直接映射的,能存儲大約1.5K微指令,相當于6KB指令緩存。它位于一級指令緩存內,大多數程序的命中率都能達到80%左右,而且帶寬也相比一級指令緩存更高、更穩定。真正的一級指令和數據緩存并沒有變,仍然都是32KB,合計64KB。這看起來有點兒像Pentium 4的追蹤緩存,但最大的不同是它并不緩存追蹤,而更像是一個指令緩存,存儲的是微指令,而非x86指令(macro-ops)。
與此同時,Intel還完全重新了一個分支預測單元(BPU),精確度更高,并在三個方面進行了創新。
第一,標準的BPU都是2-bit預測器,每個分支都使用相關可信度(強/弱)進行標記。Intel發現,這種雙模預測器所預測的分支幾乎都是強可信度的,因此SNB里多個分支都使用一個可信度位,而不是每個分支對應一個可信度位,結果就是在分支歷史表中同樣的位可以對應更多分支,進而提高預測精確度。
第二,分支目標同樣做了翻新。之前的架構中分支目標的大小都是固定的,但是大多數目標都是相對近似的。SNB現在支持多個不同的分支目標大小,而不是一味擴大尋址能力、保存所有分支目標,因而浪費的空間更少,CPU能夠跟蹤更多目標、加快預測速度。
第三,提高分支預測器精度的傳統方法是使用更多的歷史位,但這只對要求長指令的特定類型分支有效,SNB于是將分支按照長短不同歷史進行劃分,從而提高預測精度。
關注我們



