當前位置:
首頁 > 科技 > Zen 2架構終於讓AMD達到Intel的高度?

Zen 2架構終於讓AMD達到Intel的高度?

Intel這兩年的日子真是相當不好過,也不只是和蘋果在基帶的事情上鬧掰,和宣布放棄5G基帶產品;而且在AMD於2017年推出Zen架構,終於徹底拋棄CMT以後,Intel居然在桌面處理器產品線上一時亂了陣腳。Jim Keller帶領下Zen的猛然一擊,竟然讓近兩年桌面處理器的性能獲得了前些年從未有過的步進,Intel都讓低壓U用上四核了,這在摩爾定律逐漸停滯的當下還真是奇景。

不過在老江湖Intel面前,AMD前兩代Zen和Zen+架構還是有偏科生跡象的,尤其是單核、浮點性能表現。而AMD在年初的CES大會預告Zen 2架構和Ryzen 3000系列CPU以後,AMD似有在桌面市場扭轉乾坤的魄力。如果說Ryzen CPU的一代和二代產品表達的是AMD終於重返戰場並開始侵蝕Intel在性能上的領導地位,那麼Ryzen 3000系列是AMD在將近13年的時間裡,第一次在桌面CPU市場達到(以及超過)Intel的高度。上一次是 Athlon 64。

外媒評價說:「這是AMD的高光時刻,也是CPU行業令人興奮的一刻。」那麼我們就來詳細聊聊,AMD的Zen 2架構究竟如何或者是否真的達到了這個高度。

Zen 2架構終於讓AMD達到Intel的高度?

紙面數據很好看

Zen 2相比一代Zen,就AMD的紙面數據來看變化還是比較大的。而且AMD也不像Intel那樣採用tick-tock更新節奏,Zen 2就不光是從GlobalFoundries的12nm轉到台積電的7nm,而且也不只是微架構的小調整。加上AMD宣稱同配產品表現可與Intel一較高下,Zen 2是值得花筆墨來多談一番的。要了解Zen 2實際性能表現,請直接拉到本文的最後部分。

Zen 2架構主要應用於AMD Ryzen 3000系列也就是Ryzen的第三代消費級CPU產品(代號Matisse),以及EPYC企業級處理器Rome之上。目前,AMD明確發布的Zen 2架構產品有6款,從最高級別16核心的Ryzen 9 3950X(3950X需要等到9月才會正式上市),到6核心的Ryzen 5 3600。不同的SKU在核心數、頻率、緩存和TDP等方面自然有著比較大的差別。

Zen 2架構終於讓AMD達到Intel的高度?

Ryzen 3000處理器每四個核心組成一個簇(CCX),每個CCX內部還包含了容量翻番的L3 cache(每個CCX 16MB L3 cache,總共32/64MB)。每個CPU有個中央I/O die單元。這裡的中央I/O單元是所有off-chip的通訊中心,配備有PCIe通道、內存通道,並通過Infinity Fabric來連接其他die或者其他CPU。值得一提的是,Ryzen 3000的中央I/O die是基於GlobalFoundries的12nm製程。

Zen 2架構終於讓AMD達到Intel的高度?

Zen 2的一個CCX,來源:AMD

Ryzen 3000實際上並非單die晶元,而可能包含了不一致的多個chiplet。這還是AMD第一次在消費級產品中採用這種設計。比如12個核心的Ryzen 3900X,會分成兩個chiplet(或稱雙die);而6核心與8核心的CPU則是單個chiplet(單die)。不同的chiplet之間通過中央I/O單元來通訊——也就是說單CCX內部四核通訊是可以保證高速的,跨越chiplet訪問可能會有略高的延遲。EPYC企業級Rome處理器支持八個chiplet,也就是最多64個核心,中央I/O die支持連接八個內存通道,至多128個PCIe 4.0連接通道。

I/O die支持24 PCIe 4.0通道,和雙通道內存——AMD宣稱內存控制器是全新設計的,可以支持到DDR4-4200的程度。不過實際上在超過DDR4-3600時,內存頻率與Infinity Fabric時鐘比會從1:1變為2:1,Infinity Fabric頻率減半。鑒於新架構將Infinity Fabric的匯流排寬度擴展到了512bit,內存到CPU核心的帶寬可能仍然不會構成瓶頸,但整體的內存延遲應該是會增加的,後面的測試也可以反映這一點。

當前最高規格的3900X相比上一代旗艦2700X在核心數目和頻率方面都有提升,但TDP仍然維持在了105W,單就這個數據看來,台積電的7nm還是相當給力的。

從架構和7nm工藝說起

一般我們習慣把「架構」和「微架構」這兩個詞混用。但在某些場景下,架構特指CPU指令集。這一次AMD為Zen 2引入了新的指令。主體包括CLWB、WBNOINVD和QOS。

早前在Intel的處理器上就有過CLWB這樣的設計。這個指令支持程序將數據推往非易失性存儲,以防發生停機命令和數據丟失等狀況。相關CLWB實際還有其他配套的指令,這些指令想必對EPYC企業級處理器是有價值的。

WBNOINVD基於WBINVD,該指令用於預測cache的某一部分何時會用到,提前做好準備以加速未來計算。一般情況下,處理器發現cache未就緒時,會使用flush指令沖刷cache line,這就增加了延遲。所以提前執行這個操作,能加速最終的執行。

QoS又是個主要應用於企業場景的指令,是相關緩存與內存優先順序的。比如某個雲的CPU切分成不同container或者VM。如果有VM佔據所有的CPU核心到內存帶寬,或者L3 cache,那麼其他VM很難獲得相應資源,產生延遲;對佔據資源的VM本身來說,也可能發生資源中斷。解決方法就是hypervisor可以控制每個VM可訪問的內存帶寬和cache量,進行相對智能的限制和資源優先順序控制。Intel Xeon Scalable處理器是有類似特性的,只不過AMD這回把它下放到了消費級產品中。

Zen 2架構終於讓AMD達到Intel的高度?

每個CCX包含四個核心+L3 cache,每8個核心組成一個chiplet,下方的cIOD即為負責通

而在工藝部分,AMD讓我們有機會了解7nm是如何改變其設計,應對封裝挑戰的。Zen 2每個chiplet是74mm2——上一代Zen+每個CCX就佔地60mm2。其中核心+L3 cache(16MB)佔據了一個chiplet大約31.3mm2的面積。如前文所述,由於整個處理器上有個單獨的中央I/O die,Zen 2也就不需要像上代那樣為每個die添加內存控制器和單獨的I/O,所以核心所在die的尺寸也就相對比較小,這大概也是 L3 cache得以做大的原因之一。

Zen 2架構終於讓AMD達到Intel的高度?

來源:AMD

另外由於7nm工藝 ,封裝的bump間距(焊接凸點間的距離)從150微米縮減到了130微米。為了達到更緊密的bump間距,AMD採用了銅柱焊接凸點技術(copper pillar)。這裡銅需要外延沉積在mask掩膜內,來構建迴流焊的支撐。又由於銅柱直徑的關係,所需的焊接掩膜更少,焊接位置的半徑就更小。

值得一提的是,前文我們說到,CPU上的中央I/O die採用的仍然是GlobalFoundries的12nm工藝,所以用的仍然是常規焊接掩膜,AMD表示未來預計整個CPU都會採用7nm設計,也就是全部採用這種銅柱實施方案。

Zen 2架構終於讓AMD達到Intel的高度?

就連接布局來看,封裝的襯底層數量增加到了12,用以處理更多的路徑連接。從AMD提供的圖片不難看出,下半部分就是傳說中的中央I/O die,通過Infinity Fabric連接到上方的CCX。

重頭戲:微架構變化

Zen 2畢竟還是Zen微架構的一員,其大體框架並沒有變。不過微架構有幾個地方的改動,是尤為值得一提的,這些改動可能正是Zen 2獲得IPC提升的關鍵。其一是L2加了一個新的分支預測器,叫TAGE預測器;L1-I cache容量減半,但op cache大增;其二在浮點運算單元獲得256bit位寬,開始真正完整支持AVX2指令。

從前端說起,L1 cache較大變化在於,cache尺寸從64KiB縮減到32KiB,不過關聯性由上一代的4路組相連改為8路組相連,一來一去的具體成效未知,尤其對cache命中率是個未知數。但L1尺寸的縮減,換來了op cache的尺寸翻倍(2K entry->4K entry)。L1 cache和op cache是緊鄰的——這可能是AMD在設計微架構時的某種權衡之策。AMD宣稱在更多場景下,測試發現這樣的成效更大。

這部分AMD宣傳的重頭戲還在分支預測單元TAGE上。分支預測單元是在出現if then條件分支時,去「猜測」指令流的路徑,而不是空等著計算結果明了以後再去執行。當分支出現時,會存儲到BTB(分支目標buffer)中,後續分支就可以決策了。現在的處理器不光會存儲上一個分支的歷史,還會在GHR(全局歷史寄存器)中存儲前幾個分支,以期了解分支間的關聯性。

Zen架構的BTB是三層結構,Zen 2在這個結構的基礎上,有了規模更大的BTB來追蹤指令分支和緩存請求。L1 BTB從256 entry(條目)加大到512 entry;L2的部分也幾乎翻了一番到7K entry;L0 BTB仍然是16 entry,但間接分支目標陣列(Indirect target array)擴展到1K entry。

這部分提升還需要搭配分支預測單元。Zen原本採用的分支預測器基於所謂「hashed」感知器,宣傳中就叫神經網路預測器,是一種簡單的機器學習方案,比gshare這樣的機制要準確。不過以Zen架構的流水線長度和寬度,出現錯誤預測的情況是比較要命的。Zen 2也保留了這種基於感知的預測器,但在此基礎上增加了TAGE預測器。不過這並不是個新東西,最早是2006年就有人提出來的。

Zen 2架構終於讓AMD達到Intel的高度?

TAGE分支預測器,來源:WikiChip

TAGE基於這樣一個原則:程序中不同的分支需要不同的歷史信息長度。對於某些分支而言,歷史越少,實際表現才會更好。TAGE實際就是標記等比歷史長度預測器(Tagged Geometric),包含多個全局歷史信息表——不同長度的GHR寄存器用以存儲。這些寄存器的不同長度,組成一個等比數列(所謂的geometric幾何級數),這就是TAGE縮寫的由來。TAGE預測器的主旨在於搞清楚何種量級的分支歷史信息對哪個分支而言最佳,最長的歷史優先,較短的次之。

這樣一來Zen 2的預測器就變成了兩級結構,一級就是感知預測器,用於快速查詢(比如單周期解決的);第二級為TAGE預測器,它需要更多的周期來完成。AMD宣稱上面這些機制加起來,錯誤預測率能夠低30%。以當代處理器的預測準確率,這個程度的提升對IPC提升應該是非常有好處的。以往AMD的分支預測器技術相比Intel一直都是比較糟糕的,這次AMD大肆宣傳TAGE,或許這方面的差距正在或者已經彌合。

Zen 2前端另一個比較大的提升就是加大的op cache(和減少的L1 cache)。指令解碼時,就會存儲到 op cache 中。Zen上一代op cache容量是2048 entry(8-way, 32-set),Zen 2則翻倍到了可容納4096 個MOP(macro-operation,需要注意的是宣傳材料中AMD官方已經不再區分x86指令、MOP宏指令和μop微指令,本文統一採用了wikichip的定義方法)。要知道Intel下一代Ice Lake也不過是2K entry。開啟超線程的話,每條線程用一半的量。也就是說Zen 2之上每個線程有效性相當於Zen上一代整個op cache的程度。

在op cache模式下(對應於指令cache模式),前端其餘部分為時鐘門控。Op cache增大讓更長的指令流處在op cache模式下,加強IPC吞吐的同時也能起到節能的作用。值得一提的是,在這一模式下,每周期發往後端8條MOP,但Zen 2的reorder buffer(重排序buffer,ROB/RCU)每個周期仍然只能處理至多6條MOP,所以op cache的吞吐也就局限在確保op隊列的效率了。這一點可能是不大平衡的。

Zen 2架構終於讓AMD達到Intel的高度?

Zen 2微架構,來源:ARM

往後端走,dispatch分發就發往整數或者浮點運算單元了。Zen和Zen 2都有三種指令類型:FastPath Single、FastPath Double和VectorPath。FastPath表示指令中包含一條MOP,FastPath Double則表示一條指令包含兩條MOP,VectorPath為超過兩條MOP。在reorder buffer操作之後,MOP就分解成了真正的μop微指令,並抵達scheduler調度器。

浮點運算部分的亮點在於對AVX2(256bit AVX)和FMA的完整支持,執行單元寬度擴展到256bit,也包括了 256bit load/store,AVX2計算執行理論上只需要一個周期。以前的操作是256bit指令前端解碼為FastPath Double類型,產生兩個MOP,每個MOP再分解成兩個μop;Zen 2則只需要把此類指令解碼成FastPath Single即可。

有兩個不大重要的點可以提一提。Zen 2浮點部分的兩個FMA單元都是256bit位寬,每個Zen 2核心的總FLOP都達到了雙精度16 FLOPs/周期,達到了Intel主流伺服器處理器的水平,和Cascade Lake的32 FLOPs/周期有距離;另外Zen 2仍無法完整支持AVX512,可能Zen 2處理AVX512的方法和以前Zen/Zen+處理AVX2的方法一樣。

Zen 2架構終於讓AMD達到Intel的高度?

Zen 2整數後端,來源:AMD

整數運算部分支持接收至多每周期6個MOP,再分解成相應μop。類似加法這樣的FastPath Single指令會分解為兩個μop,即load與add。這部分的μop總體就是ALU和load/store。然後μop發往相應的scheduler。Zen 2的ALU scheduler還是4個,不過深度變深了一點,理論上或許可以在並行能力方面略有提高。

Load/store操作的 AGU scheduler從先前的2個14-entry變成了 1個28-entry; AGU執行單元倒是多加了一個,變成了3個——多加的這個單元專門用於store操作。AGU最終關聯的load/store單元支持每周期256bit兩次讀和一次寫操作。存儲帶寬提升當然也是為了配合浮點運算單元。尾巴還有個L1-D數據緩存 ,也是32KB 8-way,load/store帶寬增加到32位元組/周期。

談到L1-D了 ,最後再返回到核心部分的存儲子系統, L2緩存512KB 8-way,L2數據TLB(translation lookaside buffer,地址轉換buffer)變大到2048 entry(上一代是1536 entry),還有新的1G page支持,AMD宣稱L2 TLB訪問可縮減周期。不過L3容量似已超出L2 TLB可容納的範圍,超過8MB以後訪問延遲會表現出page walk。

實際性能與功耗:IPC有15%提升?

在今年6月的Computex展上,AMD宣布Zen 2核心相較上代產品IPC性能表現提升15%,相同功耗下性能提升25%,相同性能下功耗至多降低一半。今年年初的CES展會上,AMD展示了Cinebench的跑分成績——這項測試偏重浮點運算能力,以及cache性能表現。當時AMD展示某個8核Zen 2處理器,相比Intel的i9-9900K獲得了差不多的性能成績,但AMD的功耗少了1/3。下面這張圖則是AMD在Computex大會上公開的Cinebench單線程和多線程跑分成績。

Zen 2架構終於讓AMD達到Intel的高度?

來源:ARM

實際性能表現,這裡主要借用AnandTech的測試數據。鑒於篇幅關係,這裡主要呈現Zen 2部分具有代表性的 測試成績。我們來看看,Zen 2究竟有沒有AMD宣傳的那麼神奇。

Zen 2架構終於讓AMD達到Intel的高度?

3900X與9900K存儲延遲測試,來源:AnandTech

就Zen 2的存儲子系統表現,Zen 2核心在測試中的內存延遲表現方面略有倒退,3900X相比2700X的DRAM延遲多了大約10ns上下,達到75ns左右,這和Intel同配不到40ns的水平還是有差距的(測試內存為DDR4-3200CL16 16-18-18-36)。3900X的L3 cache延遲從上一代產品的7.5ns左右降至如今的8.1ns左右,與Intel基本相當。而倒退可能是多方面原因促成的,比如說更大的L3 cache容量帶來的妥協。

值得一提的是,這裡AnandTech只選擇了高配的12核3900X做測試,如前文所述這是個雙die處理器;而相對低配的3800X及更低配置CPU都為單die。從已知的一些測試來看,Zen 2單die產品的內存寫入帶寬僅為理論值的一半,會影響到需要大量回寫數據的任務負載表現。加上即便是雙die產品,在內存頻率高於3600MHz時,對高頻內存的支持也並不好,這一點是值得考慮的。

到存儲帶寬部分,如前文所述Zen 2有了256bit位寬數據通路,AVX2指令執行能力比上一代是翻番的——這種變化在L1 cache部分很明顯,對L2/L3則約有20%提升。就L3 cache帶寬來看,AMD相比Intel是有60%的優勢的。但在DRAM部分,內存控制器的效率方面,AMD卻是落後的,最終3900X拷貝帶寬部分提升到21GB/s仍略弱於9900K的22.9GB/s;寫入帶寬3900X是14.5GB/s,9900K則為18GB/s。不過在MLP(memory level parrallelism)存儲級別並行表現上,Zen 2卻又表現極為神勇,L3 cache和DRAM部分的速度都很快。

所以從存儲子系統的綜合表現來看,雖然Zen 2的存儲延遲表現有退步,但核心prefetecher、L3 cache容量,還有MLP(內存級並行,考察cache miss時的表現)訪問能力的提升都相當不錯,另外內存控制器的情況相對複雜。改進與妥協一來一去,到實際應用環境里相比Intel大概也不會表現出弱勢。

Zen 2架構終於讓AMD達到Intel的高度?

SPEC2017總成績與每GHz性能,來源:AnandTech

接下來看SPEC2006的絕對性能成績,無論整數還是浮點運算性能,就SPEC2006的測試,3900X都有25%的絕對性能提升,換算到IPC,提升約為17%,還是高於AMD官方宣傳的15%的。

SPEC2017的情況基本類似的,3900X和Intel的9900K在諸多細分測試項能夠打得有來有回——就IPC也就是每GHz的表現來看,相比上一代提升約15%,也強於9900K。這裡需要補充的是,測試環境搭建對成績影響較大,比如選擇基於Windows的Linux子系統(WSL)來跑測試套件,LLVM編譯器選擇等等。有興趣的可參見文末參考鏈接來具體了解AnandTech的測試環境。

下面有選擇性地看看更偏上層的測試成績,原本我們應該選綜合系統性能測試的——這對日常各類使用更有參考性。但AnandTech的測試這回基本都是單項偏科的,所以我們也只能挑出一些具有代表性的測試項 。

Zen 2架構終於讓AMD達到Intel的高度?

Cinebench R15單線程與多線程測試成績,來源:AnandTech

渲染測試中比較有代表性的就是Cinebench R15,畢竟AMD自己在宣傳中也是用它。這個測試對於反映單線程性能是比較有說服力的,更高的IPC和頻率通常能夠在單線程測試中得到好成績,這是Intel的優勢;而更多的核心對多線程性能表現有利,這是這一代Ryzen 3000系列的優勢。

Zen 2架構終於讓AMD達到Intel的高度?

WinRAR解壓與AES編解碼測試,來源:AnandTech

解碼測試來看WinRAR 5.60b3解壓表現,這項測試的具體內容為解壓30個60秒視頻文件+2000個小型web文件,多次測試並統計所需平均時間。WinRAR負載線程比較多變,而且也受cache影響。另一個選擇的測試是AES加密,這裡用的是TrueCrypt,在內存中測試多種加密演算法;成績包含了AES加密、解密性能,單位是GB每秒。

遊戲表現就大致略過了。遊戲測試就 CPU而言在絕大部分情況下都是Intel主場,9900K/9700K基本技高一籌,除了像《異域奇兵》這樣的遊戲——AMD早前就說《異域奇兵》是其Vulkan API實現的一個具體表現,為AMD的多顯卡配置提供了彈性選擇。

Zen 2架構終於讓AMD達到Intel的高度?

3900X的功耗表,來源:AnandTech

最後的看點是功耗,畢竟7nm是Zen 2的一個亮點。Ryzen 3700X的TDP 65W,上一代Ryzen 2700X的TDP 105W。要知道3700X核心/線程數與2700X一致,而頻率還高了100MHz,最終結果是絕對能耗前者比後者低了32%。如果換算成每瓦性能,那麼3700X可謂比2700X有巨大提升。其實際總功耗基本控制在了88W上下。

3900X的部分就比較有趣了,實際從AMD官方宣布3800X/3700X的性能提升幅度,及功耗增加的不對等就不難發現,3800X的頻率已經越過了功耗臨界點,那麼3900X自然也就不例外了。測試成績可知3900X的每核峰值功耗,實際是明顯高於3700X的(還需要考慮到3900X多了一個die)。但即便如此,也還是比2700X優秀。

Zen 2架構終於讓AMD達到Intel的高度?

在滿載的情況下,3900X的核心功耗達到118W,總功耗大約是142W的程度。如果對比滿載情況下的總功耗水平,Intel都是明顯落於下風的。AMD Ryzen 3700X功耗全面領先Intel大約60%;而3900X,考慮一下它的核心數還多於9900K。

Zen 2架構終於讓AMD達到Intel的高度?

有關Zen 2架構的介紹,文章花了這麼多筆墨實際依然沒有講完,比如說AMD還特別跟微軟進行了合作,就Zen 2這種非常規核心結構,共同優化線程和內存分配:當一個處理器有幾簇核心時,線程分配會有不同的方式,AMD這次選擇了thread grouping技術,新線程會直接分配到已有線程核心的臨近核心,某個CCX線程填滿以後,才會訪問其他CCX——這種方案線程靠得更近,便於線程間通訊,但可能造成局部高功耗,且可能出現僅有一部分核心或chiplet活躍的狀態。但AMD認為這種方案相比thread expansion還是值得的,後者核心離得較遠,這對Zen 2而言,線程在不同chiplet或CCX間通訊,效率的確應該是不高的。

此外,Zen 2還有像是類似於Intel Speed Shift這樣的特性(叫Clock Selection),細粒度進行頻率調整,步進25MHz,和從空閑到載入狀態更快的頻率跳變;以及加強的安全性等等。

總體來看,Zen 2在設計上還是有頗多亮點的,包括TAGE預測器、增加的op cache,256bit AVX2指令的完整支持;雖然Zen 2的DRAM內存延遲變大,卻因為整體的架構設計,而沒有在存儲相關測試中表現出太大落後;性能在各項測試中與Intel互有勝負之餘,功耗還表現出了巨大優勢。可能從2005年Athlon 64退役以後,AMD都還沒有拿到過這樣的成績。

不過Intel仍然在某些領域表現出了優勢,比如可以拿下更高的頻率、單線程性能,存儲敏感負載測試等,遊戲表現也略勝一籌,但僅有的優勢項實際差別也不大。Intel的攻勢還在下一波,今年5月份Intel就宣布10nm Ice Lake在IPC方面將獲得18%的提升。難得見桌面處理器市場在這樣一個時間段掀起新一波的良性競爭,顯然這已經不是Intel一家獨大的市場了,況且Zen架構近期聽聞都已經規划到Zen 5了。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!

TAG: |