2019年,AMD 放棄了長(zhǎng)期使用的 GCN 架構(gòu),轉(zhuǎn)而采用 RDNA。本文我們將來分析下RDNA 2,RDNA 2在RDNA 1基礎(chǔ)上進(jìn)行了擴(kuò)展,同時(shí)添加了光線追蹤支持和其他一些增強(qiáng)功能。 在本文中,我們可以做一些有趣的事情,并從 RDNA 2 的角度來看一些游戲。 ?
01?架構(gòu)
顧名思義,RDNA 2 建立在 RDNA 1 架構(gòu)之上。AMD 進(jìn)行了多項(xiàng)更改以提高效率并使硬件功能保持最新狀態(tài),但基本的 WGP 架構(gòu)仍然存在。每個(gè) WGP 或工作組處理器都具有四個(gè) SIMD。每個(gè) SIMD 都有一個(gè)32寬的執(zhí)行單元,用于最常見的操作。RDNA 2 獲得一些額外的點(diǎn)積運(yùn)算指令,以幫助加速機(jī)器學(xué)習(xí)。例如,V_DOT2_F32_F16 將成對(duì)的 FP16 值相乘、相加,然后添加一個(gè) FP32 累加器。它不像Nvidia的張量核那樣,在Nvidia中,像HMMA這樣的指令直接處理8×8矩陣。但這些指令讓RDNA 2用更少的指令來做矩陣乘法,而不是使用普通的融合乘法-加法指令。 每個(gè) SIMD 都有 32 個(gè)寬度的執(zhí)行單元用于最常見的操作,一個(gè) 128 KB 的矢量寄存器文件,并且可以跟蹤多達(dá) 16 個(gè)波面。因此,AMD 減少了 RDNA 2 可以跟蹤的波面數(shù)量,從 RDNA 1 中的 20 個(gè)。GPU 不會(huì)像高性能 CPU 那樣進(jìn)行亂序執(zhí)行。相反,它們保持大量線程處于運(yùn)行狀態(tài),并在線程之間切換以保持執(zhí)行單元被占用以隱藏延遲。在 RDNA 2 上,SIMD 基本上有 16 路 SMT,而在 RDNA 1 上有 20 路。
RDNA 2 架構(gòu)的 WGP 和 Nvidia Ampere 的 SM 的基本草圖 這聽起來像是一種回歸(regression),但跟蹤更多的波陣面(類似于CPU線程)可能是昂貴的。線程或波面選擇邏輯必須解決與CPU調(diào)度器非常相似的問題。每個(gè)周期,每個(gè)條目都必須檢查,看它是否準(zhǔn)備好執(zhí)行了。AMD可能希望將每個(gè)周期的檢查次數(shù)從20次減少到16次,以便在更低的功率下達(dá)到更高的時(shí)鐘速度。在相同的處理節(jié)點(diǎn)上,RDNA 2的時(shí)鐘比它的前身要高得多,所以AMD在這方面做得很好。 RDNA 2也比安培好。盡管這兩種架構(gòu)都使用基本的構(gòu)建模塊(SMs或WGP),每個(gè)周期可以執(zhí)行128個(gè)FP32操作,但RDNA 2 WGP可以保持64個(gè)波陣面。Ampere SM只能保持飛行中的48個(gè)warp。RDNA 2也有更多的向量寄存器文件容量,這意味著編譯器可以在不減少占用的情況下在寄存器中保存更多的數(shù)據(jù)。
這讓 RDNA 2 WGP 有更好的機(jī)會(huì)通過保持更多的工作在進(jìn)行中來隱藏延遲。將其與更好的緩存相結(jié)合,每個(gè) RDNA 2 WGP 都應(yīng)該能夠比 Ampere SM 更有力。 WGP 的四個(gè) SIMD 被組織成兩個(gè)一組,AMD 稱之為計(jì)算單元 (CU)。一個(gè) CU 有自己的內(nèi)存管道和 16 KB L0 向量緩存。在 CU 級(jí)別,AMD 增強(qiáng)了內(nèi)存管道以添加硬件光線跟蹤加速。具體來說,紋理單元現(xiàn)在可以執(zhí)行射線相交測(cè)試,每個(gè)周期進(jìn)行四次框測(cè)試或每個(gè)周期進(jìn)行一次三角形測(cè)試。盒子測(cè)試發(fā)生在 BVH 的上層,而三角測(cè)試發(fā)生在最后一層。BVH,或有界頂點(diǎn)層次結(jié)構(gòu),使用分而治之的方法加速光線追蹤。因?yàn)闄z查場(chǎng)景中的每個(gè)三角形都非常昂貴,盒子測(cè)試縮小了光線穿過的區(qū)域,理想情況下 GPU 最后只檢查一組狹窄的三角形。
RDNA 2中引入的光線追蹤加速指令 光線追蹤加速是通過一些新的紋理指令來訪問的。顯然,這些指令實(shí)際上并沒有做傳統(tǒng)的紋理工作,但是紋理單元是附加這個(gè)額外功能的一個(gè)方便的地方。新的指令本身只做交集測(cè)試。常規(guī)的計(jì)算著色器代碼處理遍歷BVH。它還必須計(jì)算逆射線方向,并將其提供給紋理單元,即使紋理單元本身有足夠的信息來計(jì)算。AMD可能想要最小化支持光線追蹤的硬件成本,并且認(rèn)為他們有足夠的常規(guī)著色器來解決這個(gè)問題。 ?
02?緩存
除了在功能上與英偉達(dá)不相上下之外,RDNA 2還可以擴(kuò)展到性能上。最高端的RDNA 1 GPU RX 5700 XT只有20個(gè)WGP。它也建立在一個(gè)251平方毫米的小芯片上,與英偉達(dá)的中端卡競(jìng)爭(zhēng),而不是挑戰(zhàn)他們的高端卡。RDNA 2的RX 6900 XT將WGP數(shù)翻了一番,并提高了時(shí)鐘速度,顯示了AMD想要挑戰(zhàn)英偉達(dá)最佳性能的雄心。但就像增加CPU的核心數(shù)量一樣,GPU的擴(kuò)展也會(huì)產(chǎn)生更高的帶寬需求。英偉達(dá)選擇了耗電384位GDDR6X設(shè)置來為安培供電。AMD選擇了256位的GDDR6配置。為了避免內(nèi)存帶寬瓶頸,RDNA 2獲得了額外級(jí)別的緩存。AMD將其命名為“無(wú)限緩存”,并在內(nèi)部將其稱為MALL(內(nèi)存連接最后一級(jí))。
RDNA 2和英偉達(dá)Ampere的緩存層次結(jié)構(gòu)的簡(jiǎn)化草圖 MALL的名稱是有意義的,因?yàn)樗械?a href="http://wenjunhu.com/v/tag/3668/" target="_blank">VRAM訪問都要經(jīng)過它。RDNA 2的L2也是一個(gè)由整個(gè)GPU共享的緩存,但是如果虛擬內(nèi)存頁(yè)面被設(shè)置為非緩存,就可以繞過它。同步屏障也可以刷新L2以確保一致性。這些訪問可以被RDNA 2上的無(wú)限緩存捕獲,而以前的AMD GPU將從VRAM中提供服務(wù)。 因?yàn)長(zhǎng)2應(yīng)該足夠大以捕獲大量的內(nèi)存訪問,無(wú)限緩存的性能并不是那么重要,AMD在一個(gè)單獨(dú)的時(shí)鐘域上運(yùn)行無(wú)限緩存。這意味著它可以調(diào)得更低以節(jié)省電力。 ?
03?延遲
通過延遲測(cè)試,我們可以看到AMD復(fù)雜的四級(jí)緩存系統(tǒng)的運(yùn)行情況。我們還可以看到英偉達(dá)更簡(jiǎn)單的兩級(jí)緩存結(jié)構(gòu)。Ampere的SMs具有更大的L1緩存容量,當(dāng)RDNA WGP必須從較慢的每個(gè)SA L1緩存時(shí),可以讓SM服務(wù)請(qǐng)求從其第一級(jí)緩存。在較大的測(cè)試規(guī)模下,RDNA 2具有明顯的延遲優(yōu)勢(shì),特別是當(dāng)測(cè)試規(guī)模溢出英偉達(dá)的L2時(shí)。
與 RDNA 1 相比,前三個(gè)緩存級(jí)別的性能提升較小,主要來自時(shí)鐘速度的提高。然后 Infinity Cache 在更大的測(cè)試規(guī)模上產(chǎn)生巨大影響。對(duì)于如此大的緩存,延遲非常低。作為對(duì)比,RTX 3090 的 L2 有 140 ns 的延遲,但只有 6 MB 的容量。 無(wú)限緩存延遲也值得仔細(xì)研究。AMD 的 Adrenaline Edition 軟件非常先進(jìn),可以讓用戶幾乎任意設(shè)置最大時(shí)鐘速度。我們可以使用它來查看緩存在 GPU 核心時(shí)鐘變化時(shí)的行為。
在較低的時(shí)鐘下,RDNA 2 的 WGP 從 Infinity Cache 獲取數(shù)據(jù)所需的周期更少。這可能意味著在較低時(shí)鐘下提高著色器利用率。 從矢量方面,我們看到了同樣的故事。RDNA 2 與速度更快的 RDNA 1 非常相似,帶有一個(gè)額外的巨大緩存。矢量訪問比標(biāo)量訪問延遲更高。Nvidia 沒有單獨(dú)的標(biāo)量?jī)?nèi)存層次結(jié)構(gòu)。他們的架構(gòu)確實(shí)有常量緩存,但那些是只讀的,并且比 AMD 的標(biāo)量數(shù)據(jù)路徑服務(wù)的用途更有限。
Nvidia 受益于較小測(cè)試規(guī)模的較低延遲,而 RDNA 2 在較大測(cè)試規(guī)模上保持優(yōu)勢(shì)。AMD 的 L2 和 Infinity Cache 延遲看起來非常好,考慮到 RDNA 2 必須檢查比 Nvidia 更多的緩存級(jí)別。一旦我們到達(dá) VRAM,情況就會(huì)逆轉(zhuǎn)。 ?
04?帶寬
帶寬也很重要,因?yàn)?GPU 旨在并行處理大量操作。讓我們從查看單個(gè)工作組的帶寬開始。運(yùn)行單個(gè)工作組將我們限制在 AMD 上的單個(gè) WGP,或 Nvidia 架構(gòu)上的 SM。這是我們可以在 CPU 上獲得的最接近單核帶寬的值。與 CPU 上的單核帶寬一樣,此類測(cè)試并不特別代表任何現(xiàn)實(shí)世界的工作負(fù)載。但它確實(shí)讓我們從單個(gè)計(jì)算單元的角度了解了內(nèi)存層次結(jié)構(gòu)。
不評(píng)論第一級(jí)緩存帶寬,因?yàn)橛捎诘刂飞珊瓦吔鐧z查開銷,這很難測(cè)試 通過一個(gè)WGP, RDNA 2通過高時(shí)鐘實(shí)現(xiàn)了非常高的緩存帶寬。這種優(yōu)勢(shì)在大型測(cè)試中尤其突出,其中128 MB無(wú)限緩存發(fā)揮了作用。AMD的緩存架構(gòu)比英偉達(dá)的要好得多。在低占用時(shí),即使是無(wú)限緩存也可以提供比安培L2更多的帶寬。 隨著我們使用更多的工作組和加載更多的WGP或SMs,帶寬需求明顯上升。這對(duì)共享緩存提出了更大的要求。AMD在這方面做得很好。L2帶寬開始時(shí)非常出色,并且隨著我們加載更多WGPs而擴(kuò)展得非常好。在我們開始獲得良好的帶寬之前,我們必須在Nvidia的RTX 3090上加載更多的SM。
Infinity Cache 帶寬擴(kuò)展也非常好,實(shí)際上與 RDNA 1 的 L2 帶寬非常接近。它無(wú)法與 Nvidia 的 3090 上的 L2 帶寬相匹配,但它不需要,因?yàn)樗懊娴?4 MB L2 應(yīng)該可以捕獲大量訪問。到目前為止,AMD 在緩存帶寬方面看起來相當(dāng)不錯(cuò)。然而,VRAM 是另一回事。
Nvidia 擁有巨大的 VRAM 帶寬優(yōu)勢(shì)。對(duì)于高速緩存無(wú)法容納的大量工作負(fù)載,Ampere 耗盡 VRAM 帶寬的可能性要小得多。然而,兩代 RDNA 都更善于利用它們擁有的 VRAM 帶寬。他們不需要那么多的工作來充分利用他們的可用帶寬。 ?
05?CU和WGP模式
AMD RDNA 架構(gòu)中的 WGP 可以在 WGP 模式和 CU 模式下運(yùn)行。在 WGP 模式下,128 KB LDS 用作單個(gè)統(tǒng)一內(nèi)存塊。WGP 中的所有四個(gè) SIMD 都可以訪問整個(gè) 128 KB。在 CU 模式下,LDS 被分成兩個(gè) 64 KB 的一半,每個(gè)都與一對(duì) SIMD 相關(guān)聯(lián)。 LDS延遲在兩種模式下保持相同,約為19.5 ns,即使CU模式應(yīng)該簡(jiǎn)化來自LDS的請(qǐng)求路由。這同樣適用于RDNA 1,它具有大約26.6 ns的LDS延遲。 LDS組織差異使我們能夠通過使用單個(gè)工作組進(jìn)行測(cè)試來命中單個(gè)CU(WGP 的一半)。因?yàn)槊總€(gè)CU都有自己的內(nèi)存管道和L0緩存,所以當(dāng)我們?cè)赪GP中只使用一個(gè)CU 時(shí),我們會(huì)看到 L0 帶寬下降。一旦我們到達(dá) L2 之后,帶寬就不會(huì)下降。
與RDNA 1相比,這是一個(gè)很大的改進(jìn),RDNA 1在緩存層次結(jié)構(gòu)中看到了帶寬的顯著下降。帶寬通常取決于隊(duì)列隱藏延遲的能力,因此RDNA 2在分配隊(duì)列條目方面可能更靈活。也許L1和L2之間的一些隊(duì)列在RDNA 1中按CU分配,但在RDNA 2中按WGP分配。對(duì)于GPU工作負(fù)載,這意味著如果運(yùn)行在WGP的一半中的波提前結(jié)束,RDNA 2會(huì)表現(xiàn)得更好。 ?
06?從游戲的角度
RDNA 2 是游戲優(yōu)先架構(gòu),所以讓我們看看 RX 6900 XT 在這些工作負(fù)載中必須處理什么。研究游戲也將幫助我們了解游戲工作負(fù)載是什么樣的。 賽博朋克2077,RT On CD Projekt Red的《賽博朋克2077》是現(xiàn)代GPU技術(shù)的展示。它使用帶有大量光線追蹤的DirectX 12來提供豐富的圖形效果。不幸的是,這些影響可能非常嚴(yán)重。光線追蹤對(duì)性能的影響尤其大。請(qǐng)記住,這個(gè)游戲的數(shù)字是在GPU的最大時(shí)鐘設(shè)置為1800mhz的一致性下獲得的。3950X禁用了boost。因此,這里的數(shù)字不應(yīng)被視為股票業(yè)績(jī)數(shù)字,也不應(yīng)與其他系統(tǒng)進(jìn)行比較。我們只關(guān)注顯卡在做什么工作。在這場(chǎng)比賽中,我們將沿著Jig Jig街向下看。
?
俯視賽博朋克 2077 中的Jig-Jig街 RT 相關(guān)工作占用大約 21 毫秒的幀時(shí)間。其中超過 9 毫秒用于構(gòu)建 BVH,因此優(yōu)化 BVH 構(gòu)建時(shí)間幾乎與優(yōu)化 BVH 遍歷一樣重要。為了渲染光線追蹤效果,6900 XT 必須進(jìn)行 5.8 億次方框相交測(cè)試和 1.095 億次三角形相交測(cè)試。以達(dá)到的 25.9 FPS,即每秒 150 億次盒子測(cè)試和 28 億次三角測(cè)試。
使用 Radeon GPU Profiler 檢查幀。頂視圖在渲染框架時(shí)顯示占用情況 除了光線追蹤,賽博朋克還大量使用計(jì)算。傳統(tǒng)的光柵化退居二線,也許顯示出尖端游戲的趨勢(shì)。因?yàn)榇蟛糠謺r(shí)間都花在了光線追蹤上,所以讓我們從運(yùn)行時(shí)間最長(zhǎng)的 DispatchRays 調(diào)用開始仔細(xì)看看。具體來說,讓我們看看單獨(dú)使用 7.2 毫秒的那個(gè):
在我們正在查看的電話周圍放一個(gè)方框 在內(nèi)部,RDNA 2 將光線跟蹤內(nèi)核視為計(jì)算著色器。這個(gè)特定的調(diào)用啟動(dòng)了 32,400 個(gè)計(jì)算波陣面。6900 XT 的 40 個(gè) WGP 總共可以保持 2560 個(gè)波面在飛行中,所以這足以填滿整個(gè) GPU。然而,RDNA 2 無(wú)法讓這個(gè)內(nèi)核的 2560 個(gè)波面保持在飛行狀態(tài),因?yàn)樗鼪]有足夠的向量寄存器文件容量。與 CPU 不同,GPU 可以靈活地分配向量寄存器文件容量。為每個(gè)線程(波面)提供更多寄存器有助于防止寄存器溢出,但也會(huì)減少它可以保持運(yùn)行的線程數(shù)量。 對(duì)于這個(gè)內(nèi)核,編譯器選擇使用 96 個(gè)矢量寄存器,這意味著 RDNA 2 的矢量寄存器文件容量?jī)H足以跟蹤每個(gè) SIMD 的 10 個(gè)波面,或者整個(gè) GPU 中的 1600 個(gè)。一方面,這意味著每個(gè) SIMD 都無(wú)法通過在一個(gè)停頓時(shí)在波面之間切換來保持執(zhí)行單元忙碌。另一方面,使用更多的寄存器可以讓編譯器暴露更多的指令級(jí)并行性。從配置文件來看,RDNA 2 花費(fèi)大量時(shí)間占用受向量寄存器容量限制,因此減少 RDNA 1的最大占用看起來是合理的。
更多關(guān)于那次call的細(xì)節(jié) 在這種情況下,操作者可能做出了正確的權(quán)衡,或者至少?zèng)]有做出糟糕的決定。51%的矢量ALU使用率處于一個(gè)良好的位置。著色器沒有被充分利用。與此同時(shí),利用率不會(huì)超過70-80%,這意味著只能使用計(jì)算方案。我們也看到少量的LDS使用。AMD使用LDS存儲(chǔ)BVH遍歷堆棧,使寫入和延遲敏感的讀取遠(yuǎn)離未優(yōu)化的全局內(nèi)存路徑。其他光線跟蹤調(diào)用顯示了類似的硬件使用模式。
這是命中 RT 單元的著色器的基本塊。著色器必須使用三個(gè)額外的指令來計(jì)算光線方向的倒數(shù),并將其與光線方向一起提供。三個(gè)額外的指令并不多,但這些相互指令相當(dāng)昂貴,并且與更簡(jiǎn)單的 FP32 操作相比只能以四分之一的速率執(zhí)行。最重要的是,編譯器必須使用三個(gè)額外的寄存器來保存反向光線方向。我不確定這會(huì)產(chǎn)生多大的影響,但還有改進(jìn)的余地。 不幸的是,AMD 沒有通過他們的分析工具公開 Infinity Cache 計(jì)數(shù)器。不過,我們還是可以看看前三級(jí)緩存是怎么做的。首先,L0 緩存命中率很差,略低于 55%。即使在 Bulldozer 等低于標(biāo)準(zhǔn)的實(shí)現(xiàn)中,CPU 通常也能看到超過 80% 的一級(jí)緩存命中率。128 KB 的中級(jí)緩存有助于捕捉其中的一些未命中,使累積的 L0+L1 命中率略低于 73%。我在這里的印象是L0和L1緩存太小了。4 MB L2 是這里的英雄,在進(jìn)入更高延遲的 Infinity Cache 之前將累積命中率提高到 95.4%。 RDNA 2 的 16 KB 標(biāo)量緩存實(shí)現(xiàn)了相對(duì)較好的命中率,剛好超過 90%,更重要的是從向量路徑卸載了一些請(qǐng)求。從指令方面看,L1i 的命中率超過 99%。GPU 程序的指令足跡似乎比 CPU 程序小,32 KB L1i 似乎足夠了。 BVH建筑 RGP 將幾個(gè)部分注釋為對(duì)構(gòu)建BVH的BuildRaytracingAccelerationStructure的調(diào)用。如前所述,這些部分占用了很大一部分光線追蹤時(shí)間,所以讓我們也看看其中的一個(gè)。最長(zhǎng)的一個(gè)是調(diào)用號(hào) 4838,奇怪的是它是一個(gè) DispatchRays 調(diào)用并顯示交叉測(cè)試活動(dòng)。我不確定那是什么意思,所以我將轉(zhuǎn)到第二長(zhǎng)的那個(gè)。 調(diào)用4221對(duì)應(yīng)于CmdDispatchBuildBVH,在計(jì)算隊(duì)列中運(yùn)行。它的占用率很低,因?yàn)橹挥?60個(gè)波陣面發(fā)射。這遠(yuǎn)遠(yuǎn)不足以填滿GPU,所以這部分可能會(huì)受到延遲的限制。同步障礙阻止GPU使用異步工作來保持執(zhí)行單元繁忙。幸運(yùn)的是,這部分只持續(xù)1.7毫秒。
與上面介紹的光線遍歷部分不同,AMD 的驅(qū)動(dòng)程序選擇在這個(gè) BVH 構(gòu)建部分使用 wave64 模式。我懷疑這是最好的選擇。wave32 模式在占用率低的情況下應(yīng)該更可取,因?yàn)樗试S更多的線程級(jí)并行性。但 AMD 可能有充分的理由使用 wave64,所以我將不再是一個(gè)紙上談兵的四分衛(wèi),而是轉(zhuǎn)向緩存。 和以前一樣,指令緩存命中率非常高。標(biāo)量緩存沒有足夠的標(biāo)量?jī)?nèi)存訪問。在向量方面,16 KB L0 的性能非常差,命中率低于 25%,而 128 KB L1 也可能不存在。RDNA 的 L2 最終服務(wù)于大部分內(nèi)存流量,并且以比光線遍歷部分更極端的方式。由于占用率很低,L0/L1 緩存命中率很低,L2 延遲很可能成為構(gòu)建 BVH 時(shí)的限制因素。 計(jì)算 除了光線追蹤(技術(shù)上被視為 RDNA 上的一種計(jì)算形式)之外,《賽博朋克 2077》還大量使用了計(jì)算著色器。該游戲中的非光線追蹤計(jì)算往往包含大量持續(xù)時(shí)間較短的調(diào)用,而不是一些非常繁重的調(diào)用。持續(xù)時(shí)間最長(zhǎng)的計(jì)算調(diào)用(編號(hào) 4473)是為 wave32 模式編譯的,運(yùn)行時(shí)間不到 0.7 毫秒。RDNA 2 午餐吃這個(gè)。著色器不使用大量矢量寄存器或 LDS 空間,并啟動(dòng) 130,560 個(gè)波前。因此,入住率非常好。
矢量ALU的利用也很好。事實(shí)上,這簡(jiǎn)直太好了。再高一點(diǎn),我們就稱這部分為有限計(jì)算。RDNA 2的標(biāo)量數(shù)據(jù)路徑在卸載應(yīng)用于波前的計(jì)算中起著關(guān)鍵作用。緩存命中率也有助于良好的計(jì)算利用率。大約94%的向量訪問是由L0和L1緩存提供服務(wù)的,其中大部分來自L0。L2使累積命中率超過98%。L1指令緩存和標(biāo)量緩存的命中率如此之高,以至于失敗基本上是噪音。對(duì)于這個(gè)著色器,良好的緩存命中率和高占用率結(jié)合起來讓RDNA 2發(fā)光。 第二長(zhǎng)的計(jì)算著色器(編號(hào)4884)運(yùn)行了不到半毫秒,并表現(xiàn)出不同的特征。它使用的是wave64,并且占用被矢量寄存器文件容量限制為每個(gè)SIMD只有四個(gè)波。盡管如此,RGP仍然報(bào)告了非常好的VALU利用率。這可能是因?yàn)檫@個(gè)內(nèi)核絕大多數(shù)由矢量ALU指令組成。沒有太多的內(nèi)存訪問,而且大量的內(nèi)存訪問確實(shí)會(huì)發(fā)生在標(biāo)量路徑上。
此外,這個(gè)計(jì)算著色器的分支很少,RGP 沒有選擇任何已采用的分支。GPU 上的分支非常昂貴,GPU 沒有分支預(yù)測(cè)并且必須暫停線程直到分支條件得到解決。沒有采取的分支也意味著分歧不是一個(gè)大問題??偟膩碚f,這個(gè)著色器主要由直線 FP32 spam組成。GPU 喜歡這些東西。RDNA 2 也不例外,盡管占用率低,但硬件利用率非常好。
07?賽博朋克2077,RT關(guān)閉
光線追蹤效果很酷,但Cyberpunk 2077在關(guān)閉 RT 的情況下看起來仍然非常好。如果美術(shù)師和開發(fā)人員擅長(zhǎng)他們的工作,傳統(tǒng)的光柵化仍然可以渲染出令人印象深刻的場(chǎng)景,而 CP2077 的工作人員似乎絕對(duì)能勝任這項(xiàng)任務(wù)。
開頭附近的大量空白區(qū)域沒有 GPU 活動(dòng)表明我們受 CPU 限制 如果沒有光線追蹤,傳統(tǒng)的頂點(diǎn)和像素著色器就會(huì)介入并發(fā)揮更大的作用。然而,該游戲仍然大量使用計(jì)算著色器,并且異步計(jì)算也出現(xiàn)了。三個(gè)持續(xù)時(shí)間最長(zhǎng)的調(diào)用都是計(jì)算的,總結(jié)如下:
比較三個(gè)最長(zhǎng)的GPU調(diào)用,這三個(gè)都是計(jì)算著色器 RDNA 2在這些計(jì)算內(nèi)核中表現(xiàn)非常好,即使對(duì)于運(yùn)行時(shí)間最長(zhǎng)的內(nèi)核來說,利用率處于較低的水平。矢量寄存器文件容量繼續(xù)限制架構(gòu)可以利用的并行性,但這個(gè)問題并不是AMD獨(dú)有的。在緩存方面,128 KB L1通常表現(xiàn)不佳。我們看到256 KB的中級(jí)緩存對(duì)于cpu來說已經(jīng)很普通了。GPU緩存就更難了。一次又一次,RDNA 2的L1錯(cuò)過的比命中的多。我很高興AMD選擇在RDNA 3中增加L1緩存容量。好的一面是,標(biāo)量緩存和指令緩存的命中率繼續(xù)保持良好。 ?
08?光柵化
與光線追蹤不同,傳統(tǒng)的柵格化管道非常高效。光柵化可以使用簡(jiǎn)單的計(jì)算將3D點(diǎn)映射到2D屏幕空間,而不是到處發(fā)送光線并觀察它們擊中了什么。然后,GPU使用固定功能硬件將工作分配到像素著色器,這些著色器決定這些像素應(yīng)該是什么顏色。像以前一樣,讓我們看看CP2077中幾個(gè)最長(zhǎng)的柵格化調(diào)用。
通過柵格化工作,L1緩存的顯示更加可信。hitrate仍然不是很好,但在某些情況下,它可以捕捉到足夠多的L0錯(cuò)誤,以確保絕大多數(shù)請(qǐng)求不需要從L2或更高的地方得到滿足。這可能是一個(gè)很大的優(yōu)勢(shì),因?yàn)長(zhǎng)1的延遲和帶寬特性比L2要好得多。 還有一組頂點(diǎn)著色器工作靠近幀的開始。這很難分析,因?yàn)橛写罅康奈⑿『艚校Q探一些顯示,它們通常每次發(fā)射不到100個(gè)波陣面。從我們的延遲和帶寬縮放測(cè)試來看,RDNA 2在低占用率的情況下表現(xiàn)非常出色,可能比英偉達(dá)的Ampere更好地應(yīng)對(duì)這些呼叫。 ?
09?泰坦尼克榮譽(yù)與榮耀
擁有數(shù)百萬(wàn)美元預(yù)算的大型工作室能夠制作出具有深刻故事情節(jié)和令人印象深刻的視覺效果的復(fù)雜游戲。但他們并沒有壟斷樂趣,獨(dú)立創(chuàng)作者用較小的預(yù)算也可以創(chuàng)造出沉浸式和視覺上令人驚嘆的東西。其中一個(gè)例子就是正在進(jìn)行中的《泰坦尼克號(hào)榮譽(yù)與榮耀》項(xiàng)目,該項(xiàng)目專注于用3D技術(shù)重現(xiàn)泰坦尼克號(hào)。它使用虛幻引擎,并使用DirectX 12運(yùn)行。 與許多獨(dú)立游戲一樣,開發(fā)者花在優(yōu)化上的時(shí)間和資源較少。但也許是因?yàn)樗€沒有經(jīng)過優(yōu)化,演示文稿的細(xì)節(jié)水平令人驚嘆,即使在現(xiàn)代GPU上也非常沉重。
?
頭等艙休息室場(chǎng)景獲得側(cè)寫。這里的細(xì)節(jié)令人難以置信 在這里,我們俯視頭等艙休息室,游戲以 4K 分辨率運(yùn)行,GPU/CPU 時(shí)鐘設(shè)置如前。像素著色器主導(dǎo)此工作負(fù)載,但計(jì)算著色器也發(fā)揮作用。異步計(jì)算使用率極低,幾乎所有調(diào)用都發(fā)生在圖形隊(duì)列上。
最長(zhǎng)的調(diào)用是事件 1325,一個(gè)以 wave64 模式運(yùn)行的像素著色器。它發(fā)射了 129,652 個(gè)波前,或足以覆蓋 4K 分辨率下的每個(gè)像素的波。由于向量寄存器文件的限制,占用率很低。向量 ALU 的利用率也很低,這可能是由于占用率低和緩存命中率一般。
長(zhǎng)時(shí)間運(yùn)行的像素著色器的分析器統(tǒng)計(jì)信息 事件 1330 是第二長(zhǎng)的調(diào)用,是一個(gè)啟動(dòng) 16,320 個(gè) wave32 波前的計(jì)算著色器。占用率再次受到向量寄存器文件的限制,但這次每個(gè) SIMD 有 12 個(gè)波更好。著色器實(shí)現(xiàn)了 27.7% 的矢量 ALU 利用率,這是可以接受的,但仍然偏低。L0 命中率還不錯(cuò),為 59.69%,而 L1 命中率低得令人尷尬,只有13.11%。幸運(yùn)的是,二級(jí)緩存以 99.82% 的命中率挽救了局面。計(jì)算利用率應(yīng)該真的更好,因?yàn)槊總€(gè) SIMD 12 個(gè) wave 并不是很糟糕的占用率。但仔細(xì)觀察就會(huì)發(fā)現(xiàn)另一個(gè)問題。工作在線程之間分布不均,有些線程先于其他線程完成。
放大該計(jì)算著色器,添加注釋并將著色設(shè)置為著色器引擎 顯然,下一個(gè)調(diào)用需要計(jì)算著色器寫入的數(shù)據(jù),因此同步屏障會(huì)阻止它執(zhí)行,直到計(jì)算著色器中的所有線程都完成執(zhí)行。最后,這意味著許多 6900 XT 的 WGP 處于空閑狀態(tài)或沒有足夠的線程級(jí)并行性來有效隱藏延遲。這對(duì)任何 GPU 來說都不是很好,但 RDNA 2 的高時(shí)鐘速度和在低占用率下更好的處理應(yīng)該讓它比 Nvidia 的 Ampere 更好地應(yīng)對(duì)。 通過 THG,我們可以看到 DirectX12 在光柵化方面的作用。它不像《賽博朋克 2077》那樣進(jìn)行光線追蹤,但兩種工作負(fù)載的緩存行為驚人地相似。 ?
10?槍手、熱火、PC
Gunner, HEAT, PC (GHPC) 是坦克模擬獨(dú)立游戲。它旨在準(zhǔn)確描繪冷戰(zhàn)后期坦克上的火控系統(tǒng)和傳感器,同時(shí)比 DCS 之類的東西更容易獲得。與 THG 演示不同,GHPC 使用 Unity 引擎并運(yùn)行 DirectX 11。不幸的是,AMD 的分析器不支持 DirectX 11。我使用 PIX 來分析游戲。但這一直很煩人,因?yàn)?PIX 有一個(gè)令人討厭的習(xí)慣,即它自己和它試圖分析的游戲都會(huì)崩潰。 GHPC 絕大多數(shù)使用傳統(tǒng)的像素和頂點(diǎn)著色器。我在 4K 下運(yùn)行游戲,所以毫不奇怪,有很多像素著色器工作。使用計(jì)算著色器。但與上面的 DirectX 12 工作負(fù)載不同,它們所起的作用非常小。
GHPC 運(yùn)行時(shí)間最長(zhǎng)的像素著色器比 THG 的緩存友好得多。我們看到超過 90% 的 L0 命中率。L1 命中率最終在 70-80% 之間非常出色,L2 命中率在 90% 以上和 60% 左右之間波動(dòng)。標(biāo)量和指令緩存命中率基本上是 100%。不幸的是,PIX 沒有顯示有關(guān)執(zhí)行單元利用率的指標(biāo),但我希望它非常好。那是因?yàn)橛螒蛲鶗?huì)使卡產(chǎn)生大量熱量,即使在低于標(biāo)準(zhǔn)時(shí)鐘速度時(shí)也是如此。幸運(yùn)的是,PIX 確實(shí)公開了比 RGP 多得多的計(jì)數(shù)器,因此我們可以研究光柵化管道的其他方面。 長(zhǎng)時(shí)間運(yùn)行的像素著色器受計(jì)算限制,似乎要處理繪制煙霧效果??蚣茉缙诘恼{(diào)用主要處理繪圖對(duì)象,如房屋和道路。因?yàn)檫@些調(diào)用很短,而且經(jīng)常相互重疊,所以我們看到一些光柵化瓶頸出現(xiàn)了?!癙AStalledOnRasterizer”意味著圖元組裝器生成圖元的速度快于光柵化器處理它們的速度。這可能表明光柵化器或之后的任何地方存在瓶頸。
PAStalledOnRasterizer 為灰色, PSExportStalls 為紅色 另一個(gè)指標(biāo)是“PSExportStalls”,它表示像素著色器程序何時(shí)計(jì)算了顏色信息,但光柵化管道中的最后階段還沒有準(zhǔn)備好接受數(shù)據(jù)。罪魁禍?zhǔn)字皇荶單元,它進(jìn)行深度測(cè)試以確保只顯示未被遮擋的像素。例如,如果坦克的一半位于房屋后面,則 Z 單元部分將確保房屋的像素顯示在最終幀中。如果來自許多不同對(duì)象的大量像素必須經(jīng)過這種深度測(cè)試,Z 單元可能很難跟上。 但回過頭來看,最大的性能罪魁禍?zhǔn)卓隙ㄊ菬熿F和陰霾效果。繪制這些效果占用的 GPU 時(shí)間最多,并且像素著色器操作非常繁重。在這些著色器期間,紋理單元幾乎一直處于活動(dòng)狀態(tài),因此也可能存在紋理瓶頸。 ?
11?緩存評(píng)論
長(zhǎng)期以來,GPU緩存一直落后于 CPU 緩存。在 2000 年代初期,GPU 沒有通用緩存層次結(jié)構(gòu)。他們確實(shí)有專門的緩沖區(qū),但在大多數(shù)情況下,他們依賴于顯式并行和高帶寬內(nèi)存設(shè)置。到 2000 年代后期,內(nèi)存帶寬限制促使 GPU 采用緩存。這些往往比 CPU 緩存小得多,兩級(jí)緩存設(shè)置是常態(tài)。CPU 大約在那個(gè)時(shí)候轉(zhuǎn)向三級(jí)設(shè)置,以便通過高核心數(shù)和大型共享緩存保持性能。
曾幾何時(shí),在 Geforce 4 時(shí)代,GPU 緩存是不切實(shí)際的。哦,時(shí)代變了…… RDNA 2 通過采用比我們?cè)诖蠖鄶?shù) CPU 上看到的更復(fù)雜和更高容量的緩存層次結(jié)構(gòu)來扭轉(zhuǎn)一切。它使用令人難以置信的四級(jí)緩存,最后一級(jí)緩存有 128 MB 的容量。相比之下,即使是 AMD 的 VCache CPU 也只有 96 MB 的末級(jí)緩存,并且使用三級(jí)緩存設(shè)置。 就像 CPU 一樣,DRAM 技術(shù)也在努力跟上 GPU 性能的提升。但與 CPU 不同的是,GPU 對(duì)延遲不太敏感,這使得這種緩存設(shè)置變得實(shí)用(延遲似乎是 L4 緩存不受 CPU 歡迎的主要原因)。很高興看到 GPU 全面發(fā)展并比 CPU 更頻繁地使用緩存。
整體命中率,對(duì)于整個(gè)幀的所有訪問 但是更復(fù)雜的緩存設(shè)置不一定好。更多級(jí)別的緩存意味著您可能會(huì)檢查更多標(biāo)簽的命中。如果緩存級(jí)別沒有捕獲大量?jī)?nèi)存訪問,它最終可能會(huì)延遲對(duì)數(shù)據(jù)最終來自何處的訪問。因此,RDNA 2 的 L1 緩存令人失望,與其他緩存級(jí)別相比命中率較低。它要么需要變得更大,要么應(yīng)該放棄以支持更大的 L0 緩存。
假設(shè)每個(gè)標(biāo)量緩存訪問都獲得一個(gè) 64 位值。讓我們暫停片刻,欣賞 GPU 緩存必須處理的海量數(shù)據(jù)。 緩存還有助于提高帶寬,這對(duì) GPU 來說更為重要。L1 緩存確實(shí)減少了進(jìn)入 L2 的流量,但我懷疑 L2 是否需要這種幫助。AMD 的 RX 6900 XT 已經(jīng)擁有大量的 L2 帶寬,甚至與 Nvidia 更大的 RTX 3090 相比也是如此。因此,L1 最終僅用于整合來自多個(gè) WGP 的請(qǐng)求,從而簡(jiǎn)化了 L2 路由。 縮小范圍,我們可以查看請(qǐng)求計(jì)數(shù),乘以請(qǐng)求大小,然后乘以實(shí)現(xiàn)的幀率,以估計(jì) GPU 從其緩存中提取了多少數(shù)據(jù)。L0 緩存每秒提供數(shù) TB 的數(shù)據(jù),如果我以標(biāo)準(zhǔn)時(shí)鐘運(yùn)行我的 6900 XT 而不是將其限制在 1800 MHz,這個(gè)數(shù)字會(huì)更高。即使在 L2,我們也看到超過 1.5 TB/s 的帶寬需求。沒有數(shù)兆字節(jié)緩存的現(xiàn)代 GPU 將非常缺乏帶寬,即使我們?yōu)樗峁┫?Nvidia A100 上那樣的六堆棧 HBM2E 設(shè)置。 ?
12?游戲趨勢(shì)
從我看過的一小部分游戲來看,計(jì)算似乎正在發(fā)揮更大的作用。計(jì)算著色器在 Cyberpunk 2077 中尤為突出,這是一款以大量預(yù)算開發(fā)的現(xiàn)代 AAA 游戲。我將光線追蹤視為一種計(jì)算形式。RDNA 2 將光線追蹤視為計(jì)算。我不確定 Nvidia 做了什么,但 Pascal 使用計(jì)算著色器處理光線追蹤。即使沒有光線追蹤,賽博朋克也會(huì)在傳統(tǒng)光柵化的同時(shí)使用大量計(jì)算。 預(yù)算較小的獨(dú)立游戲往往更強(qiáng)調(diào)光柵化管道,但仍會(huì)利用計(jì)算。他們這樣做的程度可能在很大程度上取決于游戲引擎,因?yàn)楠?dú)立開發(fā)者通常沒有時(shí)間從頭開始創(chuàng)建自己的游戲引擎。Titanic Honor and Glory 使用的 Unreal Engine 具有大量計(jì)算能力。GHPC 使用 Unity 引擎,計(jì)算量很小。雖然傳統(tǒng)的光柵化管道仍然非常重要,但我們可能會(huì)看到它越來越多地在新游戲中得到計(jì)算的補(bǔ)充。
對(duì)虛幻引擎的城市演示中的幀進(jìn)行分析,顯示大量使用計(jì)算和光線追蹤 因此,現(xiàn)代視頻卡需要具有良好的計(jì)算能力,而 RDNA 2 不會(huì)讓人失望。它可能沒有 Nvidia 的 Ampere 架構(gòu)的大量 FP32 吞吐量,但它處于更好地利用其現(xiàn)有執(zhí)行單元的有利位置。 ?
13?結(jié)論
RDNA 2 對(duì) AMD 來說是一個(gè)重要時(shí)刻。在過去十年左右的時(shí)間里,Nvidia 普遍主導(dǎo)著高性能 GPU 市場(chǎng)。AMD(和 ATI)偶爾會(huì)生產(chǎn)出可以與 Nvidia 的最佳產(chǎn)品正面交鋒的顯卡,但這種情況似乎永遠(yuǎn)不會(huì)持續(xù)很長(zhǎng)時(shí)間?;?RDNA 2 的 RX 6900 XT 就是其中之一,其重要性與基于 Terascale 2 的 HD 5800 相同。Terascale 2 提供了 Nvidia Fermi 卡的大部分性能,但功耗要低得多。同樣,RDNA 2 提供了 Ampere 的大部分性能,但電源效率更高。至少部分原因在于 RDNA 2 對(duì)緩存的使用,而不是大型 GDDR6X 設(shè)置。因此,RDNA 2 代表了 GPU 緩存策略的轉(zhuǎn)折點(diǎn)。 該緩存設(shè)置以另一種方式使 RDNA 2 具有重要意義。它代表了 GPU 緩存策略向優(yōu)先考慮一般計(jì)算性能的轉(zhuǎn)折點(diǎn)。
濫發(fā)更多的著色器,然后構(gòu)建一個(gè)巨大的 VRAM 子系統(tǒng)來提供它的日子似乎已經(jīng)一去不復(fù)返了。這同樣適用于基于圖塊的渲染,它試圖通過優(yōu)化光柵化順序來優(yōu)化緩存占用空間。隨著計(jì)算變得越來越重要,基于光柵化的技巧開始產(chǎn)生較小的影響。與 CPU 一樣,答案似乎是更多緩存。AMD的下一代GPU架構(gòu),RDNA 3采用了類似的四級(jí)緩存子系統(tǒng)。Nvidia 同樣正在擺脫對(duì)巨大 VRAM 配置的依賴。Ada Lovelace大大增加了 L2 緩存容量,RTX 4090 獲得了 72 MB 的 L2。即使更大的 GDDR6X 設(shè)置或 HBM 可以提供足夠的帶寬來僅使用 4 MB 或 6 MB 的緩存,這樣的解決方案也會(huì)太耗電或太昂貴。 RDNA 2 還為 AMD 的 GPU 陣容帶來了硬件光線追蹤加速。
與 Nvidia 的全力以赴的方法相反,AMD 可能試圖以最低的硬件成本獲得可接受的性能。我認(rèn)為這是一個(gè)明智之舉,因?yàn)槌R?guī)計(jì)算和光柵化仍然主導(dǎo)著很多工作負(fù)載,并且絕對(duì)不需要光線追蹤來產(chǎn)生良好的視覺效果。此外,即使 GPU 功率和裸片面積達(dá)到極限,未來的光線追蹤工作負(fù)載也不太可能通過當(dāng)今的技術(shù)實(shí)現(xiàn)。那是因?yàn)槲覀冸x使用純光線追蹤渲染 AAA 標(biāo)題還差得很遠(yuǎn),即使是有限的光線追蹤效果也會(huì)帶來如此大的性能損失,以至于 Nvidia 和 AMD 求助于使用升級(jí)技術(shù)。 但重要的是,RDNA 2 的光線追蹤實(shí)現(xiàn)為 AMD 提供了一些可以構(gòu)建的東西。緩存設(shè)置也是如此。在為未來的成功奠定基礎(chǔ)方面,RDNA 2 幾乎與 RDNA 1 相似。
編輯:黃飛
?
評(píng)論
查看更多