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