ADVERTISEMENT
掐指一算,距離 NVIDIA 發表 GeForce GTX 1080 已有 2 年以上的時間,Pascal 架構同時具備高效能與能源效率,繼任者有何表現相當令人期待。Turing 架構不僅包含傳統光柵化運算特化的硬體單元,更有加速光追蹤技法的 RT 單元,以及機器學習 Tensor 單元。
新.三位一體
此次 NVIDIA 宣布利用 Turing 架構推出 GeForce RTX 2070、GeForce RTX 2080、GeForce RTX 2080 Ti 共 3 款顯示卡,首先由 GeForce RTX 2080 作為先鋒,於 9 月 20 日上市,GeForce RTX 2080 Ti 則延遲至 9 月 27 號,GeForce RTX 2070 將於 10 月發售。
Turing 世代晶片設計不僅包含更新過的 SM 核心設計,另外針對市場應用趨勢,加入特化的硬體加速單元,Tensor 核心用以執行與機器學習高度相關的矩陣運算,RT 核心則負責光追蹤運算當中,佔有重要地位的 BVH 和光線與物件三角形互動。編輯手中也拿到 GeForce RTX 2080、GeForce RTX 2080 Ti 2 款 Founders Edition 產品,就讓我們抽絲剝繭,從設計到硬體,從硬體到效能一層層揭開面紗。
改良 SM 設計
Turing 架構之中,每個 TPC(Texture Processor Cluster、材質處理叢集)內部包含 2 個 SM,並根據顯示卡等級不同調整數量,譬如 Quadro RTX 6000 為 TU102 最完整的 36 個 TPC、GeForce RTX 2080 Ti 則削減為 34 個 TPC、GeForce RTX 2080 的 TU104 再減為 23 個 TPC。
▲Pascal 與 Turing 世代不同型號顯示卡規格比較。(註:峰值效能以超頻時脈計算)
▲TU102 功能方塊圖。
▲TU102 實際晶粒照片。
Turing 每個 TPC 內部共有 2 個 SM(Streaming Multiprocessor),並改善 SM 內部架構組成,官方表示相對於 Pascal 架構版本,單一 CUDA 核心的運算效能提升 50% 之譜(Pascal 單一 TPC 僅包含 1 個 SM)。其中有 2 個主要的進步,其一為新增獨立的整數資料路徑,讓整數指令可以隨著浮點資料路徑一同處理;過去的架構則存在整數與浮點數互斥的狀況,當執行整數指令時,指令配發器並沒有辦法 issue 浮點運算工作給後端的運算單元。
其次為 SM 記憶體架構更新,變更為共享式記憶體架構(Shared Memory Architecture),Pascal 為 L1 24KB 快取(供著色器使用)和 96KB 共享記憶體(放置貼圖資料或暫存器資料),Turing SM 將 2 者結合成單一區域,並依據實際運算所需,分成 64KB+32KB 或是 32KB+64KB,存取 L1 頻寬同時上升至 2 倍,L1 的容量最高也多出 1.7 倍。
▲Turing SM 相較 Pascal SM 改良 L1 架構,變更為共享式記憶體,能夠分配成 64KB+32KB 或是 32KB+64KB,並提升 L1 存取頻寬至 2 倍,L2 同時加大 1 倍容量至 6MB。
每個 SM 包含 64 個 FP32 核心、64 個 INT32 核心、8 個 Tensor 核心、1 個 RT 核心(Pascal 缺少後 3 者,單一 SM 包含 128 個 FP32 核心);以目前遊戲運算平均值,大約每 100 個浮點運算指令,就有 36 個整數運算指令,整數運算多為記憶體定址和擷取資料工作,浮點運算則為比較、最大值、最小值等數學運算。整數與浮點運算能夠同步作業,相對而言浮點數效能提升 36%。
▲TU102、TU104、TU106 單一 SM 功能區塊圖。
▲多款遊戲平均下來,大約每 100 個浮點運算就有 36 個整數運算,而 Turing 架構可以同時處理這 2 個部分。
Tensor 機器學習
NVIDIA 在 Volta 架構首次導入用於機器學習的專用處理單元 Tensor,這次也放入 Turing 架構當中,並隨著 Microsoft 發表 DirectML,未來 Tensor 能夠以硬體加速 Windows Machine Learning 相關作業。對於遊戲來說,也可以期待與電腦 AI 對戰時,遇到更為千變萬化的戰略。
Tensor 除了可以支援 FP16 浮點數運算,Turing 世代更加入 INT8 和 INT4 的支援能力,讓可以容忍較低精度的應用提升處理速度。Tensor 針對機器學習經常使用的矩陣運算最佳化,單一 SM 內部包含 8 個 Tensor 核心,每個時脈週期可以完成 512 個 FP16 乘法與積運算,或是總額 1024 個浮點運算,將精度調低至 INT8 則能夠完成 2048 個運算。
Tensor 以硬體加速方式完成 NVIDIA 自己的 NGX(Neural Graphics Acceleration),包含近期轟炸各位腦袋的深度學習超取樣反鋸齒(Deep Learning Super Sampling、DLSS),原本利用著色器運算效能進行的反鋸齒技術,將部份工作轉移至 Tensor 核心進行。透過機器學習訓練,DLSS 可以提供比 TAA(Temporal Anti-Aliasing)更高的畫面品質,或是在減少輸入樣本的情形之下,提供與 TAA 相同的 4K 畫面品質,卻只要 TAA 一半的運算資源。
DLSS 需要經過機器學習訓練這一道關卡,因此並非所有遊戲均支援,筆者將支援遊戲整理成下方列表。首先,針對遊戲畫面以 64 倍超級取樣的方式進行繪製,表示每個像素不僅繪製 1 次,還透過位移方式繪製其它 63 個取樣點,最終再以 64 個取樣點平均值成為該像素顏色,如此這般繪製出具備反鋸齒效果的畫面。
▲預計支援 DLSS 的遊戲列表。
▲DLSS 在 4K 解析度可以提供類似於 4 倍 TAA 的效果,效能卻是 2 倍。
接著再利用同一場景、沒有經過反鋸齒處理的遊戲畫面,輸入 DLSS 並要求輸出 1 張畫面,比對 64 倍超級取樣遊戲畫面與 DLSS 輸出,觀察哪些地方做得不好,再回頭修正 DLSS 內部演算法權重。重複幾次上述步驟,DLSS 就會知道該如何處理遊戲畫面,產出 1 張與 64 倍超級取樣相近的畫面,並同時避免 TAA 無法解決的模糊、錯位、半透明等缺失。
DLSS 另外還有個 2 倍 DLSS 模式,首先以目標解析度繪製 1 張畫面,接著再以更大的 DLSS 網路輸出 1 張極為近似 64 倍超級取樣的畫面。簡而言之,DLSS 追求效能與畫面輸出速率的平衡,提供 4 倍 TAA 畫質,2 倍 DLSS 則是追求畫面的極致,提供近似 64 倍超級取樣畫質。
▲64 倍超級取樣可以提供無與倫比的畫面品質,但因為計算量過大無法實作並維持一定的畫面輸出速率,如今 2 倍 DLSS 能夠提供極為接近的畫質表現並維持相當效能。
Tensor 核心機器學習的應用還不只於此,更能夠移除畫面中不需要的物件並填補背景,亦或是從殘缺的畫面資訊推算出整張畫面,後者對於支援即時光追蹤相當重要。目前(甚至是未來數年)遊戲依然以光柵化為主、小區域光追蹤為輔,但光追蹤運算量相當大,RT 核心無法在 1/60 秒之內提供完整運算結果,此時就要依靠 Tensor 核心,以不完整的光追蹤運算結果,推導剩餘未完成的畫面。
RT 光追蹤運算
光柵化運算相信大家並不陌生,先行判斷 3D 場景內部物件的前後順序,被擋住看不到的物件剃除減少運算量,接著再為這些物件貼上材質貼圖。在過去幾十年當中,這是個相當有效且快速繪製 3D 畫面的方式,廣泛應用於遊戲當中。
另一方面,若是相當要求畫面品質,如 3D 動畫、電影特效,則需要採用光追蹤運算方式,以數學方程式描述光的物理性質,包含光如何在物體表面吸收、反射、繞射,或是透明物體的折射等。光追蹤運算量相當大,因此較常見到利用多台伺服器算圖農場,在較沒有時間壓力的情況下繪製畫面,接著再結合這些畫面變成 1 段影片。
▲光柵化與光追蹤的原理差異簡圖。
NVIDIA 在 Turing 架構當中放入專門負責光追蹤運算的 RT 核心,RT 核心主要用來加速 BVH(Bounding Volume Hierarchies)遍歷,以及光和物件三角形之間的交互關係。RT 核心主要有 2 個特化處理單元,其中之一負責 bounding box/bounding volume 的測試、之二負責光線與三角形測試,SM 只要發出光探測指令,接下來 RT 核心就會回報光是否命中物件,再交由 SM 完成著色動作。
▲RT 核心負責複雜的 bounding box 測試和光-三角形測試,接著回報 SM 是否命中,由 SM 完成著色動作,若沒有命中物件模型則以其它方式產生顏色(如背景顏色)。
既然光追蹤運算量龐大又複雜,為何 Turing 要導入 RT 硬體加速?原因在於光柵化效率雖然相當好,卻無法模擬真實世界的狀況,譬如透明物體的折射、鏡面反射等相當基礎的物理現象。以往遊戲當中的鏡面反射特效,若是場景複雜度不高,可以在鏡面裡實際建立 1 個左右相反的場景並繪製,但多數時間是以 cube mapping 技巧,預先將周圍環境繪製成貼圖,再貼至鏡面物件,並根據視角移動、縮小放大。
▲透過 cube mapping,能夠做到光柵化無法達成的環境反射。(圖片取自 NVIDIA)
若是場景物件位置移動更新,也可以利用 cube mapping 技巧生成另外 1 組貼圖,以便將 3D 場景物件移動反應在鏡面反射內容,但在變化度相當高的場景,如自由移動車輛、可破壞式物件等,無限量產出 cube mapping 貼圖並不實際,此時就需要即時光追蹤運算,即時根據場景變化計算環境反射。
▲即將推出的 Battlefield V(戰地風雲 5)爆炸場景是最為顯著的例子,戰車履帶位於爆炸效果前方,光柵化並無法提供車輛板金的反射效果,此時就需要光追縱運算的幫助。
現實環境光源大多具有體積,當陰影距離物體越遠時,邊緣就會越模糊,光柵化可以利用多個技巧模擬,如陰影貼圖邊緣柔化等,但是當光源與物體之間距離變化時就會破功不自然,此時也是光追縱運算出馬的時候。
▲Shadow of the Tomb Raider(古墓奇兵:暗影)未來也會推出更新檔,利用光追蹤運算產生陰影和環境光遮蔽效果。
當然,Turing 內建的 RT 核心效能還無法讓整個 3D 畫面都使用光追蹤運算,絕大部分依然採用光柵化,少部分區域加入光追蹤效果。即便僅少部分畫面採用光追蹤技術,運算量依然不小,NVIDIA 採用偷吃步的方式降低光追蹤光線數量,能夠在一定時限之內送出運算結果,並替光線數量不足形成的雜訊畫面,以 AI 或是非 AI 演算法去除雜訊,並朝全面 AI 去雜訊方向邁進。
▲Star Wars 星際大戰電梯展示影片,仔細觀察依舊可以發現不自然的地方,但這個結合 DLSS 和即時光追蹤運算的結果,已有電影級視覺享受。
新型渲染技術
新硬體能夠帶來新功能,而舊有繪製畫面流程,也可以透過最佳化提升效能,NVIDIA 這次隨著發表 Turing 架構顯示卡,提出多個處理技巧,Mesh Shading 就是其中之一。我們都知道若要提升畫面繪製速度,可以降低遠方物件的精細度,但 CPU 在此還是要負責計算 LOD(Level Of Detail)和物件剃除工作,形成繪圖流程當中,限制畫面物件數量的瓶頸。
Mesh Shading 是 NVIDIA 進階幾何處理架構,旨在提供頂點與曲面細分渲染模型與繪圖管線的幾何渲染階段,可以把 LOD 運算和物件剃除工作交由平行化處理能力相當高的 GPU 執行,降低處理器的負荷量。原本每個物件都需要 1 個 CPU draw call,如今開發者 1 次可以送出 1 個物件清單,交由 Task Shader 以平行化方式處理。
▲有了 Task Shader 和 Mesh Shader 之後,原本由 CPU 負責的 LOD 和物件剃除,將轉移到 GPU 進行運算。
▲採用 Meshing Shading 技術,便可在 Asteroids 示範程式場景放入成千上萬個物件。
NVIDIA 因應 VR 應用環境,於前代 Maxwell 架構導入 MRS(Multi-Res Shading),Pascal 再導入 LMS(Lens-Matched Shading),前者依據 VR 頭戴式顯示器的特點,降低邊緣畫面的繪製解析度以便提升效能,後者則是讓頭戴顯示器內部透鏡造成畫面變形現象,預先修正繪製畫面,讓畫面透過鏡片後可以獲得正常不扭曲的觀看效果。
Turing 架構導入稱為 VRS(Variable Rate Shading)的技術,將畫面以 16x16 像素分為多個區域,開發者可以指定部分區域渲染結果與像素點以 1:1 繪製(1x1),或是使用 1 個渲染結果填滿 4 個點(2x2),亦可選擇非正方形的方式填滿(1x2 或是 2x1),如此一來就可以降低 GPU 渲染運算壓力,提供較高的畫面輸出速率。
▲Variable Rate Shading 將畫面以 16x16 像素為單位,分割成許多區域,單一區域可依據實際需求降低渲染解析度。
在 VRS 技術之後可以達成 3 種渲染方式,第一種為 Content Adaptive Shading,若 16x16 像素區域的貼圖細節不高,便可採用單一渲染結果填滿更多像素點。第二種則是由於人眼動態視覺限制,無法看清移動中的物體,此物體也可以採用較低的渲染解析度節省運算資源。最後 1 種則是 Foveated Rendering,透過人眼視網膜中央解析度較高,越往外圍解析度較低的特性,若電腦能夠掌握人眼位置(透過其它追蹤技術,如 Tobii Eye Tracking),便能夠以較低解析度渲染視覺焦點中心以外的區域。
▲Content Adaptive Shading 可以根據切割畫面區域的細節多寡,於下一張畫面降低渲染的解析度。
(下一頁:GDDR6、加強眾多功能)
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!