在過去的一個月里,AMD發(fā)布了許多公告。AMD正在準備推出他們的第三代Ryzen臺式機處理器。這些處理器將利用AMD最新的微架構Zen 2,采用臺積電領先的7nm工藝制造。
我們先來看看核心的微架構改進。
Zen 2
新芯片的核心是Zen 2。這一核心將用于AMD的移動APU、高性能臺式機處理器和數據中心芯片。
Zen 2是繼Zen之后的下一個主要微架構。隨著Zen 2的推出,AMD承諾分別基于Cinebench 1T和Spec2006進行13-15%的IPC改進。要了解他們如何能夠提取IPC的收益,我們需要仔細研究基礎微架構的變化。
前端
前端的很大一部分已經進行了重新設計。在沒有標識分支的典型情況下,從下一個64B塊的地址開始從第一級高速緩存提取指令。Zen最初提供了一個64 KiB L1緩存。它由4路256組(4 ways of 256 sets)組成。Zen 2對L1進行了大改。關聯(lián)性已經變?yōu)?路64組(8 ways of 64 sets),緩存大小減半到32 KiB。如果沒有AMD的更多細節(jié),我們很難描述其他變化,更高的關聯(lián)性也應該降低未命中率。AMD指出,通過減小指令緩存的大小,并利用該區(qū)域來增加一些其他組件,特別是BPU和OC,它們能夠從每單位面積的硅中獲得更好的性能。順便說一下,從組織的角度來看,Zen 2現(xiàn)在和英特爾的Skylake和Sunny Cove是一樣的。值得注意的是,一級指令高速緩存轉換后備緩沖區(qū)保持不變。它仍然是完全關聯(lián)的64條目深度緩沖區(qū),能夠存儲4 KiB、2 MIB和1 GiB頁面。
高速緩存線保持64字節(jié),每個周期可以獲取32個字節(jié)。在不太常見的高速緩存未命中的情況下,L1將為包含未命中地址的線生成填充請求。每個周期最多32個字節(jié)可以從共享L2傳輸到指令高速緩存。
除了由提取生成的填充請求外,分支預測器和預提取器還可以發(fā)出額外的請求。這一點很重要,因為預取器能夠利用空間局部性以避免停頓。這是AMD花了很多努力改進的另一個領域。
最好的預測器會贏嗎?
分支預測單元的目標是預測條件分支的下一個地址。換句話說,猜測它是否被占用了。這里的基本思想是猜測指令流的路徑,而不是通過停止流水線直到最終知道路徑來浪費周期。然而,這必須明智地進行,因為糟糕的預測會直接導致工作的浪費。當發(fā)生分支時,將其存儲在分支目標緩沖區(qū)中,以便可以更容易地確定和采用(或不采用)后續(xù)分支。諸如Zen之類的現(xiàn)代微處理器通過不僅將最后一個分支的歷史而是最后幾個分支的歷史存儲在全局歷史寄存器(GHR)中,以便提取分支之間的相關性(例如,如果采用較早的分支,則可能也將采用下一個分支),從而進一步實現(xiàn)這一點。
Zen上的BTB是一個三級緩存——每個緩存都具有更高的容量,但代價是更長的延遲。Zen 2保持結構不變,但幾乎將第二級和第三級BTB中的條目數量增加了一倍,分別從256和4K增加到512和7K條目。
順便說一句,在Zen中,第一級(L0)BTB中的查找是零延遲查找,而L1和L2 BTB中的后續(xù)表查找分別導致一個和四個冒泡。目前還不清楚Zen 2是否改變了這些成本。
Zen采用了一種稱為散列感知器的動態(tài)預測器。利用人工智能的大肆宣傳,營銷人員喜歡將其稱為神經網絡預測器。感知器是最簡單的機器學習形式,與其他一些機器學習算法相比,感知器本身更易于實現(xiàn)硬件。它們往往也比gshare之類的預測器更準確,但它們的實現(xiàn)確實更復雜。Zen上的實際實現(xiàn)尚不清楚,但我們至少可以描述一個簡單的實現(xiàn)是什么樣子的。當處理器遇到條件分支時,它的地址用于從感知器表中獲取感知器。對于我們來說,感知器只不過是權重向量。這些權重表示歷史分支的結果與預測的分支之間的相關性。例如,考慮以下三種模式:“TTN”、“NTN”和“NNN”。如果這三個模式都導致下一個分支沒被采用,那么或許我們可以說前兩個分支之間沒有相關性,并為它們分配很小的權重。先前分支的結果是從全局歷史寄存器中獲取的。寄存器中的各個位用作輸入。輸出值是計算出的權重和先前分支歷史的點積。在這種情況下,負輸出可能意味著“不采取”,而其他值可能被預測為“采取”。值得一提的是,分支歷史之外的其他輸入也可以用于推理相關性,盡管不知道是否有現(xiàn)實世界的實現(xiàn)利用了這一想法。Zen的實現(xiàn)可能要復雜得多,或許是對不同類型的歷史進行采樣。盡管如此,它的工作方式仍然是一樣的。
鑒于Zen流水線的長度和寬度,錯誤的預測可能導致超過100個槽被刷新。這直接導致性能的損失。Zen 2保留了散列感知器預測器,但增加了第二層新的TAGE預測器。這個預測器是由Andre Seznec在2006年首次提出的,它是對Michaud的PPM類預測器的改進。TAGE預報器贏得了上一屆分支預測(CBP)大賽(2006-2016)的全部四項冠軍。TAGE的理念是,程序中的不同分支需要不同的歷史長度。換句話說,對于某些分支,非常小的歷史記錄效果最好。例如1位預測器:如果某一分支以前采用過,它將再次采用。不同的分支可能依賴于先前的分支,因此需要更長的多位歷史以充分預測它是否將被采用。標記幾何歷史長度(TAGE)預測器由多個全局歷史表組成,這些表使用不同長度的全局歷史寄存器索引,以便涵蓋所有這些情況。寄存器使用的長度形成了幾何級數,因此得名。
使用TAGE預測器的想法是,它試圖找出哪個分支的歷史數量最適合哪個分支,將最長的歷史優(yōu)先于較短的歷史。
這種多預測器方案類似于分支目標緩沖區(qū)的分層。第一級預測器是感知器,用于快速查找(例如,單周期分辨率)。第二級TAGE預測器是一個復雜的預測器,需要很多周期才能完成,因此必須在簡單預測器之上分層。換句話說,L2預測器速度較慢,但更好,因此用于對較快和較不準確預測器的結果進行雙重檢查。如果L2預測器與L1預測器不同,則當TAGE預測器覆蓋感知器預測器時,會發(fā)生少量刷新,提取返回并使用L2預測,因為L2預測器被認為是更準確的預測。
除了使用TAGE預測器以外,AMD沒有透露更多的內容。值得指出的是,至少就字面而言,TAGE預測器不再被認為是最好的預測器。之后,Seznec在TAGE預測器上進行了改進,增加了統(tǒng)計校正器(TAGE-SC),后來又增加了循環(huán)預測器(TAGE-SC-L)。替代方案包括BATAGE預測器。盡管如此,我們得到的結論是,有更多的機會找到更好的分支預測器,這是一個非?;钴S的研究領域。
AMD表示,與之前的感知器相比,新的分支預測單元顯示出的誤預測率目標低30%。因為現(xiàn)代微處理器的精確度高達90%。與在Zen中的實現(xiàn)相比,這種錯誤預測率的大幅降低將直接轉化為更高的IPC。事實上,如此大的改進可以單獨占據Zen 2聲稱的性能提升的很大一部分。
改變現(xiàn)狀
關于AMD的這一代芯片,我們注意到的一件事是現(xiàn)狀的變化。從歷史上看,英特爾在設計最先進、性能最高的預測器方面投入了大量資源。另一方面,AMD往往落后于一個“足夠好”的更保守的預測器。隨著Zen的成功,Zen 2的情況變得有所不同。雖然AMD正在摘取所有唾手可得的成果,但它們現(xiàn)在正直接瞄準英特爾,而英特爾一直擁有無可爭辯的領先優(yōu)勢。換句話說,AMD似乎對他們目前的核心設計充滿信心,可以騰出更多的資源來解決次要的缺陷。