為什么GPU是新的緩存之王?
不久之前,如果您想要一個(gè)內(nèi)置大量緩存的處理器,那么 CPU 是顯而易見(jiàn)的選擇?,F(xiàn)在,即使是預(yù)算級(jí) GPU 也比幾年前的高端 CPU 配備了更多的內(nèi)存。
那么,什么改變了呢?為什么圖形芯片突然需要比通用中央處理器更多的緩存??jī)烧咧g的專用內(nèi)存是否不同?我們將來(lái)會(huì)看到 GPU 擁有千兆字節(jié)的緩存嗎?
為了回答這些問(wèn)題,我們需要深入了解最新芯片的內(nèi)部結(jié)構(gòu),觀察這些年來(lái)的變化。
TL;DR:為什么 GPU 獲得了如此多的緩存?
由于 GPU 現(xiàn)在不僅用于圖形,還用于各種應(yīng)用程序,因此低級(jí)數(shù)據(jù)緩存的大小不斷增大。為了提高通用計(jì)算能力,圖形芯片需要更大的緩存。這確保沒(méi)有數(shù)學(xué)核心閑置等待數(shù)據(jù)。
末級(jí)緩存已大幅擴(kuò)展,以抵消 DRAM 性能未能跟上處理器性能進(jìn)步的事實(shí)。大量的 L2 或 L3 高速緩存可減少高速緩存未命中。這還可以防止內(nèi)核閑置,并最大限度地減少對(duì)非常寬的內(nèi)存總線的需求。
此外,渲染技術(shù)(尤其是光線追蹤)的進(jìn)步對(duì) GPU 的緩存層次結(jié)構(gòu)提出了巨大的要求。大型末級(jí)緩存對(duì)于確保使用這些技術(shù)時(shí)的游戲性能保持可玩性至關(guān)重要。
緩存課程 101
要全面討論緩存這個(gè)話題,我們首先必須了解緩存是什么以及它的意義。所有處理器都需要內(nèi)存來(lái)存儲(chǔ)它們處理的數(shù)字和計(jì)算結(jié)果。他們還需要有關(guān)任務(wù)的具體說(shuō)明,例如要執(zhí)行哪些計(jì)算。這些指令以數(shù)字方式存儲(chǔ)和傳送。
這種存儲(chǔ)器通常稱為 RAM(隨機(jī)存取存儲(chǔ)器)。每個(gè)帶有處理器的電子設(shè)備都配備有 RAM。幾十年來(lái),PC 一直采用DRAM(“D”代表動(dòng)態(tài))作為數(shù)據(jù)的臨時(shí)存儲(chǔ),而磁盤驅(qū)動(dòng)器作為長(zhǎng)期存儲(chǔ)。
自發(fā)明以來(lái),DRAM 已經(jīng)取得了巨大的進(jìn)步,隨著時(shí)間的推移,速度呈指數(shù)級(jí)增長(zhǎng)。數(shù)據(jù)存儲(chǔ)也是如此,曾經(jīng)占據(jù)主導(dǎo)地位但速度緩慢的硬盤正在被快速的固態(tài)存儲(chǔ) (SSD)所取代。然而,盡管取得了這些進(jìn)步,與基本處理器執(zhí)行單個(gè)計(jì)算的速度相比,這兩種類型的內(nèi)存仍然慢得要命。
即使是一組 DDR5-8200 也不夠快
雖然芯片可以在幾納秒內(nèi)將兩個(gè)數(shù)字相加,但檢索這些值或存儲(chǔ)結(jié)果可能需要數(shù)百到數(shù)千納秒——即使使用最快的可用 RAM。如果沒(méi)有辦法解決這個(gè)問(wèn)題,那么 PC 也不會(huì)比 20 世紀(jì) 70 年代的 PC 好多少,盡管它們的時(shí)鐘速度要高得多。
值得慶幸的是,SRAM(靜態(tài) RAM)可以彌補(bǔ)這一差距。SRAM 由與執(zhí)行計(jì)算的處理器中的晶體管相同的晶體管制成。這意味著 SRAM 可以直接集成到芯片中并以芯片的速度運(yùn)行。它靠近邏輯單元,將數(shù)據(jù)檢索或存儲(chǔ)時(shí)間縮短至數(shù)十納秒。
這樣做的缺點(diǎn)是,即使單個(gè)存儲(chǔ)位所需的晶體管的布置以及其他必要的電路也會(huì)占用相當(dāng)大的空間。使用當(dāng)前的制造技術(shù),64 MB SRAM 的大小大致相當(dāng)于 2 GB DRAM。
AMD Zen 4 小芯片的大部分是緩存(紅色 + 黃色框)。圖片來(lái)源:Fritzchen Fritz
這就是為什么現(xiàn)代處理器整合了各種 SRAM 塊——有些很小,僅包含幾個(gè)位,而另一些則包含幾個(gè) MB。這些較大的塊繞過(guò)了 DRAM 的緩慢問(wèn)題,顯著提高了芯片性能。
這些內(nèi)存類型根據(jù)其用途有不同的名稱,但最流行的稱為“緩存”。這就是討論變得有點(diǎn)復(fù)雜的地方。
為等級(jí)制度歡呼
處理器核心內(nèi)的邏輯單元通常處理小數(shù)據(jù)。它們接收的指令和處理的數(shù)字很少大于 64 位。因此,存儲(chǔ)這些值的最小 SRAM 塊的大小相似,稱為“寄存器”。
為了確保這些單元不會(huì)停止等待下一組命令或數(shù)據(jù),芯片通常會(huì)預(yù)取這些信息并保留頻繁發(fā)出的信息。該數(shù)據(jù)存儲(chǔ)在兩個(gè)不同的 SRAM 組中,通常稱為 1 級(jí)指令緩存和 1 級(jí)數(shù)據(jù)緩存。顧名思義,每個(gè)都有其保存的特定類型的數(shù)據(jù)。盡管它們很重要,但它們的范圍并不廣泛。例如,AMD 最近的桌面處理器為每個(gè)處理器分配 32 kB。
雖然不是很大,但這些緩存足以容納大量命令和數(shù)據(jù),確保內(nèi)核不會(huì)閑置。然而,為了維持這種數(shù)據(jù)流,必須持續(xù)提供緩存。當(dāng)核心需要 1 級(jí)緩存 (L1) 中不存在的特定值時(shí),L2 緩存就變得至關(guān)重要。
L2 緩存是一個(gè)更大的塊,存儲(chǔ)各種數(shù)據(jù)。請(qǐng)記住,單個(gè)內(nèi)核具有多個(gè)邏輯單元線。如果沒(méi)有 L2,L1 緩存很快就會(huì)被淹沒(méi)?,F(xiàn)代處理器具有多個(gè)內(nèi)核,因此需要引入另一個(gè)為所有內(nèi)核提供服務(wù)的緩存層:三級(jí) (L3) 緩存。它的范圍甚至更廣,跨越了幾個(gè) MB。從歷史上看,某些 CPU 甚至具有第四級(jí)。
圖片來(lái)源:Fritzchen Fritz
上圖是英特爾 Raptor Lake CPU 之一的單個(gè) P 核的圖像。淡藍(lán)色的各種網(wǎng)格點(diǎn)綴在結(jié)構(gòu)周圍,是寄存器和各種緩存的混合體。您可以在此網(wǎng)站上查看每個(gè)部分的更詳細(xì)細(xì)分。然而,本質(zhì)上,L1 緩存位于核心的中央,而 L2 則占據(jù)右側(cè)部分。
處理器中的最后一級(jí)緩存通常充當(dāng)來(lái)自系統(tǒng) DRAM 的任何數(shù)據(jù)在繼續(xù)傳輸之前的第一個(gè)調(diào)用端口,但情況并非總是如此。這是關(guān)于緩存的部分,往往會(huì)變得非常復(fù)雜,但這對(duì)于理解為什么 CPU 和 GPU 具有截然不同的緩存安排也至關(guān)重要。
SRAM 塊的整個(gè)系統(tǒng)的使用方式被稱為芯片的緩存層次結(jié)構(gòu),它的變化很大,具體取決于架構(gòu)的年齡和芯片的目標(biāo)扇區(qū)等因素。但對(duì)于CPU來(lái)說(shuō),有一些方面總是相同的,其中之一就是層次結(jié)構(gòu)的連貫性。
高速緩存中的數(shù)據(jù)可以從系統(tǒng)的 DRAM 復(fù)制。如果某個(gè)核心對(duì)其進(jìn)行修改,則必須同時(shí)更新 DRAM 版本。因此,CPU緩存結(jié)構(gòu)具有確保數(shù)據(jù)準(zhǔn)確性和及時(shí)更新的機(jī)制。這種復(fù)雜的設(shè)計(jì)增加了復(fù)雜性,在處理器領(lǐng)域,復(fù)雜性轉(zhuǎn)化為晶體管,進(jìn)而轉(zhuǎn)化為空間。
這就是為什么前幾級(jí)緩存不是很大的原因 — 不僅因?yàn)?SRAM 非常寬敞,還因?yàn)樾枰衅渌到y(tǒng)來(lái)保持其一致性。然而,并不是每個(gè)處理器都需要這個(gè),并且有一種非常特定的類型通常完全避開(kāi)它。
GPU 的方式:核心優(yōu)先于緩存
今天的圖形芯片,從內(nèi)部結(jié)構(gòu)和功能來(lái)看,形成于2007年。當(dāng)時(shí)Nvidia和ATI都發(fā)布了統(tǒng)一著色器GPU,但對(duì)于后者來(lái)說(shuō),真正的變化發(fā)生在5年后。
2012 年,AMD(當(dāng)時(shí)已收購(gòu)ATI)推出了下一代圖形核心(GCN) 架構(gòu)。這種設(shè)計(jì)至今仍在使用,盡管它已經(jīng)經(jīng)歷了重大修改并演變成RDNA和 CDNA 等形式。我們將參考 GCN 來(lái)闡明 CPU 和 GPU 之間的緩存差異,因?yàn)樗峁┝艘粋€(gè)清晰的示例。
圖片來(lái)源:Fritzchen Fritz
跳到 2017 年,讓我們將 AMD 的Ryzen 7 1800X CPU(上圖)與 Radeon RX Vega 64 GPU進(jìn)行對(duì)比。前者有8個(gè)核心,每個(gè)核心包含8條管道。其中四個(gè)管道處理標(biāo)準(zhǔn)數(shù)學(xué)運(yùn)算,兩個(gè)專門用于廣泛的浮點(diǎn)計(jì)算,最后兩個(gè)負(fù)責(zé)數(shù)據(jù)管理。其緩存層次結(jié)構(gòu)如下:64 kB L1 指令、32 kB L1 數(shù)據(jù)、512 kB L2 和 16 MB L3。
Vega 64 GPU 具有 4 個(gè)處理塊。每個(gè)塊都包含 64 個(gè)管道,通常稱為計(jì)算單元 (CU)。此外,每個(gè)CU可容納四組16個(gè)邏輯單元。每個(gè) CU 都擁有 16 kB 的 L1 數(shù)據(jù)緩存和 64 kB 的暫存存儲(chǔ)器,本質(zhì)上充當(dāng)沒(méi)有一致性機(jī)制的緩存(AMD 將其標(biāo)記為本地?cái)?shù)據(jù)共享)。
此外,還有兩個(gè)高速緩存(16 kB L1 指令和 32 kB L1 數(shù)據(jù))可滿足四個(gè) CU 組的需要。Vega GPU 還擁有 4 MB 二級(jí)緩存,位于兩個(gè)帶中,一個(gè)位于底部,另一個(gè)位于下圖頂部附近。
圖片來(lái)源:Fritzchen Fritz
該特定圖形處理器的芯片面積是 Ryzen 芯片尺寸的兩倍。然而,它的緩存占用的空間比CPU中的要小得多。與 CPU 相比,為什么該 GPU 保持最小的緩存,特別是在 L2 段方面?
鑒于其“核心”數(shù)量明顯高于 Ryzen 芯片,人們可能會(huì)預(yù)計(jì),總共有 4096 個(gè)數(shù)學(xué)單元,因此需要大量緩存來(lái)維持穩(wěn)定的數(shù)據(jù)供應(yīng)。然而,CPU 和 GPU 工作負(fù)載有根本的不同。
雖然 Ryzen 芯片可以同時(shí)管理多達(dá) 16 個(gè)線程并處理 16 個(gè)不同的命令,但 Vega 處理器可能會(huì)處理更多數(shù)量的線程,但其 CU 通常執(zhí)行相同的指令。
此外,每個(gè) CU 內(nèi)的數(shù)學(xué)單元在一個(gè)周期內(nèi)同步執(zhí)行相同的計(jì)算。這種一致性將它們歸類為 SIMT(單指令、多線程)設(shè)備。GPU 按順序運(yùn)行,很少偏離其他處理路線。
相比之下,CPU 處理各種指令,同時(shí)確保數(shù)據(jù)一致性。相反,GPU 重復(fù)執(zhí)行類似的任務(wù),消除了數(shù)據(jù)一致性的需要并不斷重新啟動(dòng)其操作。
GCN計(jì)算單元的內(nèi)部結(jié)構(gòu)。很簡(jiǎn)單,是嗎?
由于渲染 3D 圖形的任務(wù)主要由重復(fù)的數(shù)學(xué)運(yùn)算組成,因此 GPU 不需要像 CPU 那樣復(fù)雜。相反,GPU 被設(shè)計(jì)為大規(guī)模并行,可同時(shí)處理數(shù)千個(gè)數(shù)據(jù)點(diǎn)。這就是為什么與中央處理器相比,它們的緩存較小,但內(nèi)核數(shù)量卻多得多。
然而,如果是這樣的話,為什么 AMD 和 Nvidia 的最新顯卡擁有大量緩存,甚至是廉價(jià)型號(hào)?Radeon RX 7600只有 2 MB 的 L2,但也有 32 MB 的 L3;Nvidia 的GeForce RTX 4060沒(méi)有 L3,但它配備了 24 MB L2。
當(dāng)談到他們的光環(huán)產(chǎn)品時(shí),數(shù)字是巨大的——GeForce RTX 4090擁有 72 MB 的 L2,而Radeon RX 6800 / 6900卡中的 AMD Navi 21 芯片(下圖)則擁有 128 MB 的 L3!
這里有很多東西需要解開(kāi)——例如,為什么 AMD 在這么長(zhǎng)時(shí)間內(nèi)保持如此小的緩存,然后突然增加它們的大小并投入大量的 L3 以達(dá)到良好的效果?
為什么 Nvidia 將 L1 大小增加這么多,但將 L2 保持相對(duì)較小,只是為了復(fù)制 AMD 并讓 L2 緩存瘋狂?
GPU 中的 G不再只是圖形
這種轉(zhuǎn)變的原因有很多,但對(duì)于 Nvidia 來(lái)說(shuō),這種轉(zhuǎn)變是由 GPU 使用方式的變化推動(dòng)的。盡管它們被稱為圖形處理單元,但這些芯片的用途不僅僅是在屏幕上顯示令人印象深刻的圖像。
雖然絕大多數(shù) GPU 都擅長(zhǎng)此功能,但這些芯片已經(jīng)超越了渲染的范圍。他們現(xiàn)在處理多個(gè)學(xué)科的數(shù)據(jù)處理和科學(xué)算法中的數(shù)學(xué)負(fù)載,包括工程、物理、化學(xué)、生物學(xué)、醫(yī)學(xué)、經(jīng)濟(jì)學(xué)和地理學(xué)。原因?因?yàn)樗麄兎浅I瞄L(zhǎng)同時(shí)對(duì)數(shù)千個(gè)數(shù)據(jù)點(diǎn)進(jìn)行相同的計(jì)算。
盡管 CPU 也可以執(zhí)行此功能,但對(duì)于某些任務(wù),單個(gè) GPU 的效率可以與多個(gè)中央處理器一樣高效。隨著 Nvidia 的 GPU 向通用化發(fā)展,芯片內(nèi)邏輯單元的數(shù)量及其運(yùn)行速度都呈指數(shù)級(jí)增長(zhǎng)。
Nvidia 第一個(gè)用于嚴(yán)肅通用計(jì)算的“顯卡”——2007 年的 Tesla C870
Nvidia 在 2007 年首次涉足嚴(yán)肅的通用計(jì)算領(lǐng)域,以 Tesla C870 為標(biāo)志。該卡的架構(gòu)在其緩存層次結(jié)構(gòu)中只有兩級(jí)(技術(shù)上可以爭(zhēng)論為 2.5,但讓我們回避這一爭(zhēng)論),確保了 L1 緩存足夠廣泛,可以持續(xù)向所有單位提供數(shù)據(jù)。更快的 VRAM 支持了這一點(diǎn)。二級(jí)緩存的大小也有所增加,盡管與我們現(xiàn)在看到的情況完全不同。
Nvidia 的第一批統(tǒng)一著色器 GPU只需要 16 kB 的 L1 數(shù)據(jù)(以及少量的指令和其他值),但在幾年內(nèi)就躍升至 64 kB。對(duì)于過(guò)去的兩種架構(gòu),GeForce 芯片具有 128 kB L1,其服務(wù)器級(jí)處理器甚至更多。
第一批芯片中的 L1 緩存只需服務(wù) 10 個(gè)邏輯單元(8 個(gè)通用 + 2 個(gè)特殊功能)。當(dāng)Pascal 架構(gòu)出現(xiàn)時(shí)(與 AMD 的 RX Vega 64 大致同一時(shí)代),緩存已增長(zhǎng)至 96 kB,可容納 150 多個(gè)邏輯單元。
當(dāng)然,該緩存從 L2 獲取數(shù)據(jù),并且隨著這些單元的簇?cái)?shù)量隨著每一代的增加而增加,L2 緩存的數(shù)量也隨之增加。然而,自 2012 年以來(lái),每個(gè)邏輯集群(更廣為人知的流式多處理器,SM)的 L2 數(shù)量一直保持相對(duì)不變,約為 70 到 130 MB。當(dāng)然,最新的 Ada Lovelace 架構(gòu)是個(gè)例外,我們稍后會(huì)回到這個(gè)架構(gòu)。
2006 年至 2016 年 Nvidia 最大的 GPU。圖片來(lái)源:Fritzchen Fritz
多年來(lái),AMD 的重點(diǎn)主要集中在 CPU 上,而圖形部門在人員配置和預(yù)算方面相對(duì)較小。不過(guò),作為基本設(shè)計(jì),GCN 運(yùn)行得非常好,在 PC、游戲機(jī)、筆記本電腦、工作站和服務(wù)器中找到了應(yīng)用。
雖然AMD的圖形處理器可能并不總是人們能買到的最快的,但它已經(jīng)足夠好了,而且這些芯片的緩存結(jié)構(gòu)似乎不需要認(rèn)真更新。但是,盡管 CPU 和 GPU 飛速發(fā)展,但事實(shí)證明,還有另一個(gè)難題很難改進(jìn)。
DRAM進(jìn)展緩慢
GCN 的后繼者是 2019 年的 RDNA 架構(gòu),AMD 重新調(diào)整了一切,以便他們的新 GPU 使用三級(jí)緩存,同時(shí)仍然保持相對(duì)較小的規(guī)模。然后,在其后續(xù)RDNA 2 設(shè)計(jì)中,AMD 利用其在 CPU 緩存工程方面的專業(yè)知識(shí)將第四級(jí)緩存硬塞到芯片中,該緩存比之前 GPU 中看到的任何緩存都要大得多。
但為什么要做出這樣的改變,特別是當(dāng)這些芯片主要用于游戲并且 GCN 緩存多年來(lái)只進(jìn)行了最小的修改時(shí)?
原因很簡(jiǎn)單:
芯片尺寸和復(fù)雜性:
雖然合并更多緩存級(jí)別確實(shí)使芯片設(shè)計(jì)復(fù)雜化,但它可以防止芯片變得過(guò)大。更小的芯片意味著可以從單個(gè)硅晶圓中提取更多的單元,從而使生產(chǎn)更具成本效益。
內(nèi)存速度與處理器速度
多年來(lái),處理器速度一直在持續(xù)增長(zhǎng),但 DRAM 卻未能跟上這一步伐。例如,在 Radeon RX Vega 64 中,AMD 利用高帶寬內(nèi)存 (HBM) 來(lái)提高 VRAM 和 GPU 之間的數(shù)據(jù)傳輸速率。這些模塊顯示在主 GPU 芯片左側(cè)上方,本質(zhì)上是堆疊在一起的多個(gè) DRAM 芯片,有助于每個(gè)周期讀取或?qū)懭敫鄶?shù)據(jù)。然而,HBM 非常昂貴。理想情況下,顯卡應(yīng)具有充足的內(nèi)存、大量的總線,并且全部都以高速運(yùn)行。但由于 DRAM 的結(jié)構(gòu),其性能無(wú)法提升到與 CPU 或 GPU 相匹配。
當(dāng)計(jì)算所需的數(shù)據(jù)不存在于緩存中時(shí)(通常稱為“緩存未命中”),必須從 VRAM 中獲取數(shù)據(jù)。由于此過(guò)程比從緩存中檢索速度慢,因此等待 DRAM 中存儲(chǔ)的數(shù)據(jù)只會(huì)導(dǎo)致需要數(shù)據(jù)的線程停滯。即使使用現(xiàn)代圖形芯片,這種情況也經(jīng)常發(fā)生。
這種情況實(shí)際上一直在發(fā)生,即使使用最新的圖形芯片,但隨著它們變得越來(lái)越強(qiáng)大,緩存未命中正在成為高分辨率下的一個(gè)重要性能限制。
在 GPU 中,最后一級(jí)緩存的結(jié)構(gòu)使得每個(gè) VRAM 模塊的接口都有其專用的 SRAM 片。其余處理器利用交叉連接系統(tǒng)來(lái)訪問(wèn)任何模塊。通過(guò) GCN 和首次 RDNA 設(shè)計(jì),AMD 通常采用 256 或 512 kB L3 切片。但在 RDNA 2 中,每片的大小激增至 16 至 32 MB,令人印象深刻。
這一調(diào)整不僅大幅減少了 DRAM 讀取引起的線程延遲,還減少了對(duì)超寬內(nèi)存總線的需求。更寬的總線需要更廣闊的 GPU 芯片周長(zhǎng)來(lái)容納所有內(nèi)存接口。
雖然由于固有的長(zhǎng)延遲,大量緩存可能會(huì)很麻煩且緩慢,但 AMD 的設(shè)計(jì)卻恰恰相反——龐大的 L3 緩存使 RDNA 2 芯片的性能與擁有更寬內(nèi)存總線的性能相當(dāng),同時(shí)將芯片尺寸保持在低于控制。
Nvidia 緊隨其后,推出了最新一代的 Ada Lovelace,出于同樣的原因,之前的 Ampere 設(shè)計(jì)在其最大的消費(fèi)級(jí) GPU 中的最大二級(jí)緩存大小為 6 MB,但在新設(shè)計(jì)中顯著增加。完整的 AD102 芯片(RTX 4090 中使用的是其精簡(jiǎn)版本)包含 96 MB 的二級(jí)緩存。
至于為什么他們不只是采用另一級(jí)緩存并將其做得非常大,可能是因?yàn)樵谶@一領(lǐng)域沒(méi)有與 AMD 相同水平的專業(yè)知識(shí),或者可能不想看起來(lái)像是直接復(fù)制該公司。當(dāng)人們查看芯片時(shí),如上所示,無(wú)論如何,所有二級(jí)緩存實(shí)際上并沒(méi)有占用芯片上的太多空間。
除了通用GPU計(jì)算的興起外,還有一個(gè)原因?qū)е履┘?jí)緩存現(xiàn)在這么大,這與渲染領(lǐng)域的最新熱門話題:光線追蹤有關(guān)。
大圖形需要大數(shù)據(jù)
無(wú)需過(guò)多介紹該過(guò)程的細(xì)節(jié),最新游戲中使用的光線追蹤行為涉及執(zhí)行看似相當(dāng)簡(jiǎn)單的算法 - 從 3D 世界中相機(jī)的位置畫一條線,通過(guò)幀的一個(gè)像素,并追蹤其在空間中的路徑。當(dāng)它與一個(gè)對(duì)象交互時(shí),檢查它是什么以及它是否可見(jiàn),然后從那里計(jì)算出像素的顏色。
事情遠(yuǎn)不止這些,但這是基本過(guò)程。光線追蹤要求如此高的原因之一是對(duì)象檢查。計(jì)算出光線所到達(dá)的物體的所有細(xì)節(jié)是一項(xiàng)艱巨的任務(wù),因此為了幫助加快例程,使用了一種稱為包圍體層次結(jié)構(gòu)(簡(jiǎn)稱 BVH)的東西。
可以將其視為 3D 場(chǎng)景中使用的所有對(duì)象的大型數(shù)據(jù)庫(kù) - 每個(gè)條目不僅提供有關(guān)結(jié)構(gòu)是什么的信息,還提供有關(guān)其與其他對(duì)象的關(guān)系的信息。以上面(極其簡(jiǎn)單化)的例子為例。
層次結(jié)構(gòu)的頂部從體積 A 開(kāi)始。其他所有內(nèi)容都包含在其中,但請(qǐng)注意,體積 E 位于體積 C 之外,后者本身包含 D 和 F。當(dāng)光線投射到此場(chǎng)景中時(shí)(紅色箭頭),遍歷層次結(jié)構(gòu)時(shí)會(huì)發(fā)生一個(gè)過(guò)程,檢查光線路徑經(jīng)過(guò)的體積。
然而,BVH像樹一樣排列,遍歷只需沿著檢查結(jié)果命中的分支進(jìn)行。因此,體積 E 可以立即被拒絕,因?yàn)樗皇巧渚€顯然會(huì)穿過(guò)的 C 的一部分。當(dāng)然,現(xiàn)代游戲中 BVH 的實(shí)際情況要復(fù)雜得多。
對(duì)于上圖,我們拍攝了《賽博朋克 2077》的快照,暫停了游戲的渲染中幀,向您展示如何通過(guò)增加三角形層來(lái)構(gòu)建任何一個(gè)給定場(chǎng)景。
現(xiàn)在,嘗試想象從您的眼睛開(kāi)始追蹤一條線,穿過(guò)監(jiān)視器中的一個(gè)像素,然后嘗試準(zhǔn)確確定哪個(gè)三角形將與光線相交。這就是為什么 BVH 的使用如此重要,并且它大大加快了整個(gè)過(guò)程。
在這個(gè)特定的游戲中,與許多采用光線追蹤來(lái)照亮整個(gè)場(chǎng)景的游戲一樣,BVH 包含兩種類型的多個(gè)數(shù)據(jù)庫(kù):頂級(jí)加速結(jié)構(gòu) (TLAS) 和底層加速結(jié)構(gòu) (BLAS)。
前者本質(zhì)上是對(duì)整個(gè)世界的大概覽,而不僅僅是我們所看到的很小的一部分。在使用 Nvidia 顯卡的 PC 上,它看起來(lái)像這樣:
我們稍微放大了一些,以便向您展示其中包含的一些細(xì)節(jié),但正如您所看到的,它非常大 — 大小幾乎為 18 MB。請(qǐng)注意該列表是實(shí)例之一,并且每個(gè)實(shí)例都包含至少一個(gè) BLAS。游戲只使用了兩個(gè) TLAS 結(jié)構(gòu)(第二個(gè)要小得多),但總共有數(shù)千個(gè) BLAS。
下面的衣服是世界上看到的角色可能穿著的一件衣服。擁有這么多可能看起來(lái)很荒謬,但這種層次結(jié)構(gòu)意味著如果這個(gè)特定的 BLAS 不在光線路徑中的更大父結(jié)構(gòu)中,則它永遠(yuǎn)不會(huì)在渲染的著色階段被檢查或使用。
對(duì)于我們的《賽博朋克 2077》快照,總共使用了 11,360 個(gè) BLAS,占用的內(nèi)存比 TLAS 多得多。然而,由于 GPU 現(xiàn)在擁有大量緩存,因此有足夠的空間將后者存儲(chǔ)在該 SRAM 中,并從 VRAM 傳輸許多相關(guān)的 BLAS,從而使光線追蹤過(guò)程變得更快。
所謂的渲染圣杯實(shí)際上仍然只有那些擁有最好顯卡的人才能獲得,即便如此,也需要采用額外的技術(shù)(例如圖像升級(jí)和幀生成)來(lái)將整體性能帶入可玩的領(lǐng)域。
BVH、數(shù)千個(gè)核心和 GPU 中的專用光線追蹤單元使這一切成為可能,但巨大的緩存為這一切提供了急需的推動(dòng)力。
皇冠的競(jìng)爭(zhēng)者
一旦幾代 GPU 架構(gòu)過(guò)去,擁有大量 L2 或 L3 緩存的圖形芯片將成為常態(tài),而不是新設(shè)計(jì)的獨(dú)特賣點(diǎn)。GPU將繼續(xù)在廣泛的通用場(chǎng)景中使用,光線追蹤將在游戲中變得越來(lái)越普遍,而DRAM仍將落后于處理器技術(shù)的發(fā)展。
話雖如此,當(dāng)涉及到 SRAM 中時(shí),GPU 并不會(huì)完全滿足要求。事實(shí)上,現(xiàn)在有一些例外。
我們不是在談?wù)?AMD 的 X3D 系列 Ryzen CPU,盡管Ryzen 9 7950X3D配備了驚人的 128 MB L3 緩存(英特爾最大的消費(fèi)級(jí) CPU Core i9-13900K僅 36 MB)。不過(guò),它仍然是 AMD 產(chǎn)品,特別是 EPYC 9000 系列服務(wù)器處理器中的最新產(chǎn)品。
售價(jià) 14,756 美元的 EPYC 9684X(上圖)由 13 個(gè)小芯片組成,其中 12 個(gè)小芯片容納處理器的核心和緩存。每個(gè)芯片都包含 8 個(gè)核心和一個(gè) 64 MB 的 AMD 3D V 緩存片,位于小芯片的內(nèi)置 32 MB L3 緩存之上??偠灾?,末級(jí)緩存總計(jì)達(dá)到 1152 MB,令人難以置信!即使是 16 核版本(9174F)也擁有 256 MB 內(nèi)存,盡管它仍然不是你所說(shuō)的便宜,價(jià)格為 3,840 美元。
當(dāng)然,此類處理器并不是為普通人及其游戲電腦而設(shè)計(jì)的,而且其物理尺寸、價(jià)格標(biāo)簽和功耗數(shù)據(jù)都非常大,我們不會(huì)在普通處理器中看到類似的處理器。臺(tái)式電腦使用多年。
部分原因是,與用于邏輯單元的半導(dǎo)體電路不同,隨著每個(gè)新工藝節(jié)點(diǎn)(芯片的制造方法)縮小 SRAM 變得越來(lái)越困難。AMD 的 EPYC 處理器擁有如此多的緩存,僅僅是因?yàn)樯崞飨路接泻芏嘈酒?/p>
所有 GPU 在未來(lái)的某個(gè)時(shí)候可能都會(huì)走類似的路線,AMD 的高端 Radeon 9000 型號(hào)已經(jīng)這樣做了,內(nèi)存接口和相關(guān)的 L3 緩存片被安置在與主處理芯片不同的小芯片中。
不過(guò),使用更大的緩存會(huì)帶來(lái)收益遞減,因此不要指望 GPU 到處都有千兆字節(jié)的緩存。但即便如此,最近的變化還是相當(dāng)引人注目的。
二十年前,圖形芯片中的緩存非常少,只有幾 kB 的 SRAM。現(xiàn)在,您可以花不到 400 美元購(gòu)買一張具有如此大緩存的顯卡,您可以將整個(gè)原始 Doom 放入其中 - 兩倍!
GPU 確實(shí)是緩存之王。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。