AMD 的 Zen 4 架構(gòu)在科技領(lǐng)域備受期待。因此,在其發(fā)布之前,許多關(guān)于其性能提升的謠言四處流傳。在本文中,我們將對(duì) Zen 4 的無序執(zhí)行引擎的前端內(nèi)存子系統(tǒng),以及 AVX-512等進(jìn)行深入解讀。
希望這個(gè)分析讓大家對(duì)AMD的最新架構(gòu)有更深入的了解。
概述和框圖
從 1000 英尺高處看,Zen 4 看起來很像 Zen 3,但升級(jí)分散在整個(gè)pipeline中。我們可以將 Zen 4 的情況與 Zen 2 的情況進(jìn)行比較。在這兩種情況下,AMD 在將其移植到新的工藝節(jié)點(diǎn)的同時(shí),都在發(fā)展一個(gè)堅(jiān)實(shí)的架構(gòu)。

遷移到新的制程節(jié)點(diǎn)涉及工作量和風(fēng)險(xiǎn)。英特爾通過眾所周知的“Tick-Tock”策略降低了這種風(fēng)險(xiǎn)。每個(gè)“Tick”代表一個(gè)主要的微架構(gòu)更改,而每個(gè)“Tock”是一個(gè)新制程節(jié)點(diǎn)的端口,具有非常小的更改。
與 2010 年代初的英特爾不同,AMD 大約需要兩年時(shí)間才能遷移到新的工藝節(jié)點(diǎn)。Zen 2 于 2019 年中期問世,距 Zen 1 于 2017 年初發(fā)布大約兩年后,從 14 nm 升級(jí)到 7 nm。Zen 4 于 2022 年末發(fā)布,距 Zen 3 于 2020 年末發(fā)布大約兩年,并從 7 nm 移動(dòng)到 5 nm。因此,AMD 的策略可以被描述為“Tick-Nothing-TickTock”。
這是 Zen 3 的比較:

因?yàn)閿?shù)據(jù)是公開的,所以為 Zen 3 繪制了更多的執(zhí)行單元,而為 Zen 4 測(cè)試所有這些需要太長(zhǎng)時(shí)間
前端:分支預(yù)測(cè)器
CPU 的分支預(yù)測(cè)器負(fù)責(zé)將pipeline引導(dǎo)到正確的方向。準(zhǔn)確的分支預(yù)測(cè)器將減少浪費(fèi)的工作,從而提高性能和電源效率。隨著 CPU 增加其重新排序能力,分支預(yù)測(cè)的準(zhǔn)確性變得更加重要,因?yàn)樵阱e(cuò)誤預(yù)測(cè)的分支之后排隊(duì)的任何工作都是無用的。
一、方向預(yù)測(cè)
與 Zen 系列中的其他 CPU 一樣,Zen 4 的方向預(yù)測(cè)器有兩個(gè)overriding levels。制作一個(gè)既非??焖儆址浅?zhǔn)確的預(yù)測(cè)器可能具有挑戰(zhàn)性,因此設(shè)計(jì)人員通常必須在速度和準(zhǔn)確性之間進(jìn)行權(quán)衡。一個(gè)壓倒一切的預(yù)測(cè)器試圖通過速度優(yōu)化的 L1 預(yù)測(cè)器和一個(gè)精度優(yōu)化的 L2 來實(shí)現(xiàn)兩全其美,如果預(yù)測(cè)不一致,它會(huì)覆蓋它。
Zen 4 和 Zen 3 似乎具有類似功能的 L1 預(yù)測(cè)器,但 AMD 顯著增強(qiáng)了 Zen 4 的 L2 預(yù)測(cè)器。Zen 3 的第二級(jí)預(yù)測(cè)器已經(jīng)毫不遜色,但 Zen 4 將事情提升到了一個(gè)新的水平。它可以識(shí)別極長(zhǎng)的模式,并且有足夠的存儲(chǔ)空間來很好地執(zhí)行,即使有很多分支在運(yùn)行。

英特爾的 Golden Cove 采取了不同的方法。與早期的英特爾大內(nèi)核一樣,它使用單級(jí)方向預(yù)測(cè)器。Golden Cove 的模式識(shí)別能力介于 Zen 4 的 L1 和 L2 預(yù)測(cè)器之間。

左邊是 Zen 4,右邊是 Golden Cove。兩者的分支數(shù)都高達(dá) 512
Golden Cove 可能會(huì)在難度適中的分支中享有優(yōu)勢(shì),可以由其預(yù)測(cè)器處理,但不能由 AMD 的 L1 預(yù)測(cè)器處理。然后,Zen 4 將失去 L2 覆蓋的前端帶寬。如果一個(gè)程序有很多難以預(yù)測(cè)的分支,Zen 4 將具有顯著的優(yōu)勢(shì);Golden Cove 將遭受更昂貴的錯(cuò)誤預(yù)測(cè)。在 Golden Cove 上,錯(cuò)誤預(yù)測(cè)的代價(jià)可能特別高,它依賴于保持更多指令在運(yùn)行中以應(yīng)對(duì)其更高的緩存延遲。如果您遭受錯(cuò)誤預(yù)測(cè)并最終將它們丟棄,那么在您的核心中跟蹤大量指令將無濟(jì)于事。
二、分支目標(biāo)跟蹤
有一個(gè)準(zhǔn)確的分支預(yù)測(cè)器很好,但速度也很重要。您不希望過于頻繁地停止pipeline,因?yàn)槟诘却种ьA(yù)測(cè)器提供下一個(gè)提取目標(biāo)。與 Zen 3 一樣,Zen 4 具有兩級(jí)分支目標(biāo)緩沖區(qū) (BTB):branch target buffer 設(shè)置,第一級(jí)非常大且速度快。Zen 3 的 L1 BTB 可以跟蹤 1024 個(gè)分支目標(biāo),并以 1 個(gè)周期延遲處理它們,這意味著如果目標(biāo)來自 L1 BTB,則前端不需要在執(zhí)行分支后停止。Zen 4 的 L1 BTB 保持相同的 1 個(gè)周期延遲,但提高了容量。根據(jù)分支密度,Zen 4 的 L1 BTB 最多可以跟蹤 3072 個(gè)分支目標(biāo),但實(shí)際上它可能能夠跟蹤 1024 到 2048 個(gè)目標(biāo)。

我們已經(jīng)看到網(wǎng)上聲稱 Zen 4 具有 1.5K 入口 L1 BTB。在我們的測(cè)試中,Zen 4 可能偶爾能夠在每個(gè) BTB 條目中存儲(chǔ)兩個(gè)分支目標(biāo)。先前 Zen CPU 的優(yōu)化手冊(cè)詳細(xì)介紹了此機(jī)制。
“如果分支位于同一個(gè) 64 字節(jié)對(duì)齊的高速緩存行中并且第一個(gè)分支是條件分支,則每個(gè) BTB 條目最多可以容納兩個(gè)分支。”——AMD 系列 17h 處理器的軟件優(yōu)化指南
我們的測(cè)試在以前的 Zen CPU 上沒有顯示這種行為,因?yàn)槲覀冎皇褂昧藷o條件分支。Zen 4 可能使 BTB 條目共享方案更加靈活,解釋了當(dāng)分支間隔為 8 個(gè)字節(jié)時(shí)我們?nèi)绾慰吹礁櫟?3072 個(gè)分支目標(biāo)。
Zen 4 的 L2 BTB 大小也略有增加,容量從 Zen 3 上的 6656 個(gè)條目增加到 Zen 4 上的 8192 個(gè)。更重要的是,Zen 4 的 L2 BTB 更快:Zen 3 在需要來自其 L2 BTB的分支目標(biāo)時(shí)遭受了三個(gè)周期的penalty,Zen 4 將penalty降低到一個(gè)周期。

三、間接分支預(yù)測(cè)
間接分支可以到達(dá)多個(gè)目標(biāo)。將它們視為實(shí)現(xiàn) switch-case 語句的選項(xiàng)。它們?yōu)榉种ьA(yù)測(cè)增加了另一個(gè)難度維度,因?yàn)轭A(yù)測(cè)器必須在幾個(gè)可能的目標(biāo)之間進(jìn)行選擇。AMD 的 CPU 有一個(gè)單獨(dú)的間接目標(biāo)數(shù)組,用于處理指向多個(gè)目標(biāo)的分支。在我們的測(cè)試中,Zen 4 似乎能夠跟蹤多達(dá) 3072 個(gè)分支目標(biāo)而沒有明顯的損失。對(duì)于單個(gè)分支,Zen 4 看到隨著目標(biāo)數(shù)量超過 32 個(gè)而增加 penalties ,但此后沒有明顯的飆升表明預(yù)測(cè)錯(cuò)誤。

相比 Zen 3,Zen 4 對(duì)間接分支的追蹤能力顯然更好。從間接目標(biāo)數(shù)組中獲取目標(biāo)的 penalties 也較低。
Zen 4 在有很多間接分支的情況下比 Golden Cove 做得更好,但是當(dāng)少數(shù)分支到達(dá)很多目標(biāo)時(shí),Golden Cove 可以更好地應(yīng)對(duì)。當(dāng)必須在大量目標(biāo)之間進(jìn)行選擇時(shí),兩種架構(gòu)似乎都會(huì)受到某種penalty,但分支的行為仍在預(yù)測(cè)器的跟蹤能力范圍內(nèi)。

一種猜測(cè)是 Zen 4 有一個(gè)更大但更慢的間接目標(biāo)數(shù)組。前幾代 Zen 的優(yōu)化手冊(cè)表明,間接目標(biāo)數(shù)組可用作壓倒一切的預(yù)測(cè)器。如果分支碰巧去了上次去的同一個(gè)地方,Zen 可以使用其更快的主 BTB 來提供目標(biāo),這意味著間接分支的延遲與其擁有的目標(biāo)數(shù)量相關(guān)聯(lián)。隨著 Golden Cove 上目標(biāo)數(shù)量的增加,我們看到分支延遲的增加較少,這表明英特爾正在使用不同的機(jī)制。
四、回報(bào)預(yù)測(cè)(Return Prediction)
調(diào)用和返回對(duì)是間接分支的一種特殊情況,因?yàn)榉祷赝ǔ?huì)返回到調(diào)用函數(shù)的位置。CPU 使用特殊的返回堆棧來利用此行為。在調(diào)用時(shí),CPU 將下一條連續(xù)指令的地址壓入堆棧。當(dāng)有返回時(shí),它會(huì)從返回堆棧中彈出地址。這種非常簡(jiǎn)單的機(jī)制為返回提供了非常準(zhǔn)確的預(yù)測(cè),因?yàn)檎{(diào)用和返回對(duì)通常是匹配的。但是,非常深的調(diào)用序列可能會(huì)溢出堆棧。

與前幾代 Zen 一樣,Zen 4 有一個(gè)包含 32 個(gè)條目(entries)的返回堆棧。不過,AMD 似乎做了一些改進(jìn),使得單個(gè)線程可以使用所有 32 個(gè)條目。英特爾的 Golden Cove 可能有一個(gè)返回堆棧,因?yàn)檫@是一種預(yù)測(cè)返回的有效方法,但與此處測(cè)試的其他 CPU 不同。當(dāng)調(diào)用只有兩個(gè)深度時(shí)速度非??欤S后會(huì)減慢并且之后每個(gè)調(diào)用/返回對(duì)的時(shí)間不會(huì)急劇增加。如果返回堆棧溢出,英特爾可能會(huì)順利過渡到在返回上使用其間接預(yù)測(cè)器。
前端:獲取帶寬
一旦分支預(yù)測(cè)器確定下一步要去哪里,就該獲取指令了。Zen 4 與前幾代 Zen 一樣,可以通過大型微操作緩存加速這一過程。與 Zen 3 相比,Zen 4 將微操作緩存的大小從 4K 增加到 6.75K 條目。我們對(duì) 8B NOP 的測(cè)試并沒有顯示出微操作緩存容量增加太多,因?yàn)樵?32 KB 之后獲取帶寬會(huì)下降。L1i 很可能包含微操作緩存。

除了微操作緩存和 L1i 之外,指令獲取帶寬下降但仍然非常不錯(cuò)。Zen 4、Zen 3 和 Golden Cove 都可以從 L2 每個(gè)周期維持大約 16 個(gè)字節(jié),從 L3 每個(gè)周期可以維持略高于 10 個(gè)字節(jié)。這應(yīng)該足以防止除了具有大指令占用空間的最高 IPC 代碼之外的所有指令帶寬瓶頸,因?yàn)榧词乖谑噶炕a中,平均指令長(zhǎng)度通常也低于 8 個(gè)字節(jié)。

為了使微基準(zhǔn)測(cè)試復(fù)雜化,Zen 4 似乎成對(duì)處理 NOP,就像Graviton 3一樣。我們每個(gè)周期從微操作緩存中獲得了荒謬的 12 個(gè) NOP。AMD 表示,微操作緩存每個(gè)周期提供 9 個(gè)操作,但吞吐量受到下游 6 寬重命名器(renamer)的限制??赡馨l(fā)生的情況是每個(gè)重命名器插槽每個(gè)周期可以處理兩個(gè) NOP。為了解決這個(gè)問題,我們使用了一條指令,將寄存器與自身進(jìn)行異或(XORs )。將寄存器與自身進(jìn)行異或是一種將寄存器歸零的常用方法,大多數(shù)重命名器都會(huì)消除這種情況。

但重要的部分是,XOR r,r 的行為就像一條正常指令,一直到重命名器(renamer)。我們現(xiàn)在還可以看到微操作緩存和 L1i 吞吐量之間的差異。一旦 Zen 4 錯(cuò)過 op 緩存,吞吐量就會(huì)受到 4-wide 解碼器的限制。與前幾代 Zen 一樣,L1i 可能比較低的緩存級(jí)別提供更多的指令獲取帶寬。但是 Zen 4 的運(yùn)算緩存的大小意味著它可能可以處理需要大量指令帶寬的大多數(shù)情況。如果一個(gè)程序有足夠大的代碼足跡溢出操作緩存,并且有很多長(zhǎng)指令,它也可能會(huì)溢出 L1i。
重命名/分配(Rename/Allocate)
在無序執(zhí)行的 CPU 上,重命名器(renamer)充當(dāng)有序前端和無序后端之間的橋梁。它的主要工作是分配后端資源以跟蹤運(yùn)行中的操作,以便它們可以按程序順序正確提交。重命名器也是一個(gè)方便的地方,它可以使后端操作更高效。Zen 4 的重命名器能夠打破 zeroing idioms和register to register MOVs之間的依賴關(guān)系,其行為與 Zen 3 非常相似。

Golden Cove 的重命名器功能稍強(qiáng)一些,也可以消除 MOV r,0 情況。它還可以在不使用下游 ALU 的情況下處理添加小的立即數(shù)(small immediate values :即指令中提供的值,而不是來自寄存器的值)。
Renamer技巧可以更進(jìn)一步,通過不為這些情況分配寄存器來節(jié)省后端資源。消除的 MOV 可以通過將多個(gè)架構(gòu)寄存器指向同一個(gè)物理寄存器來處理,這意味著不必為此類 MOV 分配額外的物理寄存器。如果Renamer知道寄存器的值必須為零,它可以通過在寄存器別名表中設(shè)置一個(gè)位而不是分配一個(gè)實(shí)整數(shù)寄存器來記住這一點(diǎn)。Zen 4 的Renamer也是這樣做的,它繼承了前幾代 Zen 的特點(diǎn),尤其是 Zen 3。

在大多數(shù)情況下,Zen 4 可以避免在識(shí)別zeroing idiom時(shí)分配物理寄存器。但是,128 位 XMM 寄存器是一個(gè)例外。從 Zen 3 開始,使用 XORPS 或 SUBPS 將 1 歸零會(huì)占用一個(gè)向量寄存器。這有點(diǎn)令人驚訝,因?yàn)?Zen 2 在這些情況下可以避免寄存器分配。也許 Zen 2 獨(dú)立跟蹤其 256 位向量寄存器的 128 位一半,但 Zen 3 和 Zen 4 以 256 位粒度(granularity)進(jìn)行跟蹤。在測(cè)試序列之前執(zhí)行 VZEROUPPER 指令沒有任何區(qū)別。
在我們測(cè)試的所有情況下,英特爾都可以避免分配寄存器,而且這種能力至少可以追溯到 Skylake。即使在 2022 年,AMD 仍在迎頭趕上,盡管這些都是相對(duì)次要的細(xì)節(jié)。
亂序資源
與前幾代 Zen 一樣,Zen 4 對(duì)無序緩沖區(qū)大小進(jìn)行了增量改進(jìn)。結(jié)構(gòu)大小的變化范圍從 ROB 容量增加 25% 到存儲(chǔ)隊(duì)列完全沒有變化。對(duì)于發(fā)生變化的結(jié)構(gòu),條目數(shù)通常會(huì)增加 10-20%。總的來說,這些變化比我們看到的從 Zen 1 到 Zen 2 的變化要大一些。

與其主要的競(jìng)爭(zhēng)對(duì)手英特爾相比,Zen 4 在重新排序能力方面仍然是一個(gè)相當(dāng)小的核心。許多關(guān)鍵架構(gòu)甚至比 Sunny Cove 的還要小,更不用說 Golden Cove 的了。但正如我們所知道的那樣,英特爾需要更多的重新排序能力來處理其更高延遲的緩存設(shè)置。
在某些領(lǐng)域,Zen 4 的沖擊力也比其headline重新排序緩沖區(qū)容量所暗示的要大一些。我們測(cè)量了 202 個(gè)整數(shù)寄存器(共 224 個(gè))可用于保存推測(cè)結(jié)果,覆蓋了 ROB 容量的 63%。在 Golden Cove,我們測(cè)量了大約 242 個(gè)整數(shù)寄存器,即 ROB 容量的 47.2%。因此,Golden Cove 的重新排序能力更有可能因缺少整數(shù)寄存器而受到限制,而且情況更糟,因?yàn)?Golden Cove 在使用其物理寄存器文件時(shí)似乎效率較低。對(duì)于 Zen 4,測(cè)得的 202 個(gè)整數(shù)加法的重新排序容量意味著使用 22 個(gè)物理整數(shù)寄存器來保存非推測(cè)結(jié)果。假設(shè)英特爾沒有減少 Sunny Cove 和 Golden Cove 之間的整數(shù)寄存器文件大小,
Zen 4 的重新排序緩沖區(qū)也很特別,因?yàn)槊總€(gè)條目( entry)最多可以容納 4 個(gè) NOP。解碼器可能會(huì)融合成對(duì)的 NOP,并且在重命名階段再次融合成對(duì)的 NOP。雖然這不太可能對(duì)實(shí)際代碼產(chǎn)生重大影響,但測(cè)量 1265 個(gè) NOP 的重新排序能力很有趣。我們使用了一個(gè)自定義測(cè)試,最多包含 128 個(gè)整數(shù)加法、128 個(gè)浮點(diǎn)加法、40 個(gè)存儲(chǔ)和 55 個(gè)分支(按此順序),以確認(rèn) AMD 公布的 320 條目 ROB 容量。
調(diào)度和執(zhí)行
調(diào)度程序和執(zhí)行pipe布局與 Zen 3 相比沒有變化。Zen 3 的調(diào)度程序設(shè)置是 Zen 2 的重大升級(jí),通過在 ALU 和 AGU 端口之間共享調(diào)度隊(duì)列,在整數(shù)方面提供了很大的靈活性。在浮點(diǎn)和向量執(zhí)行方面,Zen 3 和 Zen 4 保留了前幾代 Zen 中發(fā)現(xiàn)的大型非調(diào)度隊(duì)列,但從統(tǒng)一的四端口調(diào)度器轉(zhuǎn)移到兩個(gè)三端口調(diào)度器。在實(shí)踐中,這應(yīng)該很像一個(gè)統(tǒng)一的調(diào)度器,因?yàn)閮蓚€(gè)調(diào)度器都有類似的管道連接到它們。

調(diào)度器結(jié)構(gòu)在功率和面積方面往往很昂貴。調(diào)度隊(duì)列可能必須在每個(gè)周期檢查每個(gè)條目,以查看它是否已準(zhǔn)備好執(zhí)行。為了使事情變得更加困難,它必須能夠在標(biāo)記為就緒的同一周期發(fā)送執(zhí)行指令。即使延遲一個(gè)周期也會(huì)導(dǎo)致毀滅性的 10% IPC 下降,這一切都是由其本身造成的。所有這些都變得越來越難在高時(shí)鐘下實(shí)現(xiàn)。
AMD 可能選擇專注于提高時(shí)鐘速度,而不是提高調(diào)度程序的容量。增加調(diào)度隊(duì)列大小會(huì)導(dǎo)致收益遞減。另一方面,性能通常與時(shí)鐘速度非常吻合。也就是說,只要您的緩存設(shè)置足以防止內(nèi)存瓶頸,IPC 通常不會(huì)隨著時(shí)鐘速度的增加而出現(xiàn)太大的下降。AMD 的工程師可能看到,通過在更高的時(shí)鐘頻率下運(yùn)行內(nèi)核,他們可以獲得更大的整體性能提升,而不是通過加強(qiáng)調(diào)度程序設(shè)置來增加 IPC。
AVX-512 實(shí)施
Zen 4 是第一個(gè)實(shí)現(xiàn) AVX-512 指令集擴(kuò)展的 AMD 架構(gòu)。Zen 4 在 AVX-512 功能支持方面與 Ice Lake 差不多。在實(shí)施方面,Zen 4 旨在實(shí)現(xiàn) Centaur CNS 和英特爾服務(wù)器芯片之間的功率、面積和性能平衡。

AMD 通過將向量解碼為兩個(gè)微操作來支持更長(zhǎng)的向量長(zhǎng)度的悠久傳統(tǒng)。
Bulldozer 通過將 256 位操作分解為兩個(gè) 128 位微操作來支持 AVX。K8 也做了同樣的事情,將 128 位 SSE 操作分解為兩個(gè) 64 位操作。這種策略讓 AMD 能夠以極少的功耗和面積開銷支持新的指令集擴(kuò)展,但也意味著當(dāng)應(yīng)用程序確實(shí)利用更廣泛的向量時(shí),它們并沒有太多好處。相比之下,英特爾在 Sandy Bridge 推出時(shí)帶來了full-width AVX 執(zhí)行。Server Skylake 對(duì) AVX-512 做了同樣的事情。
Zen 4 部分打破了這一傳統(tǒng),將在 512 位向量上運(yùn)行的指令作為一個(gè)微操作保留在大部分流水線中。因此,每條 AVX-512 指令僅消耗相關(guān)無序執(zhí)行緩沖區(qū)中的一個(gè)條目。我假設(shè)它們?cè)谶M(jìn)入 256 位執(zhí)行pipe后被分解為兩個(gè)操作,這意味著指令在管道中盡可能晚地分成兩個(gè) 256 位半。我還假設(shè)這就是 AMD 的“double pumping”所指的。與 Bulldozer 和 K8 的方法相比,這是一個(gè)巨大的優(yōu)勢(shì)。為每條 256 位或 128 位指令跟蹤兩個(gè)微操作意味著那些較舊的架構(gòu)無法使用更寬的向量來保持更多工作在進(jìn)行中。不過,Zen 4 的做法在面積和功耗方面略貴一些,
512 位存儲(chǔ)是該規(guī)則的一個(gè)例外。它們?nèi)匀槐唤獯a為兩個(gè)微操作,這意味著它們消耗了兩個(gè)有價(jià)值的存儲(chǔ)隊(duì)列條目。存儲(chǔ)隊(duì)列可能是一個(gè)非常熱門的結(jié)構(gòu),特別是因?yàn)榇鎯?chǔ)必須留在那里直到退休,因?yàn)橹挥幸阎己玫臄?shù)據(jù)才能提交到緩存。AMD 的存儲(chǔ)隊(duì)列比 Intel 的要小很多,因此如果 Zen 4 的 AVX-512 實(shí)施存在一個(gè)嚴(yán)重缺陷,那就是存儲(chǔ)的處理方式。
這可能是因?yàn)?AMD 沒有為 L1 數(shù)據(jù)緩存實(shí)現(xiàn)更寬的總線。Zen 4 的 L1D 每個(gè)周期可以處理兩個(gè) 256 位加載和一個(gè) 256 位存儲(chǔ),這意味著向量加載/存儲(chǔ)帶寬與 Zen 2 保持不變。技嘉泄漏建議對(duì)齊更改為 512 位,但這顯然不是申請(qǐng)門店。

自 Zen 2 以來,最常見操作的向量執(zhí)行吞吐量也基本沒有變化,Zen 2 是第一個(gè)帶來full-width AVX 執(zhí)行的 AMD 架構(gòu)。Zen 2、3 和 4 都有兩個(gè) 256 位 FMA 單元和四個(gè) 256 位 ALU。起初,這似乎并不令人興奮。但在很多工作負(fù)載中,提供執(zhí)行單元比擁有大量執(zhí)行單元更重要。與英特爾相比,Zen 4 已經(jīng)具有具有競(jìng)爭(zhēng)力的矢量吞吐量。除非我們查看其架構(gòu)的服務(wù)器變體,否則英特爾并沒有顯著的吞吐量?jī)?yōu)勢(shì),它們?cè)诙丝?5 上有一個(gè)額外的 512 位 FMA 單元。

雖然英特爾的客戶端架構(gòu)具有與 Zen 4 相當(dāng)?shù)南蛄客掏铝?,但通過 256 位piles的 512 位操作的處理方式不同。英特爾在端口 0 和 1 上融合了兩個(gè) 256 位單元來處理 512 位操作。當(dāng)將 256 位 FMA 指令與 512 位指令混合時(shí),這會(huì)導(dǎo)致一些有趣的特性。Intel 卡在每個(gè)周期一個(gè)向量操作,可能是因?yàn)槎丝?0 和 1 上的 256 位 FMA 單元必須設(shè)置為 1×512 位或 2×256 位模式,但不能同時(shí)處于兩種模式。
AVX-512 還允許通過一組 K (mask)寄存器來masking 大多數(shù)操作。為了處理這個(gè)問題,Zen 4 添加了一個(gè)相對(duì)較小的掩碼寄存器(mask register)文件。掩碼寄存器有大約 52 個(gè)重命名(renames ),這個(gè)寄存器文件比我們?cè)?Skylake-X 或 Ice Lake 上看到的要小得多。在最大重排量(maximum reordering capacity)方面,Zen 4 比 Skylake-X 更接近 Ice Lake,因此 AMD 并沒有對(duì)這個(gè)結(jié)構(gòu)給予太多重視。
總結(jié)各種 AVX-512 實(shí)施決策:

Zen 4 從 AVX-512 獲得了比 Centaur CNS 更大的收益,后者以最小的裸片面積開銷實(shí)現(xiàn) AVX-512 支持。反過來,英特爾看到了比 Zen 4 更大的收益。啟用 AVX-512 的 Golden Cove 在此基準(zhǔn)測(cè)試中實(shí)際上在擴(kuò)展和絕對(duì)性能方面都優(yōu)于 Zen 4。但這可能是這一代人的爭(zhēng)論點(diǎn),因?yàn)橛⑻貭枱o法在其混合客戶端芯片中啟用 AVX-512 支持。

總而言之,AMD 的 AVX-512 實(shí)施專注于更好地滿足現(xiàn)有執(zhí)行能力,并且只在其產(chǎn)生最大影響的地方使用額外的芯片面積和功率。最昂貴的更改可能與擴(kuò)展向量寄存器文件以使每個(gè)寄存器為 512 位寬有關(guān)。AMD 還必須在整個(gè)流水線中添加掩碼寄存器文件和其他邏輯來處理新指令。與 Intel 的客戶端實(shí)現(xiàn)一樣,AMD 避免添加額外的浮點(diǎn)執(zhí)行單元,這會(huì)很昂貴。與 Intel 不同的是,AMD 也保持 L1D 和 L2 帶寬不變,并將 512 位存儲(chǔ)拆分為兩個(gè)操作。
結(jié)果是非常可信的第一輪 AVX-512 實(shí)施。與 Intel 相比,AMD 在一些關(guān)鍵領(lǐng)域仍然存在不足,如果 AVX-512 代碼需要大量加載/存儲(chǔ)帶寬并適合核心專用緩存,則尤其處于劣勢(shì)。但是,雖然 Zen 4 的目標(biāo)沒有英特爾那么高,但它仍然可以從 AVX-512 中以與客戶端英特爾架構(gòu)相同的許多方式受益。AMD 對(duì) 512 位向量的支持也強(qiáng)于最初在 K8 Athlon 中對(duì) 128 位向量的支持,或者從 Bulldozer 到 Zen 1 的 256 位向量。Zen 4 在可以利用 AVX-512 的應(yīng)用程序中應(yīng)該會(huì)看到明顯的好處,無需花費(fèi)大量功率或die面積。
Zen 4還引入了大量的前端和執(zhí)行引擎改進(jìn)。分支預(yù)測(cè)器和微操作緩存改進(jìn)讓前端更快地將指令帶入核心,并建立在 Zen 3 已經(jīng)強(qiáng)大的前端之上。后端增加的重新排序能力讓 Zen 4 更好地吸收緩存和執(zhí)行延遲。
然而,AMD 幾乎沒有改變執(zhí)行單元和調(diào)度程序的設(shè)置。執(zhí)行單元沒什么大不了的,因?yàn)?Zen 3 已經(jīng)有足夠的執(zhí)行能力了,提供執(zhí)行單元比增加更多更重要。然而,沒有增加任何調(diào)度隊(duì)列有點(diǎn)令人驚訝。AMD 提高了調(diào)度能力,并且在之前的每一代 Zen 中至少對(duì)調(diào)度器布局進(jìn)行了微小的更改。Zen 3 在靈活的布局中已經(jīng)具備了充足的調(diào)度能力,因此 Zen 4 的相同設(shè)置無論如何也不弱。但隨著其他組件的改進(jìn),調(diào)度能力可能會(huì)成為更多的限制因素。Zen 4 通常會(huì)在整數(shù)代碼方面表現(xiàn)出色,盡管 IPC 的增加在時(shí)鐘速度提升方面處于次要地位。
Zen 4 在加載和存儲(chǔ)帶寬方面也落后了。它的 L1D 每個(gè)周期可以提供 512 位的加載帶寬和 256 位的存儲(chǔ)帶寬。這使得 Zen 4 的 L1D 帶寬與 AMD 方面的 Zen 2 和 Zen 3 或英特爾方面的 Haswell 和客戶端 Skylake 保持一致。Zen 4 在使用 256 位向量(或更?。┑拇a方面仍然表現(xiàn)出色,盡管可能達(dá)不到 Golden Cove 的水平。
但是,AMD 在支持 AVX-512 方面擁有優(yōu)勢(shì)。如果代碼使用新的 AVX-512 指令和功能,這些指令和功能在 Zen 4 上具有優(yōu)化的路徑,但沒有直接的 AVX2 等效項(xiàng),英特爾將發(fā)現(xiàn)自己處于不利的不利地位。Zen 4 可能沒有全面的 AVX-512 實(shí)施。但如果應(yīng)用正確,它仍然足以擊敗缺乏 AVX-512 支持的競(jìng)爭(zhēng)對(duì)手。
當(dāng)然,這假設(shè)兩個(gè)處理器都沒有受到內(nèi)存子系統(tǒng)的瓶頸。在線程良好的矢量化應(yīng)用程序中,緩存和內(nèi)存性能可能非常重要。這是一個(gè)復(fù)雜的話題,我們將在后續(xù)文章中介紹 Zen 4 的加載/存儲(chǔ)子系統(tǒng)和數(shù)據(jù)端內(nèi)存層次結(jié)構(gòu)。
內(nèi)存執(zhí)行
與 Zen 3 一樣,Zen 4 使用三個(gè) AGU 來計(jì)算加載和存儲(chǔ)指令的地址。這些地址以及存儲(chǔ)數(shù)據(jù)(如果適用)被傳遞到加載/存儲(chǔ)單元。然后,加載/存儲(chǔ)單元必須面對(duì)確保內(nèi)存訪問看起來按照程序順序執(zhí)行的復(fù)雜工作,同時(shí)盡可能多地提取性能。
高性能意味著保持大量操作處于運(yùn)行狀態(tài)以隱藏內(nèi)存訪問延遲,加載/存儲(chǔ)單元必須通過跟蹤待處理的內(nèi)存操作來發(fā)揮其作用。為此,Zen 4 實(shí)現(xiàn)了一個(gè)大型加載隊(duì)列(large load queue)。自 Zen 1 以來,AMD 的加載隊(duì)列的工作方式與 Intel 的不同。在加載操作接收到數(shù)據(jù)后,加載隊(duì)列可以自由地釋放它。一個(gè)單獨(dú)的、更大的結(jié)構(gòu)用于跟蹤裝載操作直至退出(retirement)。為了區(qū)分這些結(jié)構(gòu),我們將較大的結(jié)構(gòu)稱為“加載驗(yàn)證隊(duì)列”(load validation queue),將發(fā)布的加載隊(duì)列稱為“加載執(zhí)行隊(duì)列”(load execution queue)。分離出這些結(jié)構(gòu)讓 AMD 可以保持 136 次加載操作,遠(yuǎn)遠(yuǎn)超過他們公布的加載隊(duì)列大小所暗示的。

Zen 4 上的存儲(chǔ)必須緩沖在一個(gè)相對(duì)較小的 64 條目存儲(chǔ)隊(duì)列中。這個(gè)存儲(chǔ)隊(duì)列對(duì) AVX-512 代碼的壓力更大,因?yàn)?512 位存儲(chǔ)將消耗兩個(gè)存儲(chǔ)隊(duì)列條目。
一旦內(nèi)存操作在各自的隊(duì)列中,加載/存儲(chǔ)單元必須確保保留內(nèi)存順序。如果動(dòng)態(tài)存儲(chǔ)的地址與較新加載的地址重疊,則可以將存儲(chǔ)的數(shù)據(jù)轉(zhuǎn)發(fā)給加載。與 Zen 3 一樣,Zen 4 可以無延遲地進(jìn)行存儲(chǔ)轉(zhuǎn)發(fā)。也就是說,依賴加載和存儲(chǔ)的鏈將在 2 個(gè) IPC 上執(zhí)行。
但是,這有適用的不同條款和條件。加載和存儲(chǔ)地址必須完全匹配。如果存儲(chǔ)跨越 32 字節(jié)對(duì)齊邊界(aligned boundary),則會(huì)評(píng)估額外的 1 個(gè)周期延遲損失。如果存儲(chǔ)跨越 4 KB 對(duì)齊的pages邊界( page boundary),該機(jī)制將完全失敗。

Zen 4 的存儲(chǔ)到加載轉(zhuǎn)發(fā)特性,使用Henry Wong 的測(cè)試方法
負(fù)載完全包含在存儲(chǔ)中的部分重疊情況以 6-7 個(gè)周期的延遲處理,這比 Zen 3 的 7-8 個(gè)周期略有改進(jìn)。如果加載和存儲(chǔ)重疊,則兩代 Zen 的存儲(chǔ)轉(zhuǎn)發(fā)都會(huì)失敗,但僅使用存儲(chǔ)中的數(shù)據(jù)無法完成加載。Zen 4 在這種情況下需要 19 個(gè)周期的懲罰(cycle penalty),這可能對(duì)應(yīng)于等待 store 退出并從 L1D 讀取數(shù)據(jù)。相比之下,Zen 3 可以在 18 個(gè)周期內(nèi)處理故障情況,但前提是存儲(chǔ)地址與 4 字節(jié)邊界(byte boundary)對(duì)齊。否則,Zen 3 將遭受 25 個(gè)周期的懲罰,而 Zen 4 避免了這一點(diǎn)。對(duì)于所有測(cè)試的存儲(chǔ)轉(zhuǎn)發(fā)案例,總結(jié)依賴于存儲(chǔ)的負(fù)載的互惠吞吐量:

Zen 4 保留了 Zen 3 的大部分存儲(chǔ)轉(zhuǎn)發(fā)(store forwarding )特性,并在最常見的情況下略有改進(jìn)。不太常見的pages邊界交叉情況略有回歸。在兩種架構(gòu)上,在處理存儲(chǔ)轉(zhuǎn)發(fā)案例時(shí)跨越pages邊界都非常昂貴。它比 Zen 1 和 Zen 2 還要貴,最好避免使用。
在大多數(shù)情況下,Golden Cove 的存儲(chǔ)轉(zhuǎn)發(fā)延遲比 Zen 4 略低,除非加載和存儲(chǔ)都跨越 64B 緩存線邊界。對(duì)于精確地址匹配的情況,Golden Cove 享有吞吐量?jī)?yōu)勢(shì)而不是延遲優(yōu)勢(shì)。使用四個(gè) AGU,Golden Cove 可以為每個(gè)周期的兩個(gè)加載和兩個(gè)存儲(chǔ)生成地址。
對(duì)于更常見的非重疊負(fù)載,Golden Cove 繼續(xù)具有優(yōu)勢(shì),因?yàn)?L1D 以更大的塊訪問,并且將遭受更少的未對(duì)齊訪問。我們喜歡將內(nèi)存訪問視為可字節(jié)尋址(byte addressable)且完全隨機(jī)的。但在實(shí)踐中,緩存是在更大的、對(duì)齊的塊中尋址的。這里的“對(duì)齊”意味著內(nèi)存地址是特定大小的倍數(shù)。例如,32 字節(jié)對(duì)齊的內(nèi)存地址的低 5 位將為零?!拔磳?duì)齊”訪問跨越對(duì)齊邊界,迫使加載/存儲(chǔ)單元進(jìn)行兩次 L1D 查找以滿足請(qǐng)求。

Golden Cove 的 L1D 以 64 字節(jié)、緩存線大小的塊處理加載和存儲(chǔ)。相比之下,AMD 的 L1D 以 32 字節(jié)塊的形式處理寫入,從 Zen 2 開始。跨越 Zen 4 上的兩個(gè) 32B 塊或 Golden Cove 上的 64B 塊之間邊界的寫入需要兩個(gè)周期才能完成。Zen 4 比 Zen 3 有所改進(jìn),后者可能需要 5 個(gè)周期來處理這種未對(duì)齊的負(fù)載,并且如果存儲(chǔ)也是 4B 對(duì)齊的,則只能獲得 2 個(gè)周期的情況。Golden Cove、Zen 3 和 Zen 4 也發(fā)現(xiàn)超過 64B 邊界的負(fù)載吞吐量降低,但這種情況處理得更好,因?yàn)樨?fù)載吞吐量首先更高。
跨越 4 KB 邊界的訪問會(huì)帶來更多復(fù)雜性,因?yàn)樘摂M地址到物理地址的轉(zhuǎn)換通常在 4 KB pages中處理。處理這樣的訪問也需要訪問兩個(gè) TLB 條目。所有 Zen 世代都比常規(guī)的未對(duì)齊負(fù)載情況更容易處理這種情況,這表明他們的 TLB 可以在每個(gè)周期服務(wù)多個(gè)查找。在處理跨越 4K 邊界的負(fù)載時(shí),英特爾的 Golden Cove 和 Ice Lake 架構(gòu)確實(shí)會(huì)產(chǎn)生輕微的損失。

在所有經(jīng)過測(cè)試的架構(gòu)中,寫入都會(huì)帶來巨大的損失。即使與前幾代 Zen 相比,它們對(duì) Zen 4 的關(guān)注度也很高。我想知道 AMD 是否發(fā)現(xiàn)分頁訪問非常罕見,以至于可以接受更高的懲罰來換取更高的時(shí)鐘速度。
緩存和內(nèi)存性能
在過去的三十年里,計(jì)算能力一直在穩(wěn)步超過內(nèi)存性能。作為響應(yīng),CPU 使用越來越復(fù)雜的緩存設(shè)置來不斷提高性能。英特爾和 AMD 的高性能內(nèi)核已采用三級(jí)緩存方案。每個(gè)內(nèi)核都有一個(gè)小型 L1 緩存和一個(gè)中等大小的 L2 緩存,以使其免受 L3 延遲的影響。L3 緩存大小為數(shù)兆字節(jié),并在一組內(nèi)核之間共享。
一、2 MB Pages的延遲
讓我們從測(cè)試2 MB Pages的內(nèi)存延遲開始,從單核的角度了解緩存層次結(jié)構(gòu)。使用 2 MB Pages并不能代表大多數(shù)應(yīng)用程序?qū)⑷绾卧L問內(nèi)存,但它確實(shí)更有效地利用了 TLB 容量,并且讓我們分別查看緩存延遲和 TLB 損失。
Zen 4 的緩存與 Zen 3 非常相似。最大的變化是將 L2 大小翻倍至 1 MB,代價(jià)是 2 個(gè)周期的延遲。這反過來也將 L3 延遲推高了兩個(gè)周期。

英特爾的 Golden Cove 在所有緩存級(jí)別都有更高的延遲,盡管英特爾的核心私有緩存稍大一些。Golden Cove 的 L1D 有 5 個(gè)延遲周期,或者比 Zen 4 的 4 個(gè)周期多一個(gè)周期。一個(gè)周期可能看起來不多,但這代表著比 AMD 增加了 25% 的延遲,并且 L1D 緩存將位于所有內(nèi)存訪問的路徑中。L2 的延遲差異較小,其中 Intel 的 1280 KB 緩存與 AMD 的 1024 KB 的延遲為 15 個(gè)周期,為 14 個(gè)周期。L2 將看到比 L1 少得多的訪問,這里 1 個(gè)周期的差異是一個(gè)小得多的差異百分比明智。
在 L3 中,延遲存在巨大差異。英特爾不會(huì)在核心時(shí)鐘上運(yùn)行環(huán),而是有一個(gè)更長(zhǎng)的環(huán),為兩個(gè) E-Core 集群和一個(gè) iGPU 提供服務(wù)。Golden Cove 從其 L3 獲取數(shù)據(jù)的周期比 Zen 3 和 Zen 4 多近 20 個(gè)周期。因此,英特爾使用更大的 L2 來保護(hù)內(nèi)核免受 L3 延遲的影響,并賦予 Golden Cove 巨大的重新排序能力以隱藏 L3 延遲。

如果我們看看真正的延遲,Zen 4 的 5.7 GHz 非常高的時(shí)鐘速度就會(huì)發(fā)揮作用。我們看到 L1D 延遲極低,僅為 0.7 ns。L1D hitrate通常超過 80-90%,因此大多數(shù)內(nèi)存訪問將享受這種非常低的延遲。AMD 的新 L2 同樣令人印象深刻。Zen 4 的時(shí)鐘速度提高意味著其 L2 的延遲比前幾代 Zen 的 L2 略低。
最后,AMD 將 Zen 4 的 L3 延遲降至 8-9 ns 范圍。Zen 3 通過在 8 個(gè)內(nèi)核和 8 個(gè) L3 片上統(tǒng)一 L3 緩存,增加了單個(gè)內(nèi)核可訪問的 L3 數(shù)量,但這樣做會(huì)產(chǎn)生延遲損失。隨著 Zen 4 的時(shí)鐘速度,L3 延遲恢復(fù)到 Zen 2 的水平,但容量增加了一倍。Zen 4 的 L3 延遲也領(lǐng)先于 Zen 3 的 V-Cache 延遲。然而,Zen 3 的 V-Cache 變體在緩存容量方面擁有 3 倍的優(yōu)勢(shì)。
在內(nèi)存中,我們看到 1 GB test size的合理延遲為 73.35 ns。我們不會(huì)過多關(guān)注這一點(diǎn),因?yàn)閮?nèi)存延遲高度依賴于用戶與 CPU 配對(duì)的特定 DDR 設(shè)置,而且我們測(cè)試的分布式特性意味著即使平臺(tái)支持相同的內(nèi)存也無法匹配內(nèi)存設(shè)置類型。我們的 Ryzen 7950X 測(cè)試臺(tái)使用 DDR5-6000 設(shè)置,與使用 JEDEC DDR5-4800 的 i7-12700K Golden Cove 結(jié)果相比,它具有更好的內(nèi)存延遲。反過來,我的個(gè)人 Ryzen 3950X 使用 DDR4-3333 16-18-18-38 在 72.76 ns 時(shí)實(shí)現(xiàn)了稍低的延遲。在延遲方面,沒有什么不尋常的。
二、4 KB Pages的延遲
雖然 2 MB pages有助于有效地使用 TLB 容量,但大多數(shù)應(yīng)用程序使用 4 KB pages來減少碎片和浪費(fèi)的內(nèi)存。例如,如果您正在緩沖大小小于 2 KB 的數(shù)據(jù)包,或者緩存一個(gè)小文件,則將內(nèi)存映射為 2 MB 塊可能會(huì)非常浪費(fèi)。但是以 4 KB 的粒度跟蹤地址轉(zhuǎn)換會(huì)給 TLB 容量帶來更大的壓力。為了提高性能,Zen 4 將 L1 DTLB 的大小從 64 個(gè)條目增加到 72 個(gè)。L2 TLB 的條目數(shù)從 2048 個(gè)增加到 3072 個(gè)。因此 Zen 4 能夠緩存 288 KB 內(nèi)存的地址轉(zhuǎn)換而沒有延遲開銷,或者12 MB,有輕微的 7-8 個(gè)周期損失。

與 Zen 3 和 Zen 2 一樣,英特爾的 Golden Cove 也有一個(gè) 2048 入口的 L2 TLB。因此,Zen 4 在更大的測(cè)試規(guī)模下具有更大的延遲優(yōu)勢(shì)。如果我們使用 4 KB pages訪問 Zen 4、Zen 3 和 Golden Cove 上的 L3 緩存但不超過 L2 TLB 容量,我們會(huì)看到延遲分別約為 9.47 ns、10.44 ns 和 13.72 ns。Zen 4 和 Zen 3 都已經(jīng)大大領(lǐng)先于 Golden Cove,但我們主要在這里看到了原始 L3 延遲的差異。

在 12 MB 或更大的測(cè)試大小時(shí),我們開始看到 Zen 4 更大的 L2 TLB 開始發(fā)揮作用。Zen 3 和 Golden Cove 都必須開始進(jìn)行page walks,因?yàn)樵L問會(huì)溢出 L2 TLB,這可能會(huì)導(dǎo)致多達(dá) 4 次額外的內(nèi)存訪問來計(jì)算物理地址。這三種架構(gòu)在它們的page walkers中都有單獨(dú)的page directory caches,這些緩存在更高級(jí)別的分頁結(jié)構(gòu)中緩存條目,因此它們可能不會(huì)在幾乎不會(huì)溢出 L2 TLB 的測(cè)試大小下進(jìn)行太多額外的訪問。
盡管如此,即使是快速的page walk 也比直接從 L2 TLB 中獲取翻譯更糟糕,因此區(qū)別很明顯。Zen 3 的 L3 延遲在 12 MB 測(cè)試大小時(shí)上升到 12 ns 以上,而 Zen 4 保持在略低于 10 ns。Golden Cove 遭受的損失更大,延遲超過 15 ns,盡管我們?nèi)匀辉?12700K 的 25 MB L3 容量范圍內(nèi)。
因此,AMD 在改善緩存訪問延遲方面做得非常出色,而標(biāo)題周期計(jì)數(shù)數(shù)字并未完全捕捉到這一點(diǎn)。Zen 4 更高的時(shí)鐘速度意味著 L1 和 L3 緩存的實(shí)際延遲得到了改善,而 L2 緩存的容量翻了一番,延遲回歸極小(7950X 為 2.44 ns,5950X 為 2.4 ns)。通過減少典型應(yīng)用程序的虛擬到物理地址轉(zhuǎn)換開銷,改進(jìn)的 TLB 容量進(jìn)一步改善了實(shí)踐中的延遲。所有這些結(jié)合在一起,使 Zen 4 在所有緩存級(jí)別上都比 Golden Cove 具有顯著的延遲優(yōu)勢(shì)。
帶寬,單核
雖然內(nèi)存訪問延遲很重要,但帶寬也很重要。矢量化代碼可能特別需要內(nèi)存帶寬。盡管增加了對(duì) AVX-512 的支持,AMD 并沒有對(duì)核心私有緩存進(jìn)行重大調(diào)整。每個(gè)周期的負(fù)載帶寬與 Zen 3 和 Zen 2 相似。Zen 4 更大的 L2 是一個(gè)受歡迎的補(bǔ)充,因?yàn)樗鼞?yīng)該減少對(duì)共享 L3 的帶寬需求。但 L1 和 L2 帶寬的改進(jìn)歸結(jié)為 Zen 4 的時(shí)鐘速度提高。
Zen 4 的單核 L3 帶寬有所改善,平均每周期 27 字節(jié),而 Zen 3 的每周期 24 字節(jié)。這非常接近從每個(gè)內(nèi)核到 L3 的接口的理論帶寬。AMD 可能已經(jīng)增加了 L2 和 L3 之間的隊(duì)列大小,以至于它幾乎大到足以完全吸收 L3 延遲。

使用了不同的內(nèi)存設(shè)置,所以不要比較 DRAM 帶寬。TGL數(shù)據(jù)由cha0s提供,Golden Cove AVX-512數(shù)據(jù)來自CapFrameX
英特爾非常重視矢量性能,這表明了這一點(diǎn)。Golden Cove 的核心私有緩存可以提供出色的帶寬,L1D 每個(gè)周期處理三個(gè) 256 位負(fù)載,或每個(gè)周期兩個(gè) 512 位負(fù)載。后者僅適用于 AVX-512,但即使使用 AVX,Golden Cove 也擁有顯著的 L1D 帶寬優(yōu)勢(shì)。這一優(yōu)勢(shì)在 L2 中仍然存在,英特爾在 L1D 和 L2 之間有一個(gè)每周期 64 字節(jié)的接口。使用 AVX-512,Golden Cove 在 L2 大小的區(qū)域中比 Zen 4 具有驚人的 40% 帶寬優(yōu)勢(shì)。AMD 無法達(dá)到與 AVX 相同的性能水平,因?yàn)長(zhǎng)1D 沒有足夠的端口來處理來自 L2 的填充請(qǐng)求并同時(shí)向內(nèi)核提供全帶寬。盡管如此,Golden Cove 仍然可以僅用 AVX 擊敗 Zen 4。
L3 的情況發(fā)生了逆轉(zhuǎn),AMD 出色的 L3 設(shè)計(jì)可以提供幾乎與 L2 一樣多的帶寬。相比之下,英特爾的帶寬下降了。Golden Cove 從 L3 平均每個(gè)周期僅 20 字節(jié),沒有來自其他內(nèi)核的爭(zhēng)用。
當(dāng)測(cè)試大小溢出到 DRAM 中時(shí),Zen 4 保持非常高的每核帶寬。這表明每個(gè) Zen 4 內(nèi)核都能夠跟蹤大量未決的 L3 misses,或者更具體地說,L2 misses。AMD 僅使用從 L2 驅(qū)逐的行(因此稱為“victim cache”)填充其 L3 緩存,這意味著它不會(huì)預(yù)取到 L3。這使得 Zen 4 的 L2 成為能夠生成預(yù)取請(qǐng)求的最后一個(gè)緩存級(jí)別。通過能夠根據(jù)從 L1 misses中看到的訪問模式生成對(duì) L3 及更高級(jí)別的請(qǐng)求,L2 可以在其級(jí)別上利用更多可用的內(nèi)存級(jí)別并行性,而不受 L1 misses生成的內(nèi)存級(jí)別并行性的限制。
我們甚至可以使用 Little 定律估計(jì) L2 misses隊(duì)列的大?。?/p>

顯然,這個(gè)計(jì)算并不完美,因?yàn)槲覀儨y(cè)試了 4 KB pages到非常大的測(cè)試大小,并且沒有嘗試估計(jì)pages walk會(huì)導(dǎo)致對(duì) L3 及更高級(jí)別的請(qǐng)求的頻率。但它確實(shí)表明 Zen 4 在 L2 有更積極的預(yù)取,在 L2 和 L3 之間有更深的隊(duì)列,或兩者兼而有之。
多線程帶寬
加載所有線程后,Zen 4 實(shí)現(xiàn)了非常高的總帶寬。這主要是因?yàn)樗軌虮3殖^ 4.8 GHz 的非常高的時(shí)鐘速度,從實(shí)現(xiàn)的 L1D 帶寬來看。由于 Zen 4 緩存層次結(jié)構(gòu)的所有級(jí)別都以核心時(shí)鐘運(yùn)行,或者至少以集群中最快核心的速度運(yùn)行,7950X 還享有增加的 L2 和 L3 帶寬,即使每個(gè)緩存級(jí)別之間的總線寬度沒有在禪宗世代之間發(fā)生了變化。

英特爾的 Alder Lake 與前幾代 AMD 16 核臺(tái)式機(jī) CPU 具有競(jìng)爭(zhēng)力。AMD 有更多的“大”核心,但 Golden Cove 有更寬的總線連接到它的 L1D 和 L2 緩存。但是 Zen 4 更高的時(shí)鐘改變了這一點(diǎn)。如果 AVX-512 正在運(yùn)行,Alder Lake 只能匹配 AMD 的 L1D 帶寬,但該功能當(dāng)然沒有啟用。無論有沒有 AVX-512,Alder Lake 都無法匹敵 Zen 4 的 L2 帶寬。
通過將 L3 拆分為集群,AMD 犧牲了一些緩存容量效率,使帶寬和延遲問題更容易解決。在過去的幾代 Zen 中,AMD 在 L3 性能上比 Intel 擁有了巨大的優(yōu)勢(shì)。Zen 4 進(jìn)一步擴(kuò)展了這一點(diǎn)。
內(nèi)存帶寬
Zen 4 也遷移到 DDR5,這極大地增加了內(nèi)存子系統(tǒng)的理論帶寬。我們看到使用配備 DDR4-3600 的 5950X 的讀取帶寬略高于 50 GB/s,或略高于理論 DRAM 帶寬的 88%。我們配備 DDR5-6000 的 7950X 平臺(tái)在相同的 3 GB 測(cè)試大小下實(shí)現(xiàn)了 72.85 GB/s。一方面,內(nèi)存帶寬顯著增加了 43%。另一方面,Zen 4 實(shí)際上發(fā)現(xiàn)內(nèi)存帶寬效率有所下降。128 位 DDR5-6000 總線理論上可以達(dá)到 96 GB/s,而我們只達(dá)到了 76%。
一種理論是 Zen 4 的 DRAM 帶寬受到內(nèi)存控制器和結(jié)構(gòu)之間的鏈接的限制。AMD 的圖表顯示,鏈路在兩個(gè)方向上每個(gè)周期寬 32 字節(jié)。

然而,這不太可能。我們測(cè)試中的 FCLK 設(shè)置為 2000 MHz。在 2000 MHz 下,每個(gè)周期 32 字節(jié)可以達(dá)到 64 GB/s,這遠(yuǎn)低于我們能夠達(dá)到的水平。UCLK 以 3000 MHz 運(yùn)行,或 DDR 傳輸速率的一半。3000 MHz 時(shí)每個(gè)周期 32 字節(jié)意味著可以在任一方向上實(shí)現(xiàn)完整的 DDR 帶寬。這并不排除 Infinity Fabric 和內(nèi)存控制器之間鏈路的帶寬限制,但它確實(shí)表明與結(jié)構(gòu)的鏈路比 AMD 圖表所暗示的要寬。
另一個(gè)相關(guān)理論是,如果我們以 1:1 的比例混合讀取和寫入,可以提高帶寬,因?yàn)殒溌房梢栽诿總€(gè)方向上傳輸 32 個(gè)字節(jié)。然而,混合讀取和寫入在 DRAM 級(jí)別引入了不同的問題。與高速緩存鏈接不同,DRAM 總線不是雙向的,必須在讀取和寫入模式之間顯式切換。這些開關(guān)不是空閑的,并且會(huì)強(qiáng)制內(nèi)存總線空閑多個(gè)周期,從而減少實(shí)現(xiàn)的帶寬。因此,當(dāng)使用混合讀取和寫入的訪問模式時(shí),我們沒有看到顯著的帶寬增加。

使用各種訪問模式和 128 位 DDR5-6000 設(shè)置實(shí)現(xiàn)的內(nèi)存帶寬。“添加”和“復(fù)制”測(cè)試使用 1:1 的讀取和寫入混合。
使用讀-修改-寫訪問模式,我們看到帶寬增加了 1%,這幾乎不值得討論。寫入模式實(shí)際上也是讀取和寫入的 1:1 混合,因?yàn)槊總€(gè)寫入操作(特殊情況除外)也需要讀取緩存線。這是因?yàn)橹噶羁赡苤恍薷牧瞬糠志彺婢€,而 CPU 需要將寫入與現(xiàn)有緩存線內(nèi)容合并。這種讀取被稱為“所有權(quán)讀取”或 RFO,因?yàn)檫@意味著讀取核心擁有緩存線,并保證沒有其他人可以寫入它。如果我們將 36.86 GB/s 的寫入帶寬乘以 2 來考慮這一點(diǎn),我們得到 73.72 GB/s,這與純讀取帶寬并沒有太大區(qū)別。
其他訪問模式出現(xiàn)顯著下降,包括使用 REP MOVSB 的復(fù)制模式。該測(cè)試使用微編碼字符串復(fù)制指令,該指令準(zhǔn)確告訴 CPU 它需要移動(dòng)多少數(shù)據(jù),從而避免 RFO。因此,它還具有 1:1 的讀取和寫入混合。
我們確實(shí)看到了一些證據(jù)表明寫入帶寬可能受到 CCD 和 IO 芯片之間的鏈接的限制。AMD 的圖表顯示這些鏈接每個(gè)周期寬 16 個(gè)字節(jié)。在兩個(gè) CCD 上,在 2000 MHz FCLK 下的速度可達(dá) 64 GB/s。通過避免 RFO 的特殊寫入指令,我們可以非常接近 64 GB/s,但不會(huì)更高。REP STOSB 指令預(yù)先告訴 CPU 將多少數(shù)據(jù)設(shè)置為特定值,讓它在知道整個(gè)緩存行將被覆蓋時(shí)避免 RFO。非臨時(shí)寫入(使用 MOVNTPS)使用寫入組合內(nèi)存協(xié)議,該協(xié)議也避免了 RFO,并繞過緩存。兩種方法都達(dá)到理論 CCD 到 IO 芯片寫入帶寬的 1% 以內(nèi)。在大多數(shù)應(yīng)用程序中,這不太可能成為限制,其中內(nèi)存讀取遠(yuǎn)遠(yuǎn)超過內(nèi)存寫入。
就 Zen 4 的讀取內(nèi)存帶寬而言,不太可能存在結(jié)構(gòu)帶寬限制。取而代之的是,新的 DDR5 內(nèi)存控制器在提取帶寬的最后一點(diǎn)方面似乎不如舊的 DDR4 有效。也許它也不是調(diào)度請(qǐng)求,而是更多地進(jìn)入次要時(shí)間。但總體而言,得益于 DDR5 內(nèi)存,Zen 4 與前幾代 Zen 相比具有顯著的帶寬優(yōu)勢(shì)。AMD 的 16 核臺(tái)式機(jī) Ryzen 芯片可能會(huì)受到內(nèi)存帶寬的限制,如果給定線程良好的矢量化負(fù)載。即使有合理的緩存命中率,16 核也可以消耗大量帶寬,因此 DDR5 的帶寬提升值得贊賞。甚至 DDR5 帶寬也不足以支持 16 個(gè)內(nèi)核,因此 AMD 繼續(xù)依靠有效的緩存來保持線程良好的工作負(fù)載的性能優(yōu)勢(shì)。
結(jié)論
顧名思義,Zen 4 是 AMD Zen 架構(gòu)系列的第四款。與 Zen 2 一樣,Zen 4 將架構(gòu)更改與改進(jìn)的制程節(jié)點(diǎn)相結(jié)合,以提供代際性能提升。同時(shí),AMD 在嘗試過渡到新工藝節(jié)點(diǎn)時(shí)通過避免更劇烈的變化來降低風(fēng)險(xiǎn)。因此,在很多領(lǐng)域看到類似的變化也就不足為奇了,特別是在緩存和寄存器文件方面,提高密度使得更大的容量變得可行。


但是,Zen 4 確實(shí)跳過了某些領(lǐng)域,尤其是在涉及向量執(zhí)行的方面。與 Zen 3 甚至 Zen 2 相比,Zen 4 并沒有增加原生向量執(zhí)行寬度,也沒有提升最大 L1D 帶寬。Zen 2 還對(duì) Zen 1 進(jìn)行了較小的執(zhí)行和調(diào)度更改,而 Zen 4 保留了 Zen 3 的配置。結(jié)果是聲稱 IPC 增加了 13%。與前兩代禪宗相比,這似乎令人印象深刻。但 13% 與Ivy Bridge 和 Haswell之間的增幅相當(dāng),Anandtech 將其定為 11.2%。我們還必須在上下文中考慮每時(shí)鐘性能隨時(shí)鐘速度的增加。

性能提升絕不僅僅是 IPC 的提升,因?yàn)闀r(shí)鐘速度也很重要。性能通常隨著時(shí)鐘速度的增加幾乎呈線性增長(zhǎng),前提是您的緩存性能足夠好,可以避免 DRAM 瓶頸。如果您可以在將某些結(jié)構(gòu)大小增加 5% 或?qū)?nèi)核時(shí)鐘頻率提高 5% 之間做出選擇,則幾乎可以保證通過選擇后一個(gè)選項(xiàng)獲得更高的整體性能。AMD 的工程師可能避免加強(qiáng)某些結(jié)構(gòu),例如調(diào)度程序和存儲(chǔ)隊(duì)列,而是支持讓內(nèi)核時(shí)鐘頻率更高。Zen 4 的時(shí)鐘頻率確實(shí)更高,幅度很大。最終結(jié)果是整體性能改進(jìn)應(yīng)該與我們從前幾代 Zen 獲得的一致。Zen 4 將這種時(shí)鐘速度優(yōu)勢(shì)帶到了多線程工作負(fù)載中。每一代 Zen 都提供了強(qiáng)大的全核性能,Zen 4 也不例外。英特爾還對(duì) Raptor Lake 采取了類似的策略,避免了重大的架構(gòu)變化。取而代之的是,使用 Thermal Velocity Boost 將最大時(shí)鐘推至 5.8 GHz,或使用常規(guī) Turbo Boost 3.0 將最大時(shí)鐘推至 5.7 GHz。
在大量工作負(fù)載中平均 IPC 也掩蓋了 Zen 4 的 AVX-512 優(yōu)勢(shì)。使用 AVX-512 的程序可以用更少的指令完成相同數(shù)量的工作,從而實(shí)現(xiàn)更低的 IPC,但更高的每時(shí)鐘性能。我假設(shè)當(dāng) AMD 說 IPC 時(shí),它們的意思是每時(shí)鐘的性能,而不是每時(shí)鐘的具體指令。在可以利用 AVX-512 的特定工作負(fù)載中,我預(yù)計(jì) Zen 4 比 Zen 3 有很大的優(yōu)勢(shì)。如果使用 512 位向量,即使調(diào)度程序隊(duì)列的大小保持不變,Zen 4 也會(huì)有更有效的調(diào)度能力同樣,因?yàn)槊總€(gè)調(diào)度程序條目將跟蹤 512 位的工作。即使不使用更長(zhǎng)的向量,AVX-512 也提供了新的指令,再次讓 CPU 用更少的指令完成相同數(shù)量的工作。
Zen 4 的其他變化同樣側(cè)重于更好地利用現(xiàn)有的執(zhí)行能力。從 Zen 2 到 Zen 4,每個(gè)周期的原始執(zhí)行吞吐量并沒有真正改變,緩存帶寬也沒有增加。這是因?yàn)?AMD 在前幾代產(chǎn)品中已經(jīng)擁有大量的原始吞吐量,并且穩(wěn)態(tài)執(zhí)行吞吐量并不是大多數(shù)應(yīng)用程序的瓶頸。

執(zhí)行單元容量不是 libx264 的瓶頸,即使在峰值時(shí)(FP 調(diào)度程序填滿的停頓很少),但 ROB 和整數(shù)寄存器確實(shí)填滿并導(dǎo)致后端停頓
因此,Zen 4 提高了重新排序能力,以幫助吸收對(duì)執(zhí)行單元的需求激增。改進(jìn)的分支預(yù)測(cè)通過減少工作浪費(fèi),有助于更好地利用重新排序容量和執(zhí)行單元吞吐量。Zen 4 還嘗試通過切換到 DDR5 來更好地為執(zhí)行單元提供服務(wù),這提供了比 DDR4 更大的帶寬提升。同時(shí),AMD 賦予了每個(gè)核心更多的內(nèi)存級(jí)并行能力。單核可實(shí)現(xiàn)的 DRAM 帶寬量增加到超過 57 GB/s,表明非常深的緩沖區(qū)可以跟蹤未決緩存misses。這些深緩沖區(qū)有助于吸收對(duì)高速緩存和內(nèi)存帶寬的需求峰值。另一方面,Zen 4 更大的 L2 TLB 和 L2 緩存有助于減少訪問內(nèi)存的指令的平均延遲。英特爾也采取了類似的策略Raptor Lake,其中 P 核 L2 大小從 1.25 MB 增加到 2 MB,代價(jià)是僅僅一個(gè)延遲周期。
Zen 4 還旨在提高前端寬度利用率,而不是讓一切變得更寬。Zen 3 已經(jīng)有一個(gè)非??焖俚姆种ьA(yù)測(cè)器,但 Zen 4 更進(jìn)一步。具有更高命中率的更大 L1 BTB 意味著前端在執(zhí)行分支后空閑的周期更少,從而提高了前端寬度利用率。與前幾代 Zen 和許多英特爾架構(gòu)一樣,Zen 4 在renamer上最窄,仍然是 6 寬。我猜 AMD 發(fā)現(xiàn)他們可以通過增加時(shí)鐘而不是增加核心寬度來提高性能。重命名器可能是一個(gè)對(duì)時(shí)間非常敏感的電路。進(jìn)入的每條指令都可能需要從寄存器別名表中讀取兩次或多次,并且必須立即反映對(duì)寄存器映射的修改,以便稍后進(jìn)入同一個(gè) 6 寬組內(nèi)的指令。

您如何真正衡量寬度利用率?
考慮到所有這些,我想知道 AMD 可以從某個(gè)核心寬度和一組執(zhí)行資源中擠出多少。與競(jìng)爭(zhēng)對(duì)手的英特爾內(nèi)核相比,Zen 4 內(nèi)核的某些區(qū)域看起來非常輕巧。例如,向量加載和存儲(chǔ)的 L1D 帶寬只有英特爾使用 AVX-512 可以實(shí)現(xiàn)的一半。即使使用 AVX 限制為 256 位訪問,Golden Cove 仍然可以實(shí)現(xiàn)比 Zen 4 更多的每個(gè)周期的帶寬。當(dāng)然,英特爾無法將 16 個(gè) Golden Cove 內(nèi)核封裝到一個(gè)芯片中并在高時(shí)鐘下運(yùn)行它們。此外,英特爾設(shè)法在 Conroe 和 Skylake 之間以荒謬的數(shù)量增加了 IPC,盡管這兩種架構(gòu)(以及介于兩者之間的所有架構(gòu))都是 4 寬。我期待看到 AMD 和英特爾在后續(xù)將帶來怎樣的產(chǎn)品。
審核編輯:郭婷
-
amd
+關(guān)注
關(guān)注
25文章
5690瀏覽量
140045 -
英特爾
+關(guān)注
關(guān)注
61文章
10303瀏覽量
180574
原文標(biāo)題:萬字詳解AMD ZEN 4架構(gòu)
文章出處:【微信號(hào):ZYNQ,微信公眾號(hào):ZYNQ】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
40年首次,AMD Zen 6架構(gòu)將采用Intel FRED技術(shù)
深度剖析PN512:全NFC論壇兼容前端芯片的卓越性能與應(yīng)用
NXP PN512:全方位NFC前端芯片的深度解析與應(yīng)用指南
PN512:高性能NFC前端芯片的深度解析與應(yīng)用指南
深度剖析PN512:高性能NFC前端芯片的全方位解讀
基于蜂鳥E203架構(gòu)的指令集K擴(kuò)展
德州儀器TDA4VE/TDA4AL/TDA4VL Jacinto?處理器技術(shù)解析
江波龍企業(yè)級(jí)DDR5 RDIMM率先完成AMD Threadripper PRO 9000WX系列兼容性認(rèn)證
瑞薩365 深度解讀
ARM Mali GPU 深度解讀
Arm 公司面向 PC 市場(chǎng)的 ?Arm Niva? 深度解讀
Arm 公司面向移動(dòng)端市場(chǎng)的 ?Arm Lumex? 深度解讀
Arm 公司面向汽車市場(chǎng)的 ?Arm Zena? 深度解讀
一文帶你了解KaihongOS標(biāo)準(zhǔn)系統(tǒng)的技術(shù)架構(gòu)、子系統(tǒng)、系統(tǒng)應(yīng)用、典型特性以及支持的設(shè)備類型
服務(wù)器級(jí)芯片進(jìn)軍嵌入式市場(chǎng),AMD這顆處理器駕馭AI洪流
AMD ZEN 4架構(gòu)的前端內(nèi)存子系統(tǒng)及AVX-512的深度解讀
評(píng)論