可能是目前最全面的NVIDIA RTX30安培架構(gòu)技術(shù)解析

本文由顯卡大神Edison Chen撰寫,首發(fā)于知乎,授權(quán)本站轉(zhuǎn)載。

在 8 月 11 日,NVIDIA 在官方網(wǎng)站發(fā)布了一個(gè) 21 天的倒數(shù)頁面,預(yù)告在 21 天后將會(huì)有一個(gè) GeForce 系列的特別發(fā)布活動(dòng),隨著時(shí)間的臨近,官方不斷地發(fā)布了過去 21 年來推出的一系列產(chǎn)品和技術(shù)。
例如 1999 年推出的第一代 GPU 產(chǎn)品 GeForce 256,2001 年第一款可編程著色器 GPU 產(chǎn)品 GeForce 3 Ti,2003 年第一款嘗試進(jìn)入 CG 制作領(lǐng)域的 GPU 產(chǎn)品 GeForce FX,2004 年王者歸來的 GPU 產(chǎn)品 GeForce 6800 Ultra,2006 年開創(chuàng) CUDA 和統(tǒng)一著色器紀(jì)元的 GPU 產(chǎn)品 GeForce 8800 系列,2010 年吹響 GPU 進(jìn)軍超算市場號角的 GeForce GTX 400 系列,以及兩年前推出的首個(gè)集成硬件光線追蹤內(nèi)核(RT Core)的 GeForce RTX 系列。
這其中的發(fā)展或許有點(diǎn)波折,例如 GeForce FX 系列,但是總的來說,NVIDIA 勇于創(chuàng)新的產(chǎn)品發(fā)展方向被證明是正確的,特別是 GPU、CUDA、RT Core 等新技術(shù)的引入,都獲得了游戲玩家和業(yè)界的高度認(rèn)可。
對游戲來說,圖靈架構(gòu)引入的硬件光線追蹤加速可以認(rèn)為是有電腦游戲以來最大的圖形革命,甚至說是唯一的一場革命也不為過,它徹底改變了以往游戲畫面基本依賴光 柵化的渲染方式,讓人們首次在個(gè)人電腦里可以體驗(yàn)光線追蹤游戲大作。
不僅游戲玩家獲益,圖靈在內(nèi)容創(chuàng)作上的影響更大,許多離線渲染器都紛紛轉(zhuǎn)投圖靈,現(xiàn)在主流渲染器都已實(shí)現(xiàn)硬件光線追蹤加速。牙膏廠 Intel 也都著急了,眼看這樣下去 CPU 市場要大受影響了,最近也密集宣傳明年自己要出獨(dú)立 GPU 了。
在倒數(shù)結(jié)束后,老黃家再次現(xiàn)身自家廚房發(fā)布會(huì)現(xiàn)場,拿出來的自然是大家期盼已久的安培架構(gòu)游戲卡 RTX 3000 系列。
面向玩家和內(nèi)容創(chuàng)作的 RTX 3000 系列
GeForce RTX 3000 系列第一波產(chǎn)品有三款,分別是基于 GA102 GPU 的 GeForce RTX 3090、GeForce RTX 3080 以及基于 GA104 的 GeForce RTX 3070。GA102 和 GA104 代號中的 A 就是指安培 Ampere,其中 GA102 采用三星 8N(專門為 NVIDIA 定制的 8 納米)制程,芯片面積 628 平方毫米(TU102 是 754 平方毫米),晶體管數(shù)量高達(dá) 280 億(TU102 是 186 億),是下一代游戲機(jī) XSX SoC (CPU + GPU)的 1.83 倍。


安培架構(gòu)的最大芯片是更早之前發(fā)布的 A100,基于臺(tái)積電 7 納米制程的 A100 完全針對超算和深度學(xué)習(xí)設(shè)計(jì),去掉了顯示輸出模塊和光線追蹤內(nèi)核,具備極強(qiáng)的雙精度性能,擁有一些特別的計(jì)算加速模塊,例如硬件 JPG 編解碼器、12 通道的 NVLINK 3.0 總線、龐大的 40 MiB L2 Cache 等,晶體管數(shù)量高達(dá) 540 億,價(jià)格和成本極高,一般只有一定規(guī)模的企業(yè)才有條件選擇,與日常游戲娛樂無緣。
對游戲玩家和創(chuàng)作者而言,GeForce RTX 3000 才是真正專門定制的產(chǎn)品,接下來說的也主要圍繞這個(gè)系列的產(chǎn)品展開。


與 A100 純粹作為超算加速器設(shè)計(jì)不同的是,GA102、GA104 具備完整的顯示輸出模塊、更高的單精度計(jì)算性能、光線追蹤內(nèi)核,更偏向于游戲和日常應(yīng)用加速,其 CUDA compute capability 版本是 8.6(這部分的更多細(xì)節(jié)你可以在關(guān)于緩存子系統(tǒng)看到)。
和上一代的圖靈架構(gòu)相比,基于 GA102 的 GeForce RTX 3080 比價(jià)格同為 699 美元的 GeForce RTX 2080 Super 在單精度性能上提高了接近兩倍,光線追蹤性能前者是后者的 1.7 倍,面向人工智能的張量計(jì)算性能可以達(dá)到兩倍。
GA102 和 GA104 均采用三星的 8 納米制程生產(chǎn),RTX 3090(GA102)、RTX 3080(GA102)、RTX 3070(GA104)的全卡功耗分別為 350 瓦、320 瓦、220 瓦,國行報(bào)價(jià)分別為 11990 元、5499 元、3899 元,價(jià)位基本上對應(yīng)上一代的 RTX 2080 Ti、RTX 2080 Super、RTX 2070。
本文主要是偏架構(gòu)向,因此具體的產(chǎn)品細(xì)節(jié)例如散熱設(shè)計(jì)我們不打算過多介紹,接下來我們首先從 SM 開始介紹安培架構(gòu)。
架構(gòu)變化——SM 浮點(diǎn)性能加倍
眾所周知,NVIDIA CUDA 是一個(gè)多層次的線程架構(gòu),對程序員而言,CUDA Core 是其直接編程的處理單元,CUDA Core 的局部資源由名為 Streaming Multiprocessor 或者簡稱 SM 的單元包圍著。
如果按照 CPU 這邊的微架構(gòu)術(shù)語,CUDA Core 是 SIMD 單元中的一個(gè)運(yùn)算單元,而 SM 因?yàn)榫邆渥约旱某绦蛴?jì)數(shù)器所以可以視作和傳統(tǒng) CPU 內(nèi)核對等的內(nèi)核??梢哉f,一名 CUDA 程序員,首先要掌握的最基本知識(shí)就是如何使用將各個(gè) SM 的資源有效地分配給 CUDA Core 使用。
CUDA 開發(fā)人員了解 SM 和 CUDA Core 的關(guān)系后,就可以寫很多有用的代碼了,不過對于游戲來說,這顯然并不夠。游戲開發(fā)涉及大量的硬件圖形加速單元,例如光柵器、紋理取樣等,為此,NVIDIA 或者其他廠商的 GPU 還按照光柵器和紋理單元做更進(jìn)一步劃分。
在游戲圖形處理單元術(shù)語中,NVIDIA 這邊還有 GPC 和 TPC 兩種概念,所謂 GPC(Graphics Processing Clusters)就是指有能力獨(dú)立繪制一個(gè)三角形的處理器簇,而 TPC (Texture Processing Clusters)則是紋理處理簇,負(fù)責(zé)紋理處理。
面向游戲的頂級安培游戲架構(gòu) GPU GA102 包含有 7 個(gè) GPC,42 個(gè) TPC,84 個(gè) SM。
NVIDIA GeForce RTX 3080 和 NVIDIA GeForce RTX 3090 的 GA102 并非足本,前者的屏蔽了一個(gè) GPC,TPC 數(shù)量是 34 個(gè),SM 數(shù)量是 68 個(gè),最高頻率 1710MHz。
而后者的 GPC 是 7 個(gè),TPC 數(shù)量是 41 個(gè),SM 數(shù)量是 82 個(gè),最高頻率 1.7GHz。
按照規(guī)模屏蔽單元的設(shè)計(jì)主要是出于成本考慮,因?yàn)橹恍枰O(shè)計(jì)一枚芯片,就能滿足多個(gè)價(jià)位的需求。
安培的 SM 和之前的圖靈類似,每個(gè) SM 里面包含了四個(gè) warp 指令調(diào)度器,每個(gè) warp 指令調(diào)度器對應(yīng)一個(gè) 16 路 SIMD(或者按照 NVIDIA 的說法是 SIMT)的 Sub-Core(子內(nèi)核),一共 4 個(gè) S-ub-Core,每個(gè) SM 還配有一個(gè) RT Core(光線追蹤內(nèi)核)。
安培的 Sub-Core 和 RT Core 都做了架構(gòu)增強(qiáng)。

在圖靈里,每個(gè) Sub-Core 都有 5 個(gè)指令發(fā)射端口:
Port-0:對應(yīng) Tensor Core
Port-1:對應(yīng) SIMT-16 INT32 單元
Port-2:對應(yīng) SIMT-16 FP32 單元
Port-3:對應(yīng) SIMT-4 MUFU 單元
Port-4:對應(yīng) Load/Store 單元
在 CUDA 編程框架術(shù)語中,SIMT-16 里的每個(gè)處理元(Processor Element,簡稱 PE,OpenCL 術(shù)語)被稱作 CUDA Core,因此每個(gè) SIMT-16 里包含了 16 個(gè) CUDA Core。

在安培架構(gòu)中,每個(gè) Sub-Core 依然只有 5 個(gè)指令發(fā)射端口,但是其中一個(gè) SIMT-16 發(fā)射端口可以發(fā)射 INT32 或者 FP32 兩種指令:
Port-0:對應(yīng) Tensor Core
Port-1:對應(yīng) SIMT-16 INT32 或 SIMT-16 FP32 單元
Port-2:對應(yīng) SIMT-16 FP32 單元
Port-3:對應(yīng) SIMT-4 MUFU 單元
Port-4:對應(yīng) Load/Store 單元
經(jīng)過這個(gè)調(diào)整后,現(xiàn)在安培的每個(gè) SM 在同一個(gè)周期里可以以 1:1 或者 2:0 的比例運(yùn)行浮點(diǎn)和整數(shù)指令,在 2:0 模式下,那就是每個(gè) SM 一個(gè)周期跑 128 條浮點(diǎn) FMA 指令或者說 256 個(gè)浮點(diǎn)操作。
而在 1:1 模式下則和以前的圖靈一樣,可以跑 64 條浮點(diǎn)指令加 64 條整數(shù)指令,也就是 128 個(gè)浮點(diǎn)操作加 128 個(gè)整數(shù)操作。
圖靈架構(gòu)當(dāng)初引入并行的 INT32 目的是因?yàn)楝F(xiàn)在游戲里整數(shù)指令比例不低,依照當(dāng)時(shí)提供的資料,是平均每 100 條浮點(diǎn)指令就有大約 36 條整數(shù)指令,這個(gè)比例大概是 2.77:1(見下圖):

所以,安培架構(gòu)的 SM 做出上述調(diào)整同樣是性能上的選擇,使得運(yùn)算資源更接近于實(shí)際的比例。
這里可能會(huì)一些爭議。因?yàn)?NVIDIA 公布的 CUDA Core 數(shù)量是基于 FP32 單元數(shù)統(tǒng)計(jì)的,所以有些人會(huì)覺得有些別扭,Port-1 和 Port-2 的計(jì)算資源是不一樣的。
其實(shí)這點(diǎn)我覺得如何命名還是得看官方的意思,我們了解中間的含義就行。而且,如果把 Port-1 和 Port-2 做成圖靈那樣對等的話,增加的額外晶體管所能帶來的好處可能抵消不了增加的耗電、制造成本。
目前的設(shè)計(jì)顯然是 NVIDIA 經(jīng)過仔細(xì)對比后確定的最佳化實(shí)現(xiàn)。
現(xiàn)在,讓我們拿出計(jì)算器,看看經(jīng)過這番調(diào)整后,GeForce RTX 3080 的理論性能可以達(dá)到怎樣的水平。
256 FP Ops per SM * 68 SM * 1710 MHz = 17408 FP Ops * 1710 MHz = 29767680 MFLOPS = 29.8 TFLOS
而上一代圖靈架構(gòu)的 GeForce RTX 2800 Super 是:
128 FP Ops per SM * 48 SM * 1815 MHz = 6144 FP Ops * 1815 MHz = 11151360 MFLOPS = 11.2 TFLOS
簡而言之,就是新的 RTX 3080 在浮點(diǎn)性能上幾乎達(dá)到 RTX 2080 Super 的 2.7 倍。
RTX 3080 和 2080 的全卡功耗分別是 320 瓦和 250 瓦,因此兩者的紙面浮點(diǎn)性能耗電比分別是 93 GFLOPS 每瓦和 45 GFLOPS 每瓦,前者是后者的兩倍多一點(diǎn)。
架構(gòu)變化——關(guān)于片上存儲(chǔ)以及 ROP
和圖靈架構(gòu)一樣,安培架構(gòu)的 SM 采用了一體化的緩存子系統(tǒng),L1 紋理緩存、L1 數(shù)據(jù)緩存和 Shared Memory 都位于同一塊靜態(tài)緩存中,大小為 128 KiB。
關(guān)于 Shared Memory,Shared Memory 是 CUDA 架構(gòu)中允許同一個(gè)線程塊實(shí)現(xiàn)近程交換的內(nèi)存,是離 CUDA Core 最近的存儲(chǔ)器,速度非??欤畛醯脑O(shè)計(jì)速度和寄存器堆差不多,是 CUDA 編程中最寶貴的存儲(chǔ)資源。
在通用計(jì)算模式下,GA10X SM 的可以按照如下配置進(jìn)行分區(qū):
128 KiB L1D + 0 KiB Shared Memory
120 KiB L1D + 8 KiB Shared Memory
112 KiB L1D + 16 KiB Shared Memory
96 KiB L1D + 32 KiB Shared Memory
64 KiB L1D + 64 KiB Shared Memory
28 KiB L1D + 100 KiB Shared Memory
在圖形和異步計(jì)算模式下,GA10X SM 的可以按照如下配置進(jìn)行分區(qū):
64 KB L1D/Texture + 48 KiB Shared Memory + 16 KiB GFX Cache
可以看到,GA10X 架構(gòu)的緩存子系統(tǒng)擁有比圖靈架構(gòu)靈活得多的 L1 緩存分區(qū)方式,特別是圖形和異步計(jì)算模式下,L1D 和 紋理緩存分區(qū)的容量也得以倍增。
我們整理了一份自 Fermi 架構(gòu)到安培架構(gòu)的 SM 以及 AMD GCN、RDNA 架構(gòu)的 CU 中的寄存器堆和緩存對比,最下面的是各架構(gòu)的“線程”資源分配比率:

從表格可以看到,NVIDIA 這邊的 SMEM 帶寬/浮點(diǎn)操作比率在 GF100、GP100、GV100 上都能維持每個(gè)浮點(diǎn)操作擁有 1 個(gè)字節(jié)/周期 的帶寬作保證,AMD 的 GCN 比 RDNA 高一倍。
兩家公司在這個(gè)設(shè)計(jì)取向上都是讓游戲卡產(chǎn)品的 SMEM 帶寬/浮點(diǎn)操作作出折讓,基本上都是維持在 0.5 字節(jié)/周期/FLOPS 附近。
而面向高性能應(yīng)該用的 GPU,除了 GK100 外,都毫不妥協(xié)做到了 1.0 字節(jié)/周期/FLOPS。
NVIDIA 的每線程 Shared Memory 可分配容量除了 GK110 只有 24 字節(jié)外(相當(dāng)于 6 個(gè) 32 位浮點(diǎn)數(shù))外,都能保持在 32 字節(jié)以上,在 GM204 后,這個(gè)規(guī)模逐步提升,到了安培架構(gòu)這邊,已經(jīng)提升到每線程可用 100 字節(jié)(25 個(gè) 32 位浮點(diǎn)數(shù))。
NVIDIA 從 GV100 開始,每個(gè)線程的最高可分配 L1D 緩存數(shù)也開始顯著提升,GA102 已經(jīng)達(dá)到每線程 128 字節(jié),而 AMD 的 RDNA 只有每線程 8 字節(jié),這在一定程度上是由于 AMD 的 L1D 一直采用獨(dú)立設(shè)計(jì)。
ROP 方面。ROP 的含義就是光柵操作處理器,是 GPU 里最必不可缺的單元之一,負(fù)責(zé)色彩混合和多重采樣。
在 NVIDIA 以前的 GPU 中,ROP 和 L2 Cache 是綁定在一起的。
在 GA10X GPU 里,ROP 和 GPC 綁定在一起了,這樣的設(shè)計(jì)有利于提升 ROP 的總光柵操作性能,避免了前端的掃描轉(zhuǎn)換單元和后端的光柵操作單元數(shù)量不匹配的尷尬。
GA10X 的每個(gè) GPC 有 16 個(gè) ROP,完整的 GA102 包括了 112 個(gè) ROP,相比較之下,上一代的 TU102 在 384 位內(nèi)存總線全開的情況下也只有 96 個(gè) ROP。
采用這樣的新設(shè)計(jì),讓 GPC 更像一個(gè)獨(dú)立的 GPU,有助于提升多采樣抗鋸齒、像素填充率以及色彩混合性能。
架構(gòu)變化——第二代光線追蹤內(nèi)核
上一代或者說圖靈架構(gòu)最矚目的變化是引入了硬件光線追蹤加速單元——RT Core。
光線追蹤被認(rèn)為是可以完美再現(xiàn)真實(shí)世界的渲染技術(shù),它的算法符合物理規(guī)律,不會(huì)像光柵化渲染那樣容易產(chǎn)生各種問題以及為解決這些問題后又不斷追加修正算法的情況,例如,光柵渲染時(shí)陰影和物體的銜接處容易出現(xiàn)懸空以及諸如邊緣毛刺等問題。
但是光線追蹤最大的問題是需要消耗巨大的計(jì)算資源,射線從攝像機(jī)發(fā)射穿過屏幕像素直達(dá)場景后,需要從存儲(chǔ)器中查找會(huì)被射線擊中的三角形,而且每條射線都要做這個(gè)動(dòng)作,如果希望效果好的話,每像素可能還需要若干條甚至上萬條射線。
如果場景里有幾千萬個(gè)三角形,逐個(gè)三角形做遍歷求交,就需要消耗大量的高速緩存和總線帶寬,計(jì)算單元需要浪費(fèi)大量時(shí)間等待三角形數(shù)據(jù)傳輸。
這就好像我們要拼一個(gè)幾千萬個(gè)散亂圖塊的拼圖,我們需要逐個(gè)圖塊比對,直到找到相鄰的圖塊,對個(gè)人電腦來說以這種辦法實(shí)時(shí)光線追蹤是遙不可及的。
為此,人們提出了很多數(shù)據(jù)結(jié)構(gòu)和算法,希望將遍歷求交的次數(shù)顯著降低,其中被認(rèn)為最適合實(shí)時(shí)光線追蹤渲染的就是采用 BVH 加速結(jié)構(gòu)體,即多層包圍盒體。
BVH 的原理很簡單,就是把場景中不同的物體按照層次關(guān)系逐個(gè)定義包圍盒,例如場景里有汽車,騎單車的人,我們可以將三者框在一起,稱之為包圍盒 A,汽車定義為 B,單車和人合在一起定義為 C,單車和人分別定義為 D 和 E,在此基礎(chǔ)上,再繼續(xù)細(xì)分,直到構(gòu)成模型的三角形。
采用 BVH 后,遍歷求交規(guī)模會(huì)顯著減少,例如斯坦福大學(xué) 100 萬三角形規(guī)模的彌勒佛模型可能只需要遍歷求交 10 層 BVH 深度就會(huì)發(fā)生射線有效擊中三角形的情況,相當(dāng)于要對場景中上百萬個(gè)三角形都做求交測試的情況,性能自然是天壤之別。
還是以拼圖為例的話,BVH 就好像拼圖在出廠的時(shí)候?qū)⑾嘟膱D塊打包在一起,只要圖塊打包的關(guān)系清晰,我們完成拼圖的時(shí)間就可以顯著減少,當(dāng)然你還可以考慮使用樂高積木為例子。

上圖是以前圖靈架構(gòu)發(fā)布時(shí)曾經(jīng)引用過的幻燈片,圖中的兔子被分成若干份 BVH,如果射線沒有集中 BVH 的話,那就意味著射線沒有集中該 BVH 內(nèi)的任何三角形,這條射線無需進(jìn)行進(jìn)一步的 BVH 和三角形求交計(jì)算
圖中央的流程圖是 BVH 模式下光線追蹤的流程,右邊則是將這個(gè)流程映射到 GPU 上用 SM 或者說軟件方式跑的簡化流程圖。
然而,這種計(jì)算并不是很適合 GPU,因?yàn)?GPU 是以 SIMT 方式跑指令的,每條指令的寬度是 32 路,BVH 這種本質(zhì)上是一堆連環(huán)指針遍歷的數(shù)據(jù)結(jié)構(gòu)在這種架構(gòu)上的效率會(huì)比較差,因?yàn)槟憧赡苤荒芘艹?1/32 的有效求交結(jié)果。
而圖靈引入的 RT Core 就是專門針對 BVH 數(shù)據(jù)結(jié)構(gòu)提供的硬件加速方案。
RT Core 提供了 BVH 遍歷、BVH 求交、三角形求交、結(jié)果返回等過程的硬件加速,圖靈配備的第一代 RT Core 可以每個(gè)周期完成一次三角形求交,由于每個(gè) SM 都配備有一個(gè) RT Core,在 12 納米制程的 GeForce RTX 2080 Super 上,三角形射線求交的底層性能是:
1 Triangle Intersection per RT Core * 1 RT Core per SM * 48 * 1815MHz = 87.21 GTriInter/s

有人曾經(jīng)根據(jù) TU102 和 TU106?芯片圖分析,認(rèn)為每個(gè) TPC 里的 RT Core 面積大約是 0.8 平方毫米,由于每個(gè) TPC 里包含有兩個(gè) SM,每個(gè) SM 配備一個(gè) RT Core,相當(dāng)于每個(gè) RT Core 面積大約是 0.4 平方毫米。

對于擁有 36 個(gè) TPC 的 TU102 來說,RT Core 的整體面積占用低于 4%(0.8mm^2 * 36 TPC / 754mm^2),相對于完全使用著色器來做光線求交的方式而言,RT Core 能夠以 4% 不到的芯片面積實(shí)現(xiàn) 10 倍于著色器跑光線追蹤的性能(以斯坦福大學(xué)的彌勒佛模型為例,使用 DXR 進(jìn)行完整渲染,TU102 12 GigaRay/s vs GP102 1.1 GigaRay/s),效費(fèi)比還是非常劃算的。
安培架構(gòu)的 RT Core 在圖靈架構(gòu)的基礎(chǔ)上將三角形求交模塊數(shù)量增加到兩個(gè)(以并行方式運(yùn)作),同時(shí)還增加了一個(gè)三角形位置內(nèi)插模塊。
對于具有 68 個(gè) SM、頻率為 1710MHz 的 GeFore RTX 3080 來說,意味著三角形射線求交底層性能提升到了:
2 Triangle Intersection per RT Core * 1 RT Core per SM * 68 * 1710MHz = 232.6 GTriInter/s
在 BVH 求交模塊數(shù)量不變的情況下,NVIDIA 給安培增加 RT Core 中的三角形求交模塊數(shù)量以及增加三角形位置內(nèi)插模塊,目的是提高運(yùn)動(dòng)模糊等多次采樣特效時(shí)的光線追蹤性能。
至于為何沒有增加包圍盒模塊,按照 NVIDIA 在媒體技術(shù)會(huì)上的說法,這是因?yàn)樗麄冇X得圖靈的包圍盒速度已經(jīng)非常滿意,真正的瓶頸卡在三角形求交上。
運(yùn)動(dòng)模糊在游戲中是常見的特效之一,它可以模擬物體快速運(yùn)動(dòng)時(shí)在人類視覺系統(tǒng)中形成的殘像效果,例如電影蝙蝠俠中的飛躍動(dòng)作等。
以往使用光柵渲染做運(yùn)動(dòng)模糊特效的時(shí)候,例如缺乏真實(shí)感的雜噪、重影/條紋偽影、在反射和半透明材質(zhì)上運(yùn)動(dòng)模糊效果缺失。
如果使用光線追蹤做運(yùn)動(dòng)模糊特效的話,效果會(huì)更加真實(shí)準(zhǔn)確,沒有多余的偽像。但是使用光線追蹤跑運(yùn)動(dòng)模糊需要很長的時(shí)間,尤其是在沒有硬件加速執(zhí)行模糊效果所必需的光線追蹤操作的情況下。
光線追蹤運(yùn)動(dòng)模糊可以采用多種算法來實(shí)現(xiàn),其中比較流行一種方式就是將許多帶有時(shí)間戳的射線以隨機(jī)方式發(fā)射到場景中。
支持運(yùn)動(dòng)模糊功能的 BVH 會(huì)針對在一段時(shí)間內(nèi)移動(dòng)的幾何體返回射線的命中信息,其命中信息的采樣與每條射線相應(yīng)的時(shí)間戳相關(guān)。到了著色階段,前面獲得的采樣數(shù)據(jù)會(huì)被合并至最終的模糊效果里。
這樣的算法有相當(dāng)多的實(shí)現(xiàn)方式,NVIDIA 的 OptiX 自從 5.0 版(2017 年)開始就支持這樣的技術(shù)。
對于鏡頭圍繞靜態(tài)物體發(fā)生平移、旋轉(zhuǎn)、縮放產(chǎn)生的運(yùn)動(dòng)模糊,人們一般稱之移鏡模糊,上一代或者說圖靈 GPU 能夠很好地加速移鏡模糊:只需要在一定時(shí)間間隔內(nèi)嘗試將多束射線打進(jìn)場景到靜態(tài)幾何體上,RT Core 就能完成 BVH 遍歷加速、執(zhí)行射線/三角形求交測試,然后將是否擊中的結(jié)果返回,從而實(shí)現(xiàn)模糊效果。
但是,如果場景中的物體是移動(dòng)的話,BVH 的信息也會(huì)隨之變化,這會(huì)帶來更大的挑戰(zhàn)。
GA10X 引入的第二代 RT Core 增加了新的內(nèi)插模塊,在允許 BVH 內(nèi)的數(shù)據(jù)做少量更新的情況下,就能實(shí)現(xiàn)移動(dòng)物體運(yùn)動(dòng)模糊效果的顯著性能提升。在 OptiX 7.0 中,開發(fā)人員可以為幾何體指定特定的移動(dòng)路徑,讓每條射線和時(shí)間關(guān)聯(lián)起來,從而實(shí)現(xiàn)移動(dòng)物體的所有運(yùn)動(dòng)模糊效果加速。
圖靈和安培的 RT Core 都采用了 MIMD 架構(gòu),能在同一時(shí)間內(nèi)跑多條射線。


上圖是兩個(gè)架構(gòu)在光線追蹤執(zhí)行示意圖,可以看到安培的 RT Core 增加了一個(gè)三角形位置時(shí)域內(nèi)插,三角形射線求交模塊增加到兩個(gè)。
上圖是兩個(gè)架構(gòu)在光線追蹤執(zhí)行示意圖,可以看到安培的 RT Core 增加了一個(gè)三角形位置時(shí)域內(nèi)插,三角形射線求交模塊增加到兩個(gè)。
光線追蹤執(zhí)行運(yùn)動(dòng)模糊的難題在于光線追蹤所采用的 BVH 結(jié)構(gòu)體。
一般情況下,BVH 里三角形的位置是已經(jīng)定義好的,RT Core 執(zhí)行包圍盒射線求交測試和三角形射線求交測試后,如果擊中了三角形,就會(huì)執(zhí)行采樣并返回命中信息。
但是運(yùn)動(dòng)模糊特效里三角形不再有固定的位置,此時(shí) BVH 內(nèi)的公式是:告訴我當(dāng)前是什么時(shí)間,我可以告訴你這個(gè)三角形的位置。
每一條射線都需要帶有一個(gè)時(shí)間戳,用于指示追蹤發(fā)生的時(shí)間,時(shí)間戳輸入到 BVH 方程內(nèi),就能獲得三角形的位置,從而完成三角形射線求交計(jì)算。
如果 GPU 內(nèi)沒有集成相應(yīng)的硬件加速單元,這個(gè)步驟就會(huì)成為一個(gè)瓶頸,NVIDIA 認(rèn)為這足以構(gòu)成一個(gè)世代的差別,而且動(dòng)態(tài)模糊對性能的影響還是非線性的,例如我們要對旋轉(zhuǎn)的螺旋槳或者車輪尋找三角形位置。

上圖的左側(cè)展示的是沒有運(yùn)動(dòng)模糊時(shí)候的光線追蹤渲染,這是在一個(gè)沒有運(yùn)動(dòng)模糊的場景中投射多條射線,這些射線的許多條都擊中了三角形,這些被稱作 Output samples 的結(jié)果會(huì)用于著色計(jì)算,圖中的白點(diǎn)代表了射線擊中了該三角形的位置。
右側(cè)表示場景采用了運(yùn)動(dòng)模糊的情況,可以看到每條射線都存在于不同的時(shí)間點(diǎn),這些射線我們用橙色、綠色、藍(lán)色分類表示,各射線都有自己的時(shí)間戳。
橙色射線:嘗試在不同的時(shí)間點(diǎn)上對橙色三角形求交
綠色射線:嘗試在不同的時(shí)間點(diǎn)上對綠色三角形求交
藍(lán)色射線:嘗試在不同的時(shí)間點(diǎn)上對藍(lán)色三角形求交
這就是光線追蹤的運(yùn)動(dòng)模糊實(shí)現(xiàn),經(jīng)過這樣的處理,模糊的計(jì)算結(jié)果會(huì)更加理想,屬于數(shù)學(xué)正確的濾波輸出結(jié)果——底下的 filterd output 就是該算法(讓射線在不同的時(shí)間點(diǎn)上的不同位置擊中三角形產(chǎn)生的混合樣本)輸出結(jié)果。
根據(jù)在渲染器 Blender Cycle 中的實(shí)測(場景 The Car Copter 25),RTX 3080 運(yùn)行帶有運(yùn)動(dòng)模糊特效場景的渲染時(shí)間從 RTX 2080 super 的 14 分鐘縮短到 6 分鐘,其中運(yùn)動(dòng)模糊部分帶來的提升就達(dá)到了 5 倍。
除了增加三角形位置內(nèi)插模塊以及三角形求交模塊以外,安培配備的第二代光線追蹤內(nèi)核還支持和 SM 運(yùn)算單元異步并發(fā)執(zhí)行。
相信很多人都知道,現(xiàn)在的 GPU 里一般有兩種命令處理器,分別用于處理計(jì)算指令和圖形指令的派發(fā),對應(yīng)通用計(jì)算流水線和圖形流水線,光線追蹤內(nèi)核屬于圖形流水線。
異步計(jì)算的初衷是假設(shè)當(dāng)前 GPU 里同時(shí)有圖形計(jì)算(例如頂點(diǎn)、像素渲染)任務(wù)和通用計(jì)算(例如物理、音頻)任務(wù),如果其中一個(gè)任務(wù)卡在流水線前端(front-end)的固定功能單元上的話,例如圖形任務(wù)需要先在光柵單元上執(zhí)行光柵化處理,流水線余下的著色器雖然可以用于通用計(jì)算,但是會(huì)處于空閑等待的狀態(tài)。
為了將這些不同任務(wù)屬性的資源充分利用起來,人們提出了異步計(jì)算,在圖形指令還在前端或者固定功能單元里跑的時(shí)候,通用計(jì)算命令處理器可以將通用計(jì)算隊(duì)列派發(fā)到 SM 里的 CUDA Core 跑。
NVIDIA 在 Pascall 架構(gòu)上引入了動(dòng)態(tài)負(fù)載模式,不過相對于 AMD 的 GPU 架構(gòu)而言,NVIDIA 的光柵器資源更多,出現(xiàn)卡在圖形流水線前端的情況會(huì)少一些,因此這時(shí)候 NVIDIA 的 GPU 給人的印象是采用異步計(jì)算帶來的收益會(huì)相對少一些。
我們前面說過,RT Core 加速的是光線追蹤里的求交測試,這個(gè)任務(wù)的本質(zhì)是確定場景里三角形的可視性(主射線實(shí)現(xiàn))以及周邊環(huán)境(其他物體、光源)對它造成的影響(次生射線實(shí)現(xiàn)),這是光線追蹤最繁重的任務(wù)(占了光線追蹤渲染 70% 以上的處理量)。
但是光線追蹤渲染余下的特效計(jì)算依然需要由 SM 等單元來實(shí)現(xiàn),例如反射倒影、折射、陰影混合、降噪等等,相對于傳統(tǒng)光柵渲染來說,SM 需要處理的計(jì)算任務(wù)一點(diǎn)都沒減少甚至更多。
在圖靈架構(gòu)中,RT Core 允許和 SM 采用異步計(jì)算的方式執(zhí)行光線追蹤渲染,例如當(dāng)?shù)?128 號屏幕像素的求交測試任務(wù)在 RT Core 上執(zhí)行的時(shí)候,SM 可以對第 96-99 號屏幕像素進(jìn)行光線追蹤渲染處理(像素編號只是便于舉例,別較真...),采用異步計(jì)算可以有效提高 GPU 計(jì)算資源的利用率,從而提升性能。
GA10X GPU 對前代 GPU 已經(jīng)具備的異步計(jì)算予以增強(qiáng),實(shí)現(xiàn)了 RT Core + 圖形或者 RT Core + 計(jì)算都能在每個(gè) SM 里并發(fā)執(zhí)行。
相較之下,在圖靈架構(gòu)里 SM 只能實(shí)現(xiàn)圖形 + 通用計(jì)算(例如頂點(diǎn)/光柵/紋理取樣 + CUDA Core)的并發(fā)執(zhí)行,如今 GA10X 提供了更靈活的并發(fā)執(zhí)行能力,例如在用 RT Core 跑光線求交的同時(shí)讓計(jì)算單元跑路徑追蹤(Path Tracing,光線追蹤用于全局照明的一種算法)降噪。
簡而言之,現(xiàn)在安培架構(gòu)里的所有 "Core" 都能實(shí)現(xiàn)異步運(yùn)算,這意味著在安培架構(gòu)里,CUDA Core + RT Core + Tensor Core 是可以異步計(jì)算的方式并發(fā)運(yùn)行,NVIDIA 稱之為第二代并發(fā)執(zhí)行。

上面的表格就是安培 RT Core 和圖靈 RT Core 的規(guī)格對比。
NVIDIA 以游戲 Wolfenstein: Youngblood(德軍總部,新血脈)為例,對比了 Pascal、Turing、Ampere 三個(gè)架構(gòu)在同一個(gè)場景中的渲染時(shí)間片。


在 Pascal 架構(gòu)的 GTX 1080 Ti 上分別使用傳統(tǒng)光柵渲染和光線追蹤(著色器執(zhí)行)渲染一幀分別需要 12 毫秒(83 fps)和 92 毫秒(11 fps)。

在 Turing 架構(gòu)的 RTX 2080 Super 上:

在 Ampere 架構(gòu)的 RTX 3080 上:
光線追蹤(著色器執(zhí)行):37 毫秒(27 fps)
光線追蹤(RT Core + CUDA core 著色并發(fā)執(zhí)行):11 毫秒(90 fps)
光線追蹤 + DLSS((RT Core + CUDA core 著色并發(fā)執(zhí)行)+ Tensor Core ): 7.5 毫秒(133 fps)
光線追蹤 + DLSS(RT Core + CUDA core 著色 + Tensor Core 并發(fā)執(zhí)行): 6.7 毫秒(149 fps)
正如你說看到的,Ampere 架構(gòu)下的 RT Core 現(xiàn)在能夠?qū)崿F(xiàn) RT + 圖形 + Tensor Core 并發(fā)執(zhí)行,能夠讓幀率有效提高,在這樣的模式下,RTX 3080 光線追蹤渲染甚至比 GTX 1080 Ti 使用傳統(tǒng)光柵渲染還要快接近一倍。
性能增益還是不錯(cuò)的,值得一提的是,Wolfenstein: Youngblood 這個(gè)游戲按照官方的介紹,只有 2-4 名全職開發(fā)人員,開發(fā)時(shí)間只有 9 個(gè)月。
架構(gòu)變化——第三代張量內(nèi)核
NVIDIA 自 Volta(伏特)架構(gòu)開始引入名為 Tensor Core(張量內(nèi)核)的模塊,它是專門針對深度學(xué)習(xí)加速設(shè)計(jì)的矩陣運(yùn)算單元。
在圖靈架構(gòu)里,NVIDIA 引入了第二代 Tensor Core,和 Volta 的第一代 Tensor Core 相比,圖靈的 Tensor Core 支持更多低精度(INT8、INT4)操作,這是因?yàn)橛行┩评磉\(yùn)算可以容忍較低的運(yùn)算精度。
作為面向消費(fèi)級的產(chǎn)品,圖靈架構(gòu)引入 Tensor Core 當(dāng)然不是只是將人工智能裝點(diǎn)門面,它有非常實(shí)際的用處,例如基于深度學(xué)習(xí)的光線追蹤降噪以及基于深度學(xué)習(xí)的 DLSS 抗鋸齒渲染。
圖靈每個(gè) SM 都配有 8 個(gè) Tensor Core(每個(gè)子核有兩個(gè) Tensor Core),每個(gè) SM 每個(gè)周期可以跑 512 個(gè) FP16 Tensor 操作。
安培架構(gòu)的每個(gè) SM 里有 4 個(gè) Tensor Core(每個(gè)子核有一個(gè) Tensor Core),但是每個(gè) Tensor Core 的處理能力都倍增了,因此安培的每個(gè) SM 也能跑 512 個(gè) FP16 Tensor 操作。
在數(shù)據(jù)格式支持能力方面,安培引入了 BF16、TF32 兩種新的數(shù)據(jù)格式,前者是 Google 引入的一種 16 位數(shù)據(jù)格式,而后者則是 NVIDIA 自家首次引入的 19 位數(shù)據(jù)格式。
FP、BF、TF 里的“F”表示數(shù)據(jù)是浮點(diǎn)形式,它們的表示格式由三段組成,分別是符號位、指數(shù)位和尾數(shù)位組成。

FP16:又被稱作半精度,1 個(gè)二進(jìn)制符號位,5 位二進(jìn)制表示指數(shù),10 位二進(jìn)制表示尾數(shù),一般用于圖形渲染,在深度學(xué)習(xí)中也被廣泛采用。
BF16:也被稱作 Brain Float 16 或者 BFloat 16,由 Google Brain 推出,最初只有谷歌的 TPU 深度學(xué)習(xí)處理器采用。和 FP16 一樣,BF16 也是 16 位長的二進(jìn)制數(shù),但是它的數(shù)據(jù)格式是 1 位符號位、8 位指數(shù),7 位尾數(shù)。這樣的設(shè)計(jì)是為了追求 FP32 的動(dòng)態(tài)范圍,但是需要犧牲尾數(shù)數(shù)據(jù)范圍。
TF32:這是 NVIDIA 在 A100 廚房發(fā)布會(huì)首次公布的數(shù)據(jù)格式,目前已發(fā)布的安培全系 GPU 配備的 Tensor Core 都支持這個(gè)數(shù)據(jù)格式。TF32 的數(shù)據(jù)格式是 19 位二進(jìn)制,有 1 個(gè)符號位,8 位指數(shù)以及 10 位尾數(shù)。
TF32 具備 FP32 和 BF16 一樣的 8 位動(dòng)態(tài)范圍,但是有效數(shù)字精度比 BF16 多了 3 位,如果以十進(jìn)制來說相當(dāng)于有效數(shù)字精度從兩位提高到了接近四位。

在具體實(shí)現(xiàn)上,在啟用 TF32 的時(shí)候,NVIDIA Tensor Core 輸入輸出的數(shù)據(jù)格式依然是 FP32,但是 Tensor Core 內(nèi)部會(huì)以 TF32 的格式進(jìn)行計(jì)算,因此,TF32 無需程序員修改代碼,只需要編譯器提供支持即可,和 FP32 相比,TF32 只是精度降低,但是動(dòng)態(tài)范圍保持一樣,而性能和 FP16 Tensor 性能一樣。
由于數(shù)據(jù)格式的原因,F(xiàn)P16 和 BF16 都需要更多的代碼量,但是因?yàn)榭梢怨?jié)省內(nèi)存占用以及更快的速度,所以 BF16 和 FP16 依然值得采納。
除了支持更廣泛的數(shù)據(jù)格式外,A100 引入的硬件稀疏化技術(shù)在 GA10X 上也得以實(shí)現(xiàn),透過該技術(shù),GA10X 在同樣每周期 512 個(gè) FP16 tensor 操作的能力上可以再增加一倍達(dá)到等效每周期 1024 個(gè) FP16 操作。
和 RTX 2080 Super 相比,RTX 3080 的張量性能可以最高達(dá)到 2.7 倍。
和 A100 相比,作為面向消費(fèi)級市場的 GA10X 去掉了 A100 的 FP64 以及 Binary(二元)張量計(jì)算支持。
GA10X 的 Tensor Core 數(shù)量是 TU10X 的二分之一,但是由于每個(gè) Tensor Core 規(guī)模是前代的兩倍,因此跑同樣格式的數(shù)據(jù)性能都是一樣的,例如 FP16 的時(shí)候都是每個(gè) SM 每周期跑 512 個(gè) FP16 tensor Ops。
比較特別的是,GA10X 具備 A100 一樣的硬件細(xì)粒度結(jié)構(gòu)化稀疏加速能力,能夠以每 4 個(gè)權(quán)重為一組的方式,將已經(jīng)訓(xùn)練好的權(quán)重分組中權(quán)重值為 0 的兩個(gè)權(quán)重修剪掉,透過這個(gè)稀疏化處理,實(shí)現(xiàn)了推理準(zhǔn)確無損情況下等效 100% 的深度學(xué)習(xí)性能提升,或者說等效每周期每個(gè) SM 完成 1024 個(gè) FP16 Tensor 操作。

不過 Ampere 的細(xì)粒度結(jié)構(gòu)化稀疏只能實(shí)現(xiàn) 50% 的修剪,遇到分組中有較多非零權(quán)重的時(shí)候,就需要手工修改代碼做優(yōu)化,也許未來的新架構(gòu)會(huì)在這方面有更高的靈活性。
按照 NVIDIA 的說法,細(xì)粒度結(jié)構(gòu)化稀疏對于跨視覺、目標(biāo)檢測、自然語言建模以轉(zhuǎn)譯等多種神經(jīng)網(wǎng)絡(luò)應(yīng)用都幾乎不會(huì)造成推理準(zhǔn)確度的損失。
全面改善游戲載入性能——RTX IO
現(xiàn)在許多大作級游戲已經(jīng)是動(dòng)輒 50 GB 以上的硬盤占用,隨著互聯(lián)網(wǎng)網(wǎng)速的發(fā)展以及人們對游戲精細(xì)度的不斷追求,例如現(xiàn)在的 Call of Duty: Modern Warfare 就要吃掉 200GB 的硬盤空間。
另一方面,現(xiàn)在的固態(tài)硬盤性能也越來越高了,像 PCIE 4.0 X4 的 NVME SSD 就可以達(dá)到 14GB/s 級別的讀寫性能。


隨之而來的問題目前的存儲(chǔ)協(xié)議跟不上形勢發(fā)展了。目前的游戲大都會(huì)采用壓縮方式保存數(shù)據(jù),GPU 要獲得硬盤上的數(shù)據(jù),首先需要硬盤把壓縮的數(shù)據(jù)發(fā)送給 CPU,CPU 將數(shù)據(jù)解壓縮后,放到系統(tǒng)內(nèi)存中,然后 GPU 把數(shù)據(jù)抓到顯卡的顯存中。
NVIDIA 認(rèn)為,對 PCIE 4.0 總線所能傳輸?shù)?14GB/s 的壓縮數(shù)據(jù)進(jìn)行解壓縮需要完全吃掉 24 個(gè) CPU 內(nèi)核(AMD ThreadRipper)。
為了解決這個(gè)問題,NVIDIA 之前曾經(jīng)針對自己的 GPU 集群系統(tǒng) DGX-2 提出 GPUDirect Storage(簡稱 GDS)技術(shù),讓 GPU 直接透過 PCIE 總線讀取 NVME SSD 上的數(shù)據(jù),主要應(yīng)用于一些海量數(shù)據(jù)的處理,例如多普達(dá)雷達(dá)數(shù)據(jù)。由于該技術(shù)依賴于以往 Tesla、Quadro 上才有的 GPUDirect 技術(shù),因此之前并未在消費(fèi)類 GPU 上看到。

不過到了這次安培 GA10X 發(fā)布會(huì)上,NVIDIA 宣布了該技術(shù)的游戲卡版本 RTX IO。
NVIDIA RTX IO 是一組針對游戲數(shù)據(jù)資產(chǎn)的 GPU 載入及解壓縮方案,可以與微軟明年的 DirectStorage 配合,實(shí)現(xiàn)游戲數(shù)據(jù)載入效能的顯著提升,目前只針對圖靈和安培架構(gòu)提供該技術(shù)。
相對于下一代游戲主機(jī)采用專門的硬件解壓縮單元,目前圖靈和安培架構(gòu) GPU 的 RTX IO 都采用 GPU 進(jìn)行無損數(shù)據(jù)解壓縮,A100 里集成的 NVJPG Jpeg 編解碼器在 GA10X 上欠奉。GPU 從硬盤直接讀取壓縮數(shù)據(jù),然后由 GPU 進(jìn)行解壓。

按照 NVIDIA 提供的圖表,RTX IO 可以在只占用半個(gè) CPU 內(nèi)核的情況下,完成和 24 個(gè) CPU 內(nèi)核相當(dāng)?shù)膫鹘y(tǒng)傳輸+解壓縮操作。
這其中自然是利用了圖靈和安培架構(gòu)的 DMA 和 copy 引擎、高級指令以及 SM 架構(gòu)上的優(yōu)勢,例如利用了 GPU 的異步計(jì)算,用閑置的 SM 單元進(jìn)行無損解壓縮。
和 GPUDirect Storage 相比,RTX IO 的特點(diǎn)主要是面向游戲?yàn)橹?,例如一些游戲?shù)據(jù)的 GPU 解壓縮功能將透過微軟 DirectStorage 等方式提供給游戲引擎開發(fā)人員。
在游戲關(guān)卡載入以及采用了流式地圖、場景的游戲里,RTX IO 配合 NVME SSD 能夠提供比傳統(tǒng)存儲(chǔ)協(xié)議高得多的性能,像前面提及的 7GB/s 壓縮數(shù)據(jù)的解壓縮,使用 RTX IO 后,CPU 占用率會(huì)從 24 個(gè) ThreadRipper CPU 內(nèi)核完全吃滿降低到半個(gè) CPU 內(nèi)核。
擁有強(qiáng)大直讀和解碼性能的 RTX IO 能給游戲帶來什么變化呢?
首先,最顯而易見的就是游戲的場景、模型、紋理會(huì)變得前所未有的精致,某種程度上這個(gè)技術(shù)給玩家?guī)淼淖兓惺芸赡懿粊営?Ray Tracing,當(dāng)年 S3 為 Quake 3 Area 推出了一個(gè) S3TC 高分辨紋理地圖,進(jìn)去后我感覺這游戲以前白玩了。

NVIDIA 這次發(fā)布 RTX 3000 系列的時(shí)候有一個(gè)名為 Marble Night 的完全光線追蹤演示程序,其中包含了數(shù)以百計(jì)的光源和超過一百萬多邊形。采用傳統(tǒng)存儲(chǔ)協(xié)議 NVME + CPU 解壓的話,載入時(shí)間為 5 秒,采用 RTX IO NVME + GPU 解壓,載入時(shí)間縮短到了 1.6 秒。
RTX IO 的另一個(gè)應(yīng)用場景就是非線性編輯和舞臺(tái)巨幕,三年前 AMD 就推出過一款后綴帶有 SSG 的專業(yè)卡,其中內(nèi)置了一塊 SSD,專門針對 8K 視頻編輯?,F(xiàn)在消費(fèi)級顯卡有了 RTX IO 后,硬盤數(shù)據(jù)無需 CPU 參與就可以被 GPU 直接讀取解碼輸出,很多相應(yīng)的專業(yè)應(yīng)用如今也有機(jī)會(huì)以比較低的成本得以實(shí)現(xiàn)。
首次采用 PAM4 技術(shù)——GDDR 6X 內(nèi)存
作為針對吞吐先決應(yīng)用的產(chǎn)品,顯卡的性能在很大程度受制于內(nèi)存帶寬,紋理、色彩混合、多重采樣等不可或缺的 GPU 渲染操作都需要頻繁讀寫顯存。
為了滿足 GA102 對內(nèi)存性能的需求,NVIDIA 和鎂光一起聯(lián)合開發(fā)了全新的 GDDR 6X 內(nèi)存規(guī)格,實(shí)現(xiàn)了常規(guī)內(nèi)存接近 HBM 內(nèi)存的帶寬。

GDDR 6X 或者說 G6X 采用了和 2018 年推出的 GDDR 6 一樣的數(shù)據(jù)訪問粒度和顆粒尺寸,主要改進(jìn)了數(shù)據(jù)速率以及傳輸效率,能實(shí)現(xiàn)超過 900 GB/s 的板載內(nèi)存帶寬。
GDDR 6 內(nèi)存為了實(shí)現(xiàn) 16Gbit/s 的引腳數(shù)據(jù)速率,可用的數(shù)據(jù)捕獲時(shí)間窗口只有 62.5 納秒甚至更低,使得實(shí)現(xiàn)該頻率需要額外的電路電平來確保精度和復(fù)雜度,如果繼續(xù)采用類似的技術(shù)來獲得更高的引腳數(shù)據(jù)速率,面臨的電路設(shè)計(jì)挑戰(zhàn)將會(huì)異常巨大,成本也會(huì)急劇提升。

為了克服 GDDR 6 的計(jì)時(shí)挑戰(zhàn),GDDR 6X 引入了名為 PAM4 的數(shù)據(jù)傳輸機(jī)制,相對于 GDDR 6 的 PAM2(或者說 NRZ)而言,每個(gè)數(shù)據(jù)傳輸周期的數(shù)據(jù)符號率增加到了兩個(gè)二進(jìn)制位,經(jīng)過這個(gè)改進(jìn)后,結(jié)合 MTA 以及新的編碼、算法和布線設(shè)計(jì),GDDR 6X 可以實(shí)現(xiàn) 19Gbps 甚至 21Gbps 的引腳數(shù)據(jù)速率。
和采用 GDDR6 的 TU102 旗艦卡 GeForce RTX 2080 Ti 相比,采用 GDDR 6X 的 GA102 旗艦卡 GeForce RTX 3090 內(nèi)存帶寬提升到了 936 GiB/s,提升了 52%,對于 RT Core 執(zhí)行的 BVH 遍歷等應(yīng)用會(huì)有非常大的助益。
面向 8K——顯示輸出及視頻編解碼引擎
GA10X 的顯示引擎支持 DisplayPort 1.4a 和 HDMI 2.1,去年曾經(jīng)流傳出 TU10X 可以透過軟件升級實(shí)現(xiàn) HDMI 2.1,但是到目前為止沒有落實(shí),反正 TU10X 就是不支持 HDMI 2.1。所
以 RTX 3000 系列是當(dāng)前唯一實(shí)現(xiàn)了 HDMI 2.1 支持的獨(dú)立顯卡。
有了 DP 1.4a 和 HDMI 2.1 后,RTX 3000 既能夠以每臺(tái)均為單線纜的方式支持兩臺(tái) 8K 60Hz 顯示器或者電視機(jī)、投影儀。
8K 目前的主要應(yīng)用是內(nèi)容創(chuàng)作,例如 8K 視頻非線性編輯以及億級像素圖片的后期處理,此外還有一些界面中有大量很多選單和空間的應(yīng)用,都是非常適合 8K 顯示器,例如佳能的 EOS R5 已經(jīng)提供了 8K RAW 視頻錄制。
8K 內(nèi)容目前并不多見,Youtube 上有些 8K 樣片,而國內(nèi) B 站目前只開放到 4K 120FPS。按照當(dāng)年 UHDTV 的最初計(jì)劃,真正的目標(biāo)是 8K,4K 只是過渡,2020 年被業(yè)界設(shè)定為 8K 元年,像奧運(yùn)會(huì)都將采用 8K 直播,但是因?yàn)橐咔榈年P(guān)系,這波 8K 電視大促會(huì)被明顯受影響。
令人高興的是,中國去年的國慶 70 周年活動(dòng)是全球首次全程 5G + 8K 直播(8K 采編,4K 地面直播),估計(jì)這場活動(dòng)以后會(huì)有 8K 版的正片發(fā)布。按照之前看到的計(jì)劃,央視今年會(huì)全部 4K 直播,預(yù)計(jì)明年開始試水 8K 直播。
GA10X 集成了一個(gè)第五代 NVDEC(NVIDIA 視頻解碼器),可以支持多種流行編碼的視頻,顯卡集成硬件解碼器的好處是可以顯著釋放 CPU 資源,提升播放體驗(yàn)、增強(qiáng)轉(zhuǎn)碼性能(NVDEC 能夠用比原視頻快得多的速度解碼),同時(shí)降低系統(tǒng)播放視頻時(shí)候的功耗。
在視頻播放方面,第五代 NVDEC 除了以前已經(jīng)實(shí)現(xiàn)了的 HEVC、AVC、MPEG2、VC1、VP8、VP9 等視頻的硬件解碼外,還新增了 AV1 硬件解碼。
AV1 是 AOMedia(基本都是電腦行業(yè)的公司)推動(dòng)的免授權(quán)金視頻編碼標(biāo)準(zhǔn),相同畫質(zhì)下的視頻壓縮能力介乎于 AVC 和 HEVC 之間。
Youtube 上已經(jīng)提供了 AV1 視頻格式支持(需要手動(dòng)在后臺(tái)切換),國內(nèi)愛奇藝今年 5 月份開始正式在 PC、安卓端全面采用 AV1,微軟 Windows 10 操作系統(tǒng)可以透過應(yīng)用商店下載 AV1 解碼器擴(kuò)展,而視頻愛好者經(jīng)常使用的 LAV Filter 采用的是 VideoLAN 的開源 dAV1d 解碼器。
AV1 需要極強(qiáng)的處理器才能實(shí)現(xiàn)軟件解碼,按照?http://phoronix.com?的測試,Core i7 3770K 跑 4K AV1 只能做到 38.3 fps,Core i7 9900K 播放 Youtube 8K 60FPS 的視頻只能做到 28fps,相較于 NVDEC 在較低耗電的情況下完全釋放 CPU 資源相比,CPU 軟件解碼并不是好的選擇。
GA10X 的 AV1 解碼支持能力:
AV1 Profile 0 - 單色 / 4:2:0, 8/10 bit 解碼
最高 Level 6.0 (不含大尺寸分塊)。
最高分辨率支持 8192x8192,最低分辨率支持 128x128
支持直方圖采集、膠片顆粒合成、自取樣映射(SSM)
8K 60 fps 硬件解碼
數(shù)據(jù)路徑支持 DX9、DX11、DX12
在編碼能力方面,GA10X 集成了和圖靈一樣的第七代 NVENC(NVIDIA 視頻編碼器),支持 AVC、HEVC 視頻硬件編碼,透過 OBS、NVIDIA Boardcast 等直播軟件實(shí)現(xiàn)高性能的視頻直播,最高可以提供 AVC 4K 和 HEVC 8K 的實(shí)時(shí)編碼支持,壓縮畫質(zhì)比 x264 軟件解碼器采用 Fast 更高。
蓄勢待發(fā)的 DLSS 2.1 與 8K 游戲
8K 顯卡有了,8K 顯示器也有了,那么用 8K 跑游戲行不行呢?
8K 分辨率下,像素規(guī)模是 4K 的 4 倍,每幀畫面高達(dá) 3.3 千萬像素,如果一個(gè)瓶頸主要在顯卡上的游戲可以在 4K 分辨率下實(shí)現(xiàn) 100 FPS 的話,到了 8K 分辨率的時(shí)候,可能就會(huì)掉到 25 fps 左右,25 FPS 對于有些游戲來說其實(shí)還好,但是對于很多玩家熱愛的第一人稱射擊游戲來說有點(diǎn)太低了。
較有意思的是,NVDIA 自圖靈架構(gòu)引入的 Tensor Core 讓流暢運(yùn)行 8K 游戲成為了可能。
DLSS 的字面意思是深度學(xué)習(xí)超采樣,超采樣技術(shù)以往在游戲中一般只是用于抗鋸齒,事實(shí)上 DLSS 最初的版本也主要是實(shí)現(xiàn)抗鋸齒。
然而到了 2019 年,由 NVIDIA?Edward(Shiqiu) Liu?團(tuán)隊(duì)實(shí)現(xiàn)的 DLSS 2.0 帶來了質(zhì)的飛躍,能夠在 1080p 渲染分辨率下提供不亞于 4K 原生分辨率渲染品質(zhì)的畫面。
這次安培發(fā)布會(huì)上,NVIDIA 發(fā)布了 DLSS 2.0 的升級版本 DLSS 2.1,其中就有名為 DLSS 8K 的渲染技術(shù),能夠以 2560X1440 的渲染分辨率實(shí)現(xiàn)不亞于 8K 原生分辨率渲染品質(zhì)的畫面,畫面重構(gòu)能力從 DLSS 2.0 的 4 倍提高到了駭人聽聞的 9 倍。
DLSS 2.0 的原理是在超級計(jì)算機(jī)上對數(shù)以萬計(jì)的超高品質(zhì)渲染圖片進(jìn)行訓(xùn)練,獲得一個(gè)訓(xùn)練網(wǎng)絡(luò),然后使用這個(gè)訓(xùn)練網(wǎng)絡(luò)在游戲完成渲染后,對較低分辨率的畫面進(jìn)行重構(gòu),生成更高分辨率的畫面,重構(gòu)的畫面在細(xì)節(jié)度方面極高。
按照 Edwad Liu 的說法,現(xiàn)在 DLSS 已經(jīng)具有極高的泛用性,不需要為每個(gè)游戲重新訓(xùn)練,這樣可以大大節(jié)省開發(fā)人員的部署時(shí)間。
由于 DLSS 8K 的原圖渲染像素?cái)?shù)量也就是 1/9 的,因此它的速度要比原生 8K 渲染快得多,即使用上光線追蹤,速度也是可以達(dá)到 60fps 以上的水平,這已經(jīng)是相當(dāng)厲害的水平了。
那么 DLSS 8K 畫質(zhì)如何呢?由于當(dāng)前驅(qū)動(dòng)還沒開放 DLSS8K,因此我們這里先借用 NVIDIA 提供的對比圖:


從對比圖來看,我覺得渲染品質(zhì)還是相當(dāng)不錯(cuò)的,再看看 NVIDIA 提供的實(shí)測性能數(shù)據(jù):

速度基本都能維持在 60fps 的水平,如果不使用 DLSS 8K 而用 8K 原生分辨率來渲染的話,60fps 的速度下相當(dāng)于每秒跑 20 億個(gè)像素的渲染了,像 Control 已經(jīng)掉到個(gè)位數(shù)的幀率了,用了 DLSS 8K 后,幀率提高到了 57 fps。
除了 DLSS 8K 外,DLSS 2.1 還提供了 VR 和動(dòng)態(tài)分辨率的支持,后者可以在維持輸出分辨率不變的情況下,將分辨率不斷變化的輸入畫面經(jīng)過動(dòng)態(tài)重構(gòu)為輸出分辨率。
DLSS 2.1 需要游戲開發(fā)人員添加代碼才能實(shí)現(xiàn),之前的 DLSS 2.0 游戲只有兩個(gè)選項(xiàng):Quality 和 Balance,如果整合 DLSS 2.1 后,玩家可以選擇的 DLSS 2.1 選項(xiàng)包括了 Quality(高品質(zhì))、Balance(平衡)、Performance(速度)、Extreme Performance(極致速度),分辨率重構(gòu)倍率分別對應(yīng) 2x、3x、4x 和 9x。
NVIDIA 表示已經(jīng)有了多款游戲加入了 DLSS 8K 的支持行列,包括:Boundary、Bright Memory: Infinite、Control、Death Stranding、Justice、Minecraft with RTX Beta、Ready or Not、Scavengers、Watch Dogs Legion 以及 Wolfenstein: Youngblood 等。
此外,安培架構(gòu)具備的 NVLINK 3.0 如果可以用于組 SLI 的話,應(yīng)該也能在 8K 游戲中發(fā)揮一定助益。
性能與畫質(zhì)兼顧的 RTXGI 全局照明
全局照明是指對場景渲染的時(shí)候,將場景中各個(gè)物體和光源之間相互作用的復(fù)雜效果予以表現(xiàn)。
假設(shè)有一個(gè)四堵墻和密閉房頂?shù)姆块g,其中一面墻有一扇窗戶,色溫為 5500K 的標(biāo)準(zhǔn)日光從窗戶打進(jìn)來,然后房間里的墻壁涂了有顏色的涂料,光線進(jìn)入房間后,由于漫反射的作用,這些墻壁會(huì)將自身顏色的光線反彈到房間的其他角落,那么位于房間中的物體就會(huì)受到多種方向光線的影響,在不同角度上呈現(xiàn)不同的染色表現(xiàn)。
光線追蹤可以完美再現(xiàn)這個(gè)效果,例如使用 Path Tracing(路徑追蹤),將射線打到房間里,擊中墻壁后,用蒙特卡羅法隨機(jī)發(fā)射大量隨機(jī)方向的次生射線,遇到下一個(gè)物體后,繼續(xù)這個(gè)步驟。
當(dāng)然由于光線能量以反平方差的方式衰減以及物體吸收的關(guān)系,實(shí)際渲染的時(shí)候不需要做無限次反彈,在離線渲染的電影中,一般也就是做 10-15 次反彈就夠了。
不過即使如此,路徑追蹤需要消耗的資源還是太高了,很難在速度和質(zhì)量間做平衡。
RTXGI 采用的全局照明技術(shù)并非 Path Tracing,而是被稱作 DDGI(Dynamic Diffuse Global Illumination)的取巧技術(shù),辦法和很多其他全局照明的方法類似,那就是加個(gè)“球”——給場景里加一大堆探測球。
NVIDIA 這次發(fā)布安培架構(gòu)的時(shí)候?qū)?RTXGI 做了特別的介紹,而 Richard Cowgill 還在 9 月 5 號于 Unreal Engine 的 Youtube 頻道對 RTXGI 做了接近兩個(gè)小時(shí)的講解,我覺得這部分也是比較有意思的。
首先讓我們來看看開關(guān) RTXGI 前后的對比:


這是一個(gè)可以在 Unreal Engine 游戲引擎里打開的全動(dòng)態(tài)光線追蹤場景,可供所有人下載,場景在 UE 的視口里以全屏方式渲染,分辨率是 1920x1080。
上圖是關(guān)閉 RTXGI,下圖是打開 RTXGI,其中關(guān)閉 RTXGI 的時(shí)候,場景里已經(jīng)應(yīng)用了光線追蹤陰影、光線追蹤遮蔽、光線追蹤反射、光線追蹤半透明等光線追蹤特效。
從圖中的渲染時(shí)間可以看出,開關(guān) RTXGI 的渲染時(shí)間區(qū)別也就是 2 毫秒左右,相當(dāng)于 10% 的性能影響,這在游戲中是可以接受的程度。如果保持同樣的 RTXGI 設(shè)定參數(shù)的話,其開銷值基本上是固定的,這也是 RTXGI 的特點(diǎn)之一。
也許有人會(huì)說,幀率只有 40 fps 左右,似乎不是很爽吧。不急,前面我們提到的 DLSS 大殺器要出場了:

DLSS 2.0 開啟后,幀率迅速提升到了 65 fps 的水平,可以看出,RTXGI 讓全局照明開銷降低到了可用的程度,而 DLSS 2.0 讓 RTXGI 的可用性提升了一個(gè)檔次。

RTXGI 能達(dá)到如此高的性能可用性,原因是它的取巧方式:在場景里布置大量的探測球(見上圖的白色小球),這些探測球向場景發(fā)射射線,獲得的距離值和輻射度值被保存起來,然后和標(biāo)準(zhǔn)的光線追蹤混合,獲得探測球?qū)?yīng)位置的亮度值。
和 Path Tracing 每條射線十?dāng)?shù)次反彈,每次反彈又發(fā)射出大量隨機(jī)方向的射線相比,RTXGI 的性能開銷顯著降低,而且不會(huì)有噪點(diǎn),常見的漏光問題也基本可以控制得非常好。
類似的渲染方式以往也應(yīng)用于軟件光線追蹤里,但是受制于性能,只能使用較低“分辨率”來部署探測球或者保存探測球樣本值,如今有了 RT Core 后,可以更大規(guī)模地部署探測球獲得更多的樣本值——意味著更好的渲染結(jié)果。
Richard Cowgill 沒有透露演示使用的顯卡,不過 NVIDIA 在 RTX3000 媒體技術(shù)會(huì)上公布了一些信息:

正如你所看到的,RTX 3080 可以在 0.5 毫秒內(nèi)完成對 40 萬次 RTXGI 取樣,RTX 2080 Ti 是 1.0ms,RTX 2060 是每毫秒大約 27 萬左右。在場景中的探測球數(shù)量固定的情況下,RTXGI 的開銷基本保持不變,具體開銷依賴于當(dāng)前視口里有多少個(gè)探測球被啟用(或者說取樣規(guī)模),因?yàn)椴还芊直媛试趺醋兓螒蛑械膸缀误w包括探測球規(guī)模理論上都不會(huì)發(fā)生變化。
RTXGI 已經(jīng)在 Unreal Engine 4.25 上提供,目前需要透過 NVIDIA 開發(fā)者網(wǎng)頁遞交申請,NVIDIAI 的 NvRTX github 也會(huì)很快提供下載(也許本文發(fā)表的時(shí)候你已經(jīng)可以透過 git 克隆下來了)。
總結(jié)
相較于兩年前圖靈架構(gòu)帶來的革命性特性創(chuàng)新,安培在架構(gòu)上的演進(jìn)更像是對強(qiáng)者的全面補(bǔ)強(qiáng),每個(gè) SM 兩倍的浮點(diǎn)性能、更大更靈活的緩存、全面提升的 RT Core 和更追求效率的 Tensor Core、更高帶寬的 G6X 內(nèi)存技術(shù),讓 GA10X 在游戲方面實(shí)現(xiàn)了前所未有的性能提升。
由于引入大量的新特性,相關(guān)新技術(shù)的拓展基本上就完全落在 NVIDIA 自己身上,所幸的是,NVIDIA 與各個(gè)游戲開發(fā)商有密切的合作關(guān)系,憑借當(dāng)初各個(gè)院校投放大量資源推動(dòng) CUDA,現(xiàn)在在通用計(jì)算特別是人工智能領(lǐng)域結(jié)出了累累碩果。
圖靈架構(gòu)是首次將硬件光線追蹤和硬件 AI 加速集成到了 GPU 里,其中光線追蹤是主調(diào),AI 是助推劑,這兩個(gè)特性在 GA10X 里得到了顯著的增強(qiáng),伴隨它們的 DLSS 2.1 和 RTXGI 堪稱 RTX 在游戲圖形領(lǐng)域目前為止最響亮的合奏曲。
特別是 DLSS,它表現(xiàn)出來的潛力遠(yuǎn)超出我當(dāng)初對它的期望,假如有 DLSS 3.0 的話,不敢想象會(huì)發(fā)展成什么樣子。
RTX IO 是另一個(gè)值得期待的技術(shù),特別是像 UE5 演示,整個(gè)場景有數(shù)十億三角形,每個(gè)畫面至少包含 3300 萬個(gè)多邊形,如此復(fù)雜的場景對存儲(chǔ)系統(tǒng)一定會(huì)帶來前所未有的壓力,RTX IO 問世可以說是正逢其時(shí)。
安培的 RTX IO 完全采用 SM 進(jìn)行解壓運(yùn)算,這方面具體表現(xiàn)如何值得期待,也許以后當(dāng)游戲數(shù)據(jù)打包格式統(tǒng)一后,未來 GPU 的 RTX IO 還將會(huì)引入硬件解壓縮單元也不定。
相當(dāng)于三維渲染和計(jì)算方面的快速,NVIDIA 在 NVDEC 新增的 AV1 解碼支持也是一個(gè)不錯(cuò)的功能,不過這個(gè)特性主要有 IT 領(lǐng)域的公司推動(dòng),在廣播采編領(lǐng)域方面欠缺支持。
某種程度上,這波的視頻能力進(jìn)步略有不足,索尼和 EOS R5/R6 系列的 HEVC 視頻采用了 422 采樣格式,這方面 NVIDIA 并未提供相應(yīng)支持,而 Intel 的下一代 CPU 則提供了,當(dāng)然,這個(gè)特性的用戶群比較少,對游戲玩家沒任何影響。