https://www.extremetech.com/gaming/269335-how-graphics-cards-work
作者 | Joel Hruska
譯者 | Andy Song (pinewall) ????共計翻譯:36 篇 貢獻時間:162 天
自從 3dfx 推出最初的 Voodoo 加速器以來,不起眼的顯示卡對你的 PC 是否可以玩遊戲起到決定性作用,PC 上任何其它裝置都無法與其相比。其它元件當然也很重要,但對於一個擁有 32GB 記憶體、價值 500 美金的 CPU 和 基於 PCIe 的儲存裝置的高階 PC,如果使用 10 年前的顯示卡,都無法以最高解析度和細節質量執行當前最高品質的遊戲,會發生卡頓甚至無響應。顯示卡(也常被稱為 GPU,即圖形處理單元),對遊戲效能影響極大,我們反覆強調這一點;但我們通常並不會深入瞭解顯示卡的工作原理。
出於實際考慮,本文將概述 GPU 的上層功能特性,內容包括 AMD 顯示卡、Nvidia 顯示卡、Intel 整合顯示卡以及 Intel 後續可能釋出的獨立顯示卡之間共同的部分。也應該適用於 Apple、Imagination Technologies、Qualcomm、ARM 和其它顯示卡生產商釋出的移動平臺 GPU。
我們為何不使用 CPU 進行渲染?
我要說明的第一點是我們為何不直接使用 CPU 完成遊戲中的渲染工作。坦率的說,在理論上你確實可以直接使用 CPU 完成渲染工作。在顯示卡沒有廣泛普及之前,早期的 3D 遊戲就是完全基於 CPU 執行的,例如 《地下創世紀(下文中簡稱 UU)。UU 是一個很特別的例子,原因如下:與《毀滅戰士相比,UU 具有一個更高階的渲染引擎,全面支援“向上或向下看”以及一些在當時比較高階的特性,例如紋理對映。但為支援這些高階特性,需要付出高昂的代價,很少有人可以擁有真正能執行起 UU 的 PC。
地下創世紀,圖片來自 GOG[1]
對於早期的 3D 遊戲,包括《半條命》和《雷神之錘 2》在內的很多遊戲,內部包含一個軟體渲染器,讓沒有 3D 加速器的玩家也可以玩遊戲。但現代遊戲都棄用了這種方式,原因很簡單:CPU 是設計用於通用任務的微處理器,意味著缺少 GPU 提供的專用硬體和功能。對於 18 年前使用軟體渲染的那些遊戲,當代 CPU 可以輕鬆勝任;但對於當代最高品質的遊戲,除非明顯降低景象質量、解析度和各種虛擬特效,否則現有的 CPU 都無法勝任。
什麼是 GPU ?
GPU 是一種包含一系列專用硬體特性的裝置,其中這些特性可以讓各種 3D 引擎更好地執行程式碼,包括形狀構建,紋理對映,訪存和著色器等。3D 引擎的功能特性影響著設計者如何設計 GPU。可能有人還記得,AMD HD5000 系列使用 VLIW5 架構;但在更高階的 HD 6000 系列中使用了 VLIW4 架構。透過 GCN (LCTT 譯註:GCN 是 Graphics Core Next 的縮寫,字面意思是“下一代圖形核心”,既是若干代微體系結構的代號,也是指令集的名稱),AMD 改變了並行化的實現方法,提高了每個時鐘週期的有效效能。
“GPU 革命”的前兩塊奠基石屬於 AMD 和 NV;而“第三個時代”則獨屬於 AMD。
Nvidia 在釋出首款 GeForce 256 時(大致對應 Microsoft 推出 DirectX7 的時間點)提出了 GPU 這個術語,這款 GPU 支援在硬體上執行轉換和光照計算。將專用功能直接整合到硬體中是早期 GPU 的顯著技術特點。很多專用功能還在(以一種極為不同的方式)使用,畢竟對於特定型別的工作任務,使用片上專用計算資源明顯比使用一組可程式設計單元要更加高效和快速。
GPU 和 CPU 的核心有很多差異,但我們可以按如下方式比較其上層特性。CPU 一般被設計成盡可能快速和高效的執行單執行緒程式碼。雖然 同時多執行緒(SMT)或 超執行緒(HT)在這方面有所改進,但我們實際上透過堆疊眾多高效率的單執行緒核心來擴充套件多執行緒效能。AMD 的 32 核心/64 執行緒 Epyc CPU 已經是我們能買到的核心數最多的 CPU;相比而言,Nvidia 最低端的 Pascal GPU 都擁有 384 個核心。但相比 CPU 的核心,GPU 所謂的核心是處理能力低得多的的處理單元。
註意: 簡單比較 GPU 核心數,無法比較或評估 AMD 與 Nvidia 的相對遊戲效能。在同樣 GPU 系列(例如 Nvidia 的 GeForce GTX 10 系列,或 AMD 的 RX 4xx 或 5xx 系列)的情況下,更高的 GPU 核心數往往意味著更高的效能。
你無法只根據核心數比較不同供應商或核心系列的 GPU 之間的效能,這是因為不同的架構對應的效率各不相同。與 CPU 不同,GPU 被設計用於平行計算。AMD 和 Nvidia 在結構上都劃分為計算資源塊。Nvidia 將這些塊稱之為流處理器(SM),而 AMD 則稱之為計算單元(CU)。
一個 Pascal 流處理器(SM)。
每個塊都包含如下元件:一組核心、一個排程器、一個暫存器檔案、指令快取、紋理和 L1 快取以及紋理對映單元。SM/CU 可以被認為是 GPU 中最小的可工作塊。SM/CU 沒有涵蓋全部的功能單元,例如影片解碼引擎,實際在螢幕繪圖所需的渲染輸出,以及與板載視訊記憶體(VRAM)通訊相關的記憶體介面都不在 SM/CU 的範圍內;但當 AMD 提到一個 APU 擁有 8 或 11 個 Vega 計算單元時,所指的是(等價的)矽晶塊數目。如果你檢視任意一款 GPU 的模組設計圖,你會發現圖中 SM/CU 是反覆出現很多次的部分。
這是 Pascal 的全平面圖
GPU 中的 SM/CU 數目越多,每個時鐘週期內可以並行完成的工作也越多。渲染是一種通常被認為是“高度並行”的計算問題,意味著隨著核心數增加帶來的可擴充套件性很高。
當我們討論 GPU 設計時,我們通常會使用一種形如 4096:160:64 的格式,其中第一個數字代表核心數。在核心繫列(如 GTX970/GTX 980/GTX 980 Ti,如 RX 560/RX 580 等等)一致的情況下,核心數越高,GPU 也就相對更快。
紋理對映和渲染輸出
GPU 的另外兩個主要元件是紋理對映單元和渲染輸出。設計中的紋理對映單元數目決定了最大的紋素輸出以及可以多快的處理並將紋理對映到物件上。早期的 3D 遊戲很少用到紋理,這是因為繪製 3D 多邊形形狀的工作有較大的難度。紋理其實並不是 3D 遊戲必須的,但不使用紋理的現代遊戲屈指可數。
GPU 中的紋理對映單元數目用 4096:160:64 指標中的第二個數字表示。AMD、Nvidia 和 Intel 一般都等比例變更指標中的數字。換句話說,如果你找到一個指標為 4096:160:64 的 GPU,同系列中不會出現指標為 4096:320:64 的 GPU。紋理對映絕對有可能成為遊戲的瓶頸,但產品系列中次高階別的 GPU 往往提供更多的核心和紋理對映單元(是否擁有更高的渲染輸出單元取決於 GPU 系列和顯示卡的指標)。
渲染輸出單元(ROP),有時也叫做光柵操作管道是 GPU 輸出彙整合影象的場所,影象最終會在顯示器或電視上呈現。渲染輸出單元的數目乘以 GPU 的時脈頻率決定了畫素填充速率。渲染輸出單元數目越多意味著可以同時輸出的畫素越多。渲染輸出單元還處理抗鋸齒,啟用抗鋸齒(尤其是超級取樣抗鋸齒)會導致遊戲填充速率受限。
視訊記憶體頻寬與視訊記憶體容量
我們最後要討論的是視訊記憶體頻寬和視訊記憶體容量。視訊記憶體頻寬是指一秒時間內可以從 GPU 專用的視訊記憶體緩衝區內複製進或複製出多少資料。很多高階視覺特效(以及更常見的高解析度)需要更高的視訊記憶體頻寬,以便保證足夠的幀率,因為需要複製進和複製出 GPU 核心的資料總量增大了。
在某些情況下,視訊記憶體頻寬不足會成為 GPU 的顯著瓶頸。以 Ryzen 5 2400G 為例的 AMD APU 就是嚴重頻寬受限的,以至於提高 DDR4 的時脈頻率可以顯著提高整體效能。導致瓶頸的視訊記憶體頻寬閾值,也與遊戲引擎和遊戲使用的解析度相關。
板載記憶體大小也是 GPU 的重要指標。如果按指定細節級別或解析度執行所需的視訊記憶體量超過了可用的資源量,遊戲通常仍可以執行,但會使用 CPU 的主存來儲存額外的紋理資料;而從 DRAM 中提取資料比從板載視訊記憶體中提取資料要慢得多。這會導致遊戲在板載的快速訪問記憶體池和系統記憶體中共同提取資料時出現明顯的卡頓。
有一點我們需要留意,GPU 生產廠家通常為一款低端或中端 GPU 配置比通常更大的視訊記憶體,這是他們為產品提價的一種常用手段。很難說大視訊記憶體是否更具有吸引力,畢竟需要具體問題具體分析。大多數情況下,用更高的價格購買一款僅是視訊記憶體更高的顯示卡是不划算的。經驗規律告訴我們,低端顯示卡遇到視訊記憶體瓶頸之前就會碰到其它瓶頸。如果存在疑問,可以檢視相關評論,例如 4G 版本或其它數目的版本是否效能超過 2G 版本。更多情況下,如果其它指標都相同,購買大視訊記憶體版本並不值得。
檢視我們的極致技術探索[2]系列,深入瞭解更多當前最熱的技術話題。
via: https://www.extremetech.com/gaming/269335-how-graphics-cards-work
作者:Joel Hruska[4] 選題:lujun9972 譯者:pinewall 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出