我們在文章《萬字詳解AMD ZEN 4架構(gòu)》中深入介紹了 Zen 4 的核心架構(gòu)。而在本文中,我們將專注于我們沒有設(shè)法做到的任何事情。其中一些細(xì)節(jié)可能特定于我們擁有的特定 CPU 樣本,其中許多細(xì)節(jié)不會對應(yīng)用程序性能產(chǎn)生重大影響。
Boost clock行為
AMD宣傳 Ryzen 7950X 的加速時鐘為 5.7 GHz。我們聽說 CPU 的最大頻率應(yīng)該是 5.85 GHz,但我們無法達(dá)到該時鐘速度。在這里,我們將展示測試數(shù)據(jù)并討論 7950X 設(shè)計(jì)的其他方面。請記住,此處看到的行為可能是特定于樣本的。
首先,我們一一檢查了 7950X 的所有內(nèi)核,并確定了它們提升到的時鐘速度。為了測量時鐘速度,我們測量了寄存器到寄存器整數(shù)加法指令的延遲。與之前的 16 核 AMD 臺式機(jī)部件一樣,并非所有內(nèi)核都會提升到 CPU 的最大時鐘。在我們的 7950X 樣本上,我們看到內(nèi)核 0、3 和 4 的最高時鐘頻率。所有這三個內(nèi)核都位于第一個 CCD 上。
注意——沒有從 0 開始軸以使時鐘速度差異更明顯。
第二個 CCD 上的所有內(nèi)核的時鐘頻率都低于第一個 CCD 上的內(nèi)核。它們的范圍從 5.54 GHz 到 5.51 GHz,比我們在第一個 CCD 上看到的低 100-200 MHz。奇怪的是,前幾代人表現(xiàn)出完全相同的模式。
Cheese 的 5950X 在核心 1 和 4 上達(dá)到了最高時鐘。兩者都位于第一個 CCD 上。我的 3950X 在核心 4 和 5 上的時鐘頻率最高。兩者也在第一個 CCD 上。這是一個奇怪的模式。也許 AMD 只是binning一個 CCD 以達(dá)到 16 個核心部件的最大升壓時鐘。
我們的 Zen 4 和 Zen 3 芯片的時鐘速度變化也小于我們的 Zen 2 芯片。
如果您的操作系統(tǒng)的調(diào)度程序沒有優(yōu)先安排最佳內(nèi)核上的低線程任務(wù),則 3950X 的性能可能會出現(xiàn)相當(dāng)大的變化。Ryzen 5950X 和 7950X 在這方面要好得多。雖然時鐘速度差異是可以測量的,但感受 3-4% 的性能差異要比感受 7-8% 的性能差異要困難得多。
持續(xù)時間短的Boost行為
我還想知道 Zen 4 是否會暫時達(dá)到更高的時鐘速度,然后在之前測試的測量間隔內(nèi)回落。該測試通常需要幾秒鐘來確定時鐘速度,以便為任何測試的 CPU 提供合理的時間來斜坡時鐘。為了查看時鐘是否以非常精細(xì)的粒度變化,我使用了時鐘斜坡測試,每個樣本有更多的迭代。該測試使用 RDTSC 以優(yōu)于毫秒的精度采集樣本。增加每個樣本的迭代次數(shù)可以讓測試覆蓋更長的持續(xù)時間以捕獲快速的時鐘速度變化,但不會創(chuàng)建一個巨大的厄運(yùn)電子表格。我還在每個核心上運(yùn)行了測試。結(jié)果在同一個核心上是一致的,但在不同核心上卻不一致。
讓我們一次處理一個 CCD,因?yàn)橛泻芏鄶?shù)據(jù)。根據(jù)內(nèi)核的不同,我們在 700 毫秒的時間窗口內(nèi)看到了略高于 5.71 GHz 的時鐘。然而,結(jié)果千差萬別。一些內(nèi)核,如內(nèi)核 0 和 2,在不到 50 毫秒的時間內(nèi)提升至 5.74 GHz,然后降至 5.71 GHz。Core 2 保持 5.74 GHz 將近半秒,然后表現(xiàn)出不穩(wěn)定的行為。
測試還使用整數(shù)加法延遲來測量時鐘速度。
第二個 CCD 顯示出相似的特征。然而,該 CCD 上的核心實(shí)際上開始接近 5.6 GHz。他們在很短的時間間隔內(nèi)保持該速度,然后稍微降低速度。
這是一個有趣的行為,盡管與大多數(shù)用戶無關(guān)。短期和長期升壓時鐘的差異很少超過 50 MHz。如果您回到過去并運(yùn)行 266 MHz Pentium II,那么 50 MHz 就很重要了。今天,50 MHz 的差異小得可笑。在 Zen 4 運(yùn)行的時鐘速度下,50 MHz 僅占不到 1% 的差異。該測試的最大收獲是 Zen 4 在非常小的時間片內(nèi)調(diào)整時鐘速度,用戶不應(yīng)期望時鐘速度非常穩(wěn)定。
Not So Infinite Fabric?
與 Zen 2 和 Zen 3 一樣,每個 Zen 4 核心復(fù)合體都有一個 32B/cycle
的結(jié)構(gòu)讀取鏈接和一個 16B/cycle的寫入鏈接。在上一篇文章中,我們注意到 DDR5-6000 的寫入帶寬可能受到來自兩個 CCD 的 16B/周期鏈接的限制。我們從一個 CCD 看到了類似的讀取帶寬限制。我們使用 3 GB 測試大小和縮放線程數(shù)運(yùn)行內(nèi)存帶寬測試以命中所有物理內(nèi)核。CCX 和 CCD 一個接一個地裝滿。在 3950X 上,這意味著首先在 CCD 上填充兩個 CCX。從結(jié)果中,我們可以清楚地看到單個 7950X CCD 受到其與結(jié)構(gòu)的 32B/cycle鏈接的限制。
在 Zen 2 和 Zen 3 上,Infinity Fabric 互連通常可以在 DDR 時鐘或 DDR 傳輸速率的一半下運(yùn)行。因此,單個 CCD 可用的結(jié)構(gòu)帶寬不是問題。在匹配的時鐘下,單個 32 字節(jié)/周期或 256 位鏈路提供與 16 字節(jié)/周期或 128 位 DDR 設(shè)置相同的理論帶寬。當(dāng)?shù)诙€ CCD 激活時,Zen 2 確實(shí)看到測得的內(nèi)存帶寬略有增加,但差異非常小。對于 Zen 4,這提出了一個有趣的問題,即快速 DDR5 是否值得用于具有單個 CCD 的設(shè)計(jì)。技嘉黑客泄露的 Genoa(Zen 4 服務(wù)器變體)處理器編程參考手冊建議每個 CCD 可以有兩個結(jié)構(gòu)鏈接。根據(jù)它們的配置方式,將快速 DDR5 與單個 CCD 部件配對可能不值得,尤其是當(dāng)主要目標(biāo)是提高內(nèi)存帶寬受限應(yīng)用程序的性能時。
在 Ryzen 3950X 上,每個 CCD 的較窄寫入鏈路意味著單個 CCD 寫入帶寬限制可能會在人為測試下出現(xiàn)。但是,在寫入時,兩個 CCD 加在一起幾乎可以使 DDR4 設(shè)置飽和。正如我們 Zen 4 報(bào)道的第 2 部分所述,7950X 的寫入帶寬似乎受到從 CCD 到 Infinity Fabric 互連的 16 字節(jié)/周期鏈接的限制。如果我們用非時間寫入重復(fù)上面的測試,我們可以清楚地看到當(dāng)單個 CCD 處于活動狀態(tài)時類似的帶寬限制。
奇怪的是,這兩個測試以及兩個被測試的 CPU 都表明我們可以通過不加載所有內(nèi)核來實(shí)現(xiàn)更高的帶寬。
更少的線程,更多的帶寬?
當(dāng)我們測試內(nèi)存帶寬時,每個線程都有自己的數(shù)組,所有線程的總數(shù)據(jù)加起來就是測試大小。該策略可防止內(nèi)存控制器機(jī)會性地組合來自不同線程的訪問。然后,我們生成與硬件線程一樣多的軟件線程。帶寬如何隨著線程數(shù)的增加而擴(kuò)展是一個有趣的話題,但我并不總是有時間和精力來解決這個問題。正如您在上面看到的,這個案例非常值得一試。
以 2000 MHz FCLK 運(yùn)行。內(nèi)存帶寬兔子洞有多深?
通過進(jìn)一步測試,我獲得了最高的內(nèi)存帶寬和四個線程,固定到每個 CCD 的兩個內(nèi)核。進(jìn)一步調(diào)查顯示 3950X 有類似的行為。我還檢查了 CCX 到 Infinity Fabric 請求的性能計(jì)數(shù)器、內(nèi)存帶寬和 L3 命中率,以確保寫入組合或緩存惡作劇沒有發(fā)揮作用。
32B/周期結(jié)構(gòu)鏈路帶寬等于可用的 DDR4 帶寬
對此行為的一種解釋是 32 線程工作負(fù)載對內(nèi)存控制器的要求比 4 線程工作負(fù)載更苛刻。如果使訪問模式更加分散,那么公開更多的并行性并不是一件好事。內(nèi)存控制器將更難嘗試安排訪問以最大化頁面命中率,同時又不會停止任何訪問足夠長的時間以使某些隊(duì)列備份。
我們還可以根據(jù)內(nèi)存控制器如何有效地利用理論帶寬來查看相同的數(shù)據(jù)。顯然,越高越好,即使我們從未期望達(dá)到理論帶寬。頁未命中、讀寫周轉(zhuǎn)和刷新將導(dǎo)致內(nèi)存總線周期丟失,并且沒有辦法避免這種情況。
每個 CCD 有兩個線程,帶寬效率相當(dāng)不錯。81%的理論一點(diǎn)都不差。AMD 較舊的 DDR4 控制器在利用可用帶寬方面仍然更好:
但這并不能說明全部。如果我們看看其他訪問模式,Zen 4 在最大可實(shí)現(xiàn)帶寬之外的領(lǐng)域也取得了進(jìn)步。Zen 2 不知道如何在 REP STOSB 情況下避免讀取所有權(quán)訪問,但 Zen 4 知道。Zen 4 的 DDR5 控制器還可以更好地處理讀取-修改-寫入訪問模式,這可能表明它在混合讀取和寫入時受到的損失較小。通過純 AVX 寫入和加載所有線程,Zen 4 還實(shí)現(xiàn)了更好的帶寬效率。從絕對意義上講,Zen 4 的 DDR5 控制器還提供比舊款 DDR4 控制器高得多的帶寬。
FCLK效應(yīng)?
我們還使用較低的 1.6 GHz Infinity Fabric 時鐘或 FCLK 進(jìn)行了測試。結(jié)果進(jìn)一步證明寫入帶寬受 Infinity Fabric 帶寬限制。具體來說,我們看到寫入帶寬急劇減少。如果我們受到每周期兩個 16 字節(jié) CCD 到 IO 芯片鏈接的限制,這種減少與我們期望看到的帶寬損失非常吻合。
讀取帶寬顯然不受 Infinity Fabric 帶寬的限制。我們在 FCLK 的每個周期遠(yuǎn)遠(yuǎn)超過 32 個字節(jié)。此外,帶寬的下降并不對應(yīng)于 FCLK 的下降。具體來說,20% 的 FCLK 降低只會使最大讀取帶寬降低 5.8%。然而,有趣的是,我們在較低的 FCLK 下讀取帶寬出現(xiàn)了可測量的下降。
集成顯卡
AMD 的桌面 Zen 4 平臺 Raphael 是最近內(nèi)存中第一個集成 GPU 的高性能 AMD 平臺。在前幾代產(chǎn)品中,AMD 的產(chǎn)品線是分裂的。桌面芯片提供了最高性能的 CPU 配置,比移動芯片具有更多的緩存、更多的內(nèi)核和更高的時鐘。另一方面,“APU”提供了一個相對強(qiáng)大的集成 GPU,能夠進(jìn)行輕度游戲。他們還繼續(xù)使用單片芯片來節(jié)省電力,即使他們的臺式機(jī)同行轉(zhuǎn)而使用小芯片設(shè)置以以合理的成本提供更多的核心數(shù)。
但是 Zen 4 的 IO die 轉(zhuǎn)向了 TSMC 6 nm 工藝,與之前 IO die 使用的 GlobalFoundries 12nm 工藝相比,它提供了很大的密度提升。IO 接口通常不能隨著工藝節(jié)點(diǎn)的縮小而很好地?cái)U(kuò)展,但以前的 IO die的芯片照片顯示,IO 控制器邏輯和支持 SRAM 占用了大量區(qū)域。這些塊可能確實(shí)可以通過縮小芯片來很好地?cái)U(kuò)展,從而為 AMD 提供添加小型 iGPU 的空間。
Raphael 的集成 GPU 沒有 AMD APU 的性能雄心,并且似乎打算在沒有可用的專用 GPU 時驅(qū)動顯示器。它采用 AMD 的現(xiàn)代 RDNA2 圖形架構(gòu),但僅使用一個 WGP 以盡可能小的配置實(shí)現(xiàn)它。由于我們一直在談?wù)搩?nèi)存和結(jié)構(gòu)帶寬,讓我們從帶寬測試開始。畢竟,Raphael iGPU 確實(shí)為我們提供了一種額外的方式來使用 DDR5 控制器。
不幸的是,測試帶寬并沒有告訴我們?nèi)魏慰赡艿慕Y(jié)構(gòu)限制。我們從 DRAM 大小的區(qū)域獲得超過 60 GB/s 的速度。來自另一個 RDNA2 實(shí)施的數(shù)據(jù)表明,無論如何,單個 WGP 不能從 DRAM 中提取超過 60 GB/s 的數(shù)據(jù)。如果 iGPU 具有 32 字節(jié)/周期的結(jié)構(gòu)鏈接,則 2 GHz 結(jié)構(gòu)時鐘將提供 64 GB/s 的帶寬。這足以養(yǎng)活一個 WGP。
帶寬測試還表明我們正在處理非常小的緩存配置。之前,我們查看了幾款 iGPU,注意到 AMD Renoir 的 iGPU 使用相對較大的 1 MB L2 緩存,以補(bǔ)償與 CPU 共享帶寬相對較低的 DDR4 總線。Raphael 的 iGPU 甚至沒有與低端顯卡競爭的愿望,L2 大小降至 256 KB。有趣的是,AMD 還將 L1 緩存大小降至 64 KB。到目前為止,我們看到的所有 RDNA(2) 實(shí)現(xiàn)都使用了 128 KB L1 緩存。但看起來 RDNA2 的 L1 可以配置為該大小的一半。與離散的 RDNA2 GPU 不同,Raphael 的 iGPU 沒有 Infinity Cache。L2 未命中直接進(jìn)入內(nèi)存。
我們可以通過延遲測試來確認(rèn)緩存設(shè)置細(xì)節(jié)。最近,我們發(fā)現(xiàn)我們的簡單延遲測試實(shí)現(xiàn)正在影響 AMD 在 GCN 和 RDNA GPU 上的標(biāo)量數(shù)據(jù)路徑。查看編譯后的程序集表明生成了 s_load_dword 指令,因?yàn)榫幾g器意識到加載的值在波前是統(tǒng)一的。
s_load_dword 訪問標(biāo)量緩存而不是向量緩存,并且這些緩存在 GCN 和 RDNA 上是分開的。應(yīng)用 hack 來阻止編譯器確定加載的值是否統(tǒng)一會導(dǎo)致 global_load_dword 指令和更高的測量延遲。在最近的 Nvidia 和 Intel 架構(gòu)上,這種 hack 沒有效果,因?yàn)榧词拐麄€ wavefront 或 warp 正在加載相同的值,也會使用相同的緩存。這使 GPU 基準(zhǔn)測試變得復(fù)雜,因?yàn)檎雇磥恚覀儽仨殲楝F(xiàn)代 AMD GPU 提供兩組延遲結(jié)果。讓我們從標(biāo)量端的延遲開始。
我們看到確認(rèn) Raphael 的 iGPU 有一個 64 KB L1,由一個 256 KB L2 支持。它的時鐘似乎略低于桌面 RDNA2,導(dǎo)致更高的 L1 標(biāo)量和共享 L1 延遲。然而,Raphael 的微型 L2 比 6900 XT 的延遲更好。與其桌面對應(yīng)物一樣,Raphael 的 iGPU 享有比Renoir 使用的舊 GCN 架構(gòu)更低的標(biāo)量加載延遲。然而,Renoir 有一個更大的 L2 緩存,以幫助 iGPU 免受內(nèi)存帶寬瓶頸的影響。
Raphael 的 iGPU 也享有比Renoir 更好的 DRAM 訪問延遲。此處測試的 Ryzen 4800H 確實(shí)存在更高的內(nèi)存延遲,在 1 GB 測試大小下達(dá)到 84.7 ns,而 7950X 為 73.35 ns。然而,這個相對較小的差距并不能解釋 GPU 端 DRAM 延遲的巨大差異。超過 L2 容量后延遲的跳躍表明測試正在溢出 GCN 的 TLB 級別。在 128 MB 之后,我們可能會看到完全 TLB misses。
Raphael 的 iGPU 上的 DRAM 訪問延遲也與桌面 RDNA2 的訪問延遲相當(dāng)。Desktop RDNA2 的 DRAM 訪問延遲超過 250 ns,而 Raphael 的 iGPU 可以在 191 ns 多一點(diǎn)的時間內(nèi)訪問 DRAM。該優(yōu)勢可能是因?yàn)?iGPU 非常小,這意味著它在通往 DRAM 的途中不必經(jīng)過非常復(fù)雜的互連和大型緩存。iGPU 也位于 IO 裸片上,IO 裸片也有內(nèi)存控制器。
當(dāng)我們使用矢量加載路徑時,AMD 會遭受很多額外的延遲。AMD 可能在優(yōu)化標(biāo)量高速緩存的延遲方面付出了很多努力,并期望延遲敏感的操作發(fā)生在那里。矢量路徑針對帶寬而非延遲進(jìn)行了更多優(yōu)化,并且延遲懲罰在 GCN 上尤為明顯。RDNA2 是一個顯著的改進(jìn)。不幸的是,我們沒有在 Raphael 上測試向量緩存延遲,但這里可以預(yù)覽 GCN 和 RDNA2 之間的區(qū)別:
雖然 iGPU 通常比它們的獨(dú)立表親更小并且可以訪問更少的內(nèi)存帶寬,但它們確實(shí)享受與主機(jī) CPU 更快的通信。在某些情況下,通過將相同的物理內(nèi)存映射到 CPU 和 GPU 的頁表,數(shù)據(jù)可以在 CPU 和 GPU 之間移動而無需實(shí)際復(fù)制。在這里,我們正在測試如果需要復(fù)制會發(fā)生什么。
英特爾在 CPU 和 GPU 之間共享一個 L3 緩存,允許在 GPU 和主機(jī)之間進(jìn)行非常快速的復(fù)制。AMD 沒有這個,但 AMD iGPU 仍然受益于共享 DDR 總線。DDR4 或 DDR5 可能無法提供 GDDR 設(shè)置的帶寬,但通過 DDR 總線復(fù)制數(shù)據(jù)仍然比通過 PCIe 更快。在英特爾的 L3 緩存無濟(jì)于事的較大副本大小下,Raphael 更高帶寬的 DDR5 設(shè)置開始發(fā)揮作用,并讓 Raphael iGPU 超越 Tiger Lake。
Raphael 的 iGPU 是一個非常有趣的外觀,它是一個非常小的 RDNA2 實(shí)現(xiàn)。它展示了 RDNA2 如何通過減少 L1 緩存大小來縮小到非常小的設(shè)置,同時保留較大 RDNA2 實(shí)現(xiàn)的低延遲緩存行為。
編輯:黃飛
?
評論