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