新聞中心

EEPW首頁 > 智能計算 > 設計應用 > 萬字長文解讀 AMD 的 GPU 架構 GCN

萬字長文解讀 AMD 的 GPU 架構 GCN

作者:chipsandcheese時間:2024-01-25來源:半導體產業縱橫收藏

隨著 HD 5000 和 6000 系列的發展, 的 Terascale(萬億級)架構變得非常具有競爭力。然而在 2010 年代初,面向通用計算的 趨勢興起, 并不希望錯失這個機會。Terascale 的 SIMD 引擎是 ATI 的 DirectX 9 時代 中執行單元的遠親。他們可以進行計算,但利用其能力卻不一定總能成功。英偉達的 Fermi 架構具有強大的計算能力, 不想毫無抵抗就放棄一塊有潛力的市場。

本文引用地址:http://www.7menf.com/article/202401/455097.htm

Graphics Core Next(GCN)徹底摒棄了以通用計算的可預測性能為核心的 Terascale 策略。雖然 Terascale 的 64 寬波前仍然存在,但 GCN 的其他特點卻截然不同,以至于它甚至不能算作一個遠親。GCN 的指令集類似于典型的 CPU 或英偉達的 Fermi。為了將這些責任轉移到硬件上,顯式調度信息已被移除。線程內的執行嚴格遵循標量,摒棄了 Terascale 從單個線程每周期發出多個操作的能力。

GCN 首次亮相市場是在 Tahiti 芯片上,這是一款采用臺積電 28 納米工藝制造的 352 平方毫米芯片。Tahiti 配備 384 位 GDDR5 接口與顯存連接,并升級為與主機的 PCIe 3.0 鏈接,使其比 AMD 之前的 Cayman 具有更高的片外帶寬。自 2011 年發布以來,GCN 衍生架構為 AMD 的產品提供服務長達十年。從 Tahiti 到 2021 年的 Cezanne,GCN 經歷了大量演變,但保留了其可識別的計算單元結構。因此,GCN 是歷史最悠久的圖形架構之一。即使在今天,GCN 的 DNA 仍然延續在 AMD 面向計算的 CDNA 中。CDNA 線路取消了部分 GCN 的圖形功能,將重心轉向 FP64,但仍然是一個可識別的 GCN 衍生產品。

Radeon HD 7950 使用稍微縮減的 Tahiti 芯片

這篇文章將重點關注 GCN 早期 Tahiti 和 Hawaii 的發展情況。這里有來自 AMD Radeon HD 7950 的數據,它使用了稍微精簡的 Tahiti 芯片。Hawaii 是 GCN 的放大版。它于一年后推出,對最初的 GCN 架構進行了輕微增強,旨在與英偉達當時最大的 GPU 競爭。

MSI 的 Radeon R9 390 采用開放式空氣冷卻器

Hawaii 首先推出了 R9 290 系列,但是會優先考慮 R9 390。這是一個稍微精簡的 Hawaii 芯片,配有 8 GB 的 VRAM。

系統架構

GCN 的基本構建模塊是計算單元(CU)。Tahiti 的著色器陣列由 32 個 CU 組成,HD 7950 啟用了 28 個。每個 CU 都有一個專用的 16 KB 向量緩存和 64 KB 本地數據共享,但與多達四個相鄰 CU 共享一個指令緩存和標量緩存。

計算單元陣列可以由圖形命令處理器或異步計算引擎(ACEs)提供,具體取決于工作是在圖形隊列上提交還是在計算隊列上提交。對于計算工作負載,每個 ACE 可以在每個周期啟動一個波前。Tahiti 有兩個 ACE,讓它在 GPU 上每個周期發射兩個波前。

對于圖形工作負載,GCN 的光柵化器消耗由頂點著色器導出的屏幕空間坐標。它們每個時鐘可以處理一個基元,每個周期可以寫出多達 16 個像素,因此每個光柵化器每四個周期可以發射一個 64 寬度的波前。Tahiti 有兩個光柵化器,讓它每兩個周期發射一個像素波前。屏幕空間在兩個光柵器之間劃分,反映了 Cayman 的兩個圖形引擎的方法。Hawaii 使用了四個光柵化器,使其更快地填充著色器陣列。

計算工作負載將其結果寫入 VRAM,供未來的內核使用或復制回主機。對于圖形,像素著色器導出被發送到渲染后端。Tahiti 上的每個渲染后端都有一個 16 KB 顏色緩存和一個 4 KB 深度緩存。最終像素顏色被寫入內存控制器并繞過二級緩存。與 Terascale 不同的是,渲染后端與內存控制器分離,并且可以獨立于內存總線寬度進行縮放。

GCN 的計算單元

GCN 的計算單元與 Terascale 的 SIMD 大致相當。兩者每周期都可以完成 64 次 FP32 運算,如果將熔合乘加運算計為兩次,則是原來的兩倍。然而,AMD 已完全重組了這個基本構建模塊,將 VLIW 捆綁打包從圖片中提出。計算單元由四個較小的 SIMD 組成,而不是一個能夠發出四次指令的大型 SIMD。每個 SIMD 都有自己的 64 KB 向量寄存器文件和 10 項調度程序分區。線程內的執行現在是完全標量的,這意味著 CU 不能從同一線程的每個周期發出多條指令。然而,如果 SIMD 的調度程序分區中有多個線程已就緒,并且每個線程的就緒指令都發送到單獨的功能單元,那么 CU 可以每周期發射多達五個指令。

計算單元前端

計算單元(CU)的流水線從 32 KB、4 路組相聯的 L1 指令緩存中提取指令開始。指令緩存使用 64 字節行,與 CPU 上常見的緩存行大小保持一致。一個指令緩存實例可由最多四個相鄰的計算單元共享,并可在每個周期向每個計算單元提供 32 字節。這可能是通過四分組的設置實現的,因此存儲器分組沖突可能減少指令帶寬。

Terascale 3 在多達四個 SIMD 之間共享一個 48 KB 的 ALU 指令緩存,這與 GCN 有一定的相似性。由于 GCN 的可變長度指令平均需要較少的存儲空間,AMD 得以將指令緩存大小削減到 32 KB。Terascale 3 使用了固定長度的 64 位指令。一束指令的長度可以根據編譯器打包的指令數量和立即值的多少而變化,范圍從 64 位到 384 位。GCN 的指令長度為 32 位或 64 位,后面可以選擇逐添 1 個 32 位立即值。

指令帶寬需求可視化

英偉達的 Kepler 使用 8 KB 的指令緩存,專用于每個 SMX。私有緩存更適合處理 Kepler 的高指令帶寬需求。一個 SMX 需要每周期至少傳輸 6 條指令以滿足其 192 個 FP32 單元的需求,因為英偉達的每條指令在 32 個 32 位元素的長向量上進行操作。使用固定長度的 64 位指令,根據每條指令的靜態調度信息字節計算,Kepler 的指令緩存每周期需要提供 48 或 54 字節的指令。GCN 的計算單元每個周期只需要執行一條指令就可以使其向量執行單元飽和,這既是因為它的向量執行單元較少,也是因為每條 GCN 指令都在一個 64 長的向量上操作。

調度和指令發布

一旦指令被獲取,它們將保存在一組指令緩沖區中。計算單元的四個 SIMD 中的每一個都有一個 10 項的緩沖區,使其能夠跟蹤來自最多 10 個獨立線程的指令。因此,整個計算單元可以跟蹤 40 個線程(或波前)。對于 64 寬波前,計算單元可以在運行中執行 2560 個 32 位操作。

每個周期,計算單元選擇一個 SIMD 并掃描它的 10 個線程,以查看是否有準備好執行的線程。GCN 可以通過選擇多個線程并發布不同類別的指令來實現有限的多發射能力。例如,一個線程的標量算術邏輯單元 ALU(Arithmetic Logic Unit)指令可以與另一個線程的向量 ALU 指令同時發射。理論上,一個計算單元每個周期可以發出 5 條指令。但是如此高的發布率應該是罕見的,因為工作負載不太可能有來自不同類別的指令的均勻混合。高占用率對充分利用這種多發射策略至關重要。如果 SIMD 有更多線程可以選擇,它將更有可能找到具有正確指令混合的多個線程以實現多發射。

假設達到理論占用率

GCN 的策略與 Terascale 形成鮮明對比,Terascale 強調從單個線程的多發射,這給編譯器帶來了巨大的負擔。編譯器必須找到在打包成捆時既獨立又不過度占用寄存器文件端口的指令。GCN 轉向使用線程級并行性意味著編譯器可以忽略這些硬件細節。英偉達的 Kepler 采用了一種折中的方法。寄存器組沖突由硬件操作數收集器處理。編譯器負責在指令流中為雙發射標記成對的指令,但雙發射真正起到錦上添花的作用。與 Terascale 相比,即使不進行多發射,Kepler 也能保持更好的吞吐量。

盡管 GCN 失去了從單個線程進行多發射的能力,但它從一個線程發出請求的次數比 Terascale 要多。一個 Terascale SIMD 有 16 個線程寬,每四個周期可以發射一個捆綁包,但不能連續執行來自同一線程的兩個捆綁包。因此,Terascale 需要在一個 SIMD 中至少有兩個線程才能實現最大吞吐量。GCN 則消除了這一限制,因此 SIMD 上的線程可以每四個周期執行一次指令。Terascale 可以實現更高的單線程吞吐量,但前提是編譯器在將指令打包成捆綁包時做得足夠好。

在沒有寄存器組沖突和依賴延遲的情況下線程的發射速度的粗略設想。每個框代表一個周期。

與此同時,Kepler 可以迅速處理單個線程。它使用 32 寬的波和 32 寬的執行單元,所以一個線程可以在每個周期發射一條指令。雙發射是錦上添花。因此,面對低占用率和有限的線程級并行性,Kepler 可以保持相當不錯的吞吐量。

寄存器文件

選定的指令從寄存器文件中讀取其輸入。在 GCN 中,Terascale SIMD 的巨大 256 KB 寄存器文件被拆分為四個 64 KB 寄存器文件,每個 GCN SIMD 一個。GCN 的寄存器文件幾乎可以肯定是分組結構,但與 Terascale 相比,應該更少地受到寄存器組沖突的影響。假設仍然是四分組的寄存器文件,GCN 可以提供四個輸入,以供給可能需要多達三個輸入的指令(用于熔合乘加)。如果指令從標量寄存器或指令流中的立即值獲取輸入,對向量寄存器文件的帶寬需求可能會較低。最重要的是,GCN 可能有一個操作數收集器,可以在偶爾出現存儲器分組沖突的情況下,消除對寄存器文件帶寬的需求。

Terascale 需要復雜的調度和寄存器分配來實現良好的利用率。每個 VLIW 通道只能將返回值寫回到其對應的寄存器文件分組中,而在讀取端的任何寄存器組沖突都可能降低 VLIW 打包效果。由于 SMX 的 FP32 單元沒有足夠的寄存器文件帶寬來為 FMA 操作提供數據,因此 Kepler 需要付出更多的努力以實現完全優化。

除了向量寄存器文件外,GCN 計算單元還有一個 8 KB 的標量寄存器文件。如果程序可以將一些變量存儲在標量寄存器中,就可以減少向量寄存器的使用并實現更高的占用率。

執行單元

GCN 中的每個 SIMD 都有一個 16 路寬的執行單元。常見的 FP32 操作和整數加法以全速執行,而 32 位整數乘法和特殊功能以四分之一速率執行。理論吞吐量與 Terascale 3 相似。但是,GCN 不再需要將四條指令打包到每個捆綁包中以飽和計算單元,而是需要至少四個活躍線程來填充其四個 SIMD。

去除貓毛后,準備重新粘貼 R9 390 進行測試。以前的所有者有一只柴色的貓

Terascale 的分支單元被轉換為標量 ALU。盡管 GPU 主要是向量處理器,但它們仍然需要處理控制流和地址生成。這些操作通常在一個向量上是常數,所以標量 ALU 可以卸載這些計算。將這些標量操作移至專用單元有助于減輕向量 ALU 的負載并提高功率效率。

與 Kepler 的 SMX 相比,GCN 的計算單元更小,吞吐量更低。為了彌補這一缺陷,Tahiti 擁有的計算單元數量是 GK104 擁有 SMX 數量的四倍。

HD 7950 的側邊

Hawaii 擴展了著色器陣列,使其可以實現超過 5 TFLOPS 的 FP32 吞吐量。然而,作為未來趨勢的一個標志,Hawaii 的 FP64 性能落后于 Tahiti。GCN 的 FP64 吞吐量可從半速配置到 1/16 速。Tahiti 采用與 GCN 最初計算設想相一致的 1/4 速 FP64 執行進行配置。隨著 GPU 計算在客戶端應用中的重要角色逐漸明確,AMD 對 FP64 執行的投資減少。因此,Hawaii 采用了更普通的 1/8 速 FP64。但即使以 1/8 速,AMD 的客戶端顯卡在 FP64 性能上仍大幅領先于英偉達同類產品。

計算單元數據緩存

AMD 重塑了緩存層次結構,以適應通用工作負載,而非僅專注于圖形。一個 16 KB 的 4 路組相聯向量緩存作為計算單元的主數據緩存。它使用 LRU 替換策略,64B 行,并且每周期可以為計算單元提供 64 字節。Terascale 的 8 KB 只讀紋理緩存可以提供相同的每周期帶寬,但 GCN 享有兩倍的緩存容量和更低延遲訪問。

GCN 的矢量緩存也支持寫入。L1 緩存是直寫、寫分配設計。它不如大多數 CPU 中的回寫緩存好,但 L1 仍然可以在寫入被傳遞到 L2 之前幫助合并寫入。

盡管 GCN 相較于 Terascale 有了巨大的改進,但 Kepler 在向量訪問方面的延遲仍然較低。AMD 希望通過優化部分內存訪問以使用標量路徑,來緩解這一問題。

分析 RX 460 上運行的 Valheim。RX 460 使用北極星,GCN 架構的衍生物

標量存儲器訪問由多達四個相鄰計算單元共享的 16 KB 4 路標量高速緩存提供服務。標量緩存每周期可向每個計算單元傳送 16 個字節,并針對低延遲進行了優化。標量緩存命中的延遲不到 50 納秒,這對于此時的 GPU 世界來說是非??斓?。它與 Terascale 的紋理緩存 200+ ns 的延遲相去甚遠,比開普勒的任何緩存都快,除了它的 2 KB 常量緩存。

與 Terascale 相比,GCN 在計算單元內的緩存策略既現代又靈活。除了對計算工作負載的巨大改進外,GCN 的改變還應有助于圖形處理。將紋理緩存容量從 8 KB 增加到 16 KB 應該會減輕對芯片級互連的負載,并且較低的延遲意味著 GPU 在維持良好性能時需要較少運行中的工作。

描繪 GK104 Kepler。GK210 擁有 128 KB 的 L1 緩存/共享內存

英偉達的 Kepler 架構在緩存策略上既融合了過去的特點,也具備新穎之處,類似于 Fermi 架構。只讀紋理緩存仍然存在。但是 Kepler 還有一個單獨的 L1 數據緩存,它與本地內存共享存儲空間。如果這還不夠,Kepler 的 SMX 還具有私有的兩級常量緩存設置。常量緩存與 GCN 的標量緩存在功能上有一定重疊。但與 Fermi 不同,英偉達的編譯器不再嘗試為跨波形上的常量內存訪問使用常量緩存。您必須使用__constant 限定符顯式標記內存,以便使用常量緩存層次結構。

結果是,Kepler 具有三個獨立的數據緩存路徑,每個路徑都具有足夠的容量來獨立運行。這種緩存策略讓英偉達可以針對特定的工作負載類型專門優化每個緩存。紋理緩存具有極高的 96 路關聯性,并且常量緩存提供了非常低的延遲。但是,為所有內容設置獨立的緩存會占用面積。一個 SMX 擁有 146 KB 的緩存和本地內存。

用于服務不同內存類型的緩存

相比之下,一個 GCN 計算單元有 80 KB 的專用數據緩存和便箋式存儲器。如果將 16 KB 的 L1 標量緩存分配給 4 個 CPU,這個數字會上升到 84 KB。

本地內存

除了全局內存層次結構之外,每個 GCN 計算單元都有一個名為 Local Data Share(LDS)的 64 KB 軟件管理的本地內存。OpenCL 將此內存類型稱為「本地內存」。LDS 的結構與 Terascale 中的類似,但容量翻倍。它包括 32 個存儲器分組,每個分組每周期可以讀取一個 32 位元素,總共每周期實現 128 字節的帶寬。

來自 AMD GCN 的技術文檔

英偉達的 Kepler 會根據 GK104 或 GK210 變體的不同,從一個 64 KB 或 128 KB 的 SRAM 塊中動態分配本地內存和 L1 緩存存儲空間。Nvidia 將本地內存稱為「共享內存」。與 AMD 的實現類似,Nvidia 的共享內存由 32 個存儲器分組組成,但每個分組寬度為 64 位。這為 Kepler 提供了每周期 256 字節的本地內存帶寬,使其更適合處理 64 位數據類型。

正如之前提到的,當在 LDS 內進行指針追蹤時,GCN 的表現出奇地差。Tahiti 的表現比 Cayman(Terascale 3)差。Hawaii 的表現更好,但仍遠不及英偉達同時代的架構。

AMD 的優勢在于通過 LDS 同步線程。內置在 LDS 中的整數原子單元有助于加速這些操作。而英偉達的 Fermi 和 Kepler 架構沒有相應的功能。它們的共享內存非???,但是在原子操作的性能方面仍有很大的改進空間。

二級緩存

與大多數 GPU 一樣,GCN 具有跨 GPU 共享的 L2 緩存。L2 緩存有助于處理 L1 未命中,并分為獨立的分片以提供高帶寬。每個分片具有 64 KB 或 128 KB 的緩存容量,并連接到一個內存控制器通道。Tahiti 和 Hawaii 似乎都使用 64 KB 分片。每周期一個分片可以讀取 64 字節,因此 Tahiti 的 L2 應具有每周期 768 字節的帶寬。因此,在 925 MHz 的 Boost 頻率下,HD 7950 理論上具有 710 GB/s 的 L2 帶寬。在 1 GHz 時,R9 390 具有 1 TB/s 的 L2 帶寬。

Terascale 具有類似的 L2 分片配置,每個分片為 64 KB,每周期提供 64 字節。然而,Terascale 的 L2 只是一個只讀紋理緩存。GCN 的 L2 采用了現代化的寫回設計。寫回緩存只在行被逐出時將寫操作向下一級傳播,從而吸收寫帶寬。此外,GCN 的 L2 分片可以處理原子操作。Terascale 上的原子操作將在單獨的、較小的讀寫緩存中處理,并且性能較差。

關于 GCN 記憶子系統的評論

Terascale 的緩存是基于圖形處理構建的。著色器程序不需要向內存中寫入太多數據,它們的輸出被發送到專用的片上緩沖區。頂點著色器會輸出到參數緩存和位置緩沖區,而像素著色器會將其輸出發送到 ROPs(渲染輸出單元)。

根據 Terascale ISA(指令集架構)手冊,每個著色器程序的輸出都通過專用的片上緩沖區進行傳遞,以盡量減少 VRAM(顯存)寫入。顯然,計算程序無法從這些特殊緩沖區中受益。

計算程序被硬擠進這種現有結構。如果讓 Terascale 在 OpenCL 內核中從內存獲取數據,編譯器會發出頂點獲取或紋理采樣子句。主要的 L1/L2 緩存是只讀紋理緩存,因此寫帶寬表現不佳。

GCN 使緩存層次結構現代化,緩存設置類似于 GPU 上現在有的布局。主要的 L1/L2 緩存得到寫入支持。所有緩存中的標準 64 字節緩存行,可以輕松實現與 CPU 的數據共享。它們還是虛擬地址,只要緩存命中,TLB(轉換后援緩沖)未命中就不可能發生。緩存延遲和帶寬數字相較于 Terascale 都得到了顯著改善。在 28nm 制程時代,GCN 使 AMD 在帶寬方面取得了很大的領先優勢。這與 40nm 制程時代相反,那時 Fermi 通常比 Terascale 顯卡具有更高的帶寬。

隨著 AMD 繼續迭代 GCN,緩存層次結構得到了進一步的現代化。在 GCN 第三代中,只讀標量緩存獲得了寫入支持。Vega 在 GCN 第三代之后問世,并將命令處理器和渲染后端置于 L2 之前。這有助于減少 L2 刷新并提高寫帶寬。

來自 AMD 關于 RDNA 架構的演示

盡管經歷了重大變革,但 Terascale 的部分遺留特性仍然存在。四個計算單元共享指令和標量緩存,有助于減少芯片上用于緩存的面積。這與 Kepler 的方法形成了鮮明對比,在 Kepler 中,設計師全力打造每個 SMX 的緩存。部分原因在于,像與同時代的英偉達競爭產品一樣,GCN 保持了非常高的計算密度。

計算性能(VkFFT)

VkFFT 在多個不同的 GPU 計算 API 中實現了快速傅里葉變換(FFT)。它是一個現代且目前仍在維護的項目,2010 年代初期的 GPU 在完成完整基準測試時可能會遇到困難。但是每個平臺都可以通過前幾個子測試,有足夠的數據展示 GCN 的計算潛力。VkFFT 可能受內存限制較大,而 GCN 的大容量內存總線使其表現出色。

HD 7950 在與 GTX 680 的對比中表現出色。Hawaii 架構的 R9 390 擴大了該優勢。VkFFT 還會輸出預估的帶寬數據,這些數據展示了龐大的 512 位 GDDR5 總線所能帶來的性能。

等一下,Oland 使用 128 位 DDR3 總線在這里是怎么回事?

遺憾的是,Tesla K80 無法參加 Vulkan 基準測試,因為無法讓 Vulkan 在該云實例上工作。幸運的是,OpenCL 幾乎可以在所有設備上運行,而且 VkFFT 也可以使用它。

當大型 GCN 與大型 Kepler 對決時,GCN 極高的計算密度和高內存帶寬使它在每個子測試中保持領先。GK210 的 384 位總線被 Hawaii 的 512 位總線超越。最重要的是,Hawaii 的頻率也更高,略高于 1 GHz。Tesla K80 的運行頻率約為 875 MHz,因為 GK210 芯片必須適應 150W 的功耗范圍。

VkFFT 的預估帶寬數字再次展示了 GCN 在帶寬方面的優勢。Tesla K80 的每個 GK210 芯片只有 240 GB/s 的理論帶寬,而 R9 390 的理論帶寬為 384 GB/s。VkFFT 在 RDNA 2 上進行分析時并不支持緩存,RX 6900 XT 的 4 MB L2 幾乎沒有任何命中。K80 和 R9 390 很可能處于類似的情況。

關于圖形性能的一點說明

對于某些計算工作負載,GCN 的計算密度和高內存帶寬可以讓它在與英偉達 Kepler 架構的競爭中大幅領先。然而,在圖形負載方面可能是另一番情況。GCN 的大規模著色器陣列在具有較長持續時間的大規模工作負載上表現出色。一些圖形工作負載,比如全屏像素著色器,就屬于這一類。然而,較小的工作負載可能會讓 Kepler 占據優勢。

處理簡單幾何圖形的頂點著色器等小型工作負載對任何 GPU 來說都具有挑戰性,但 GCN 比 Kepler 的表現更糟

相對于計算,Kepler 在固定功能圖形硬件上花費更多的面積。GK104 擁有四個光柵化分區,每個分區有兩個 SMX。如果 Kepler 保持與 Fermi 相同的光柵化吞吐量,每個光柵化器每時鐘周期可以處理一個圖元并輸出 8 個像素。為了實現 Kepler 完整的計算吞吐量,每個 SMX 需要為其四個調度分區中的每一個分配至少一個波。在沒有小三角形吞吐量損失的前提下,損失光柵化器可以在 32 個周期內創建訪問 Kepler 所有計算潛力所需的最小像素工作量。Kepler 每個 SMX 調度分區的全部占用(每分區 16 個波)至少需要 512 個周期才能達到。

Tahiti 有兩個光柵化器來為一組 32 個計算單元(CU)提供輸入,即每 16 個計算單元有一個光柵化器。每個光柵化器每時鐘周期可以處理一個圖元,并在每四個周期內創建一個 64 寬的像素工作波。與 Kepler 的 SMX 類似,GCN 的計算單元需要為每個 SIMD 分配至少一個波,以實現完整的吞吐量。光柵化器需要 256 個時鐘周期來實現這一點。達到最大占用率需要 2560 個時鐘周期。

來自 AMD 的 GDC 2018 的演示. GK104 Kepler 的「SE:CU」比例式 1;2

Hawaii 通過增加到四個光柵化器來改善這種情況。對于每個光柵化器的 11 個計算單元,第二代 GCN 可以在 176 個周期內實現每個 SIMD 一個波,以及在 1760 個周期內實現完全占用。然后,像 Vega 64 和 Fury X 這樣的更大型 GCN 實現再次擴展了著色器陣列,將 SE(Shader Engine)與計算單元的比例恢復到 1:16。

放大在 6900 XT 上運行的瓦爾海姆的 RGP 配置文件,顯示了光柵化器填充著色器陣列時的延遲。同樣的情況也適用于 GCN,但 GCN 應該更糟

每線程性能是另一個問題。圖形渲染可能涉及具有有限并行性的序列。與 Terascale 相比,GCN 可能提供更為穩定的每線程性能。但是,Kepler 可以為單個線程提供更多的執行資源,這在具有大量小型繪制調用的序列中非常重要。

放大觀察在 6900 XT 上運行的 Cyberpunk 2077 剖析,顯示具有有限并行性和短周期的小型繪制調用。在這類序列中,Kepler 應該優于 GCN。

因此,高端 GCN GPU 通常在較高分辨率下表現良好。渲染更多像素意味著更多的并行性,這使得線程啟動速率和每線程執行時間相較于 GPU 的整體吞吐量變得不那么重要。

寫在最后

GCN 是一個完全現代化的架構。該設計的調度、執行單元布局和緩存設置與 RDNA 3 和英偉達的 Ada Lovelace 具有更多共同點,而不像其直接前身 Terascale 3。與最近的 GPU 一樣,GCN 的設計在計算和圖形方面都具有很好的定位。然而,AMD 側重于計算的轉變并未取得成功。與英偉達的生態系統優勢相比,GCN 的通用設計并沒有太大意義。CUDA 在 OpenCL 之前成熟,并附帶一套預優化的庫。更糟糕的是,GPU 計算在消費者領域并未蒸蒸日上。游戲性能仍然是最重要的。

MSI 的 R9 390 使用雙槽冷卻器和五個熱管來冷卻 Hawaii 芯片

在 2010 年代初至中期,光柵化圖形繼續主導游戲市場。AMD 在 Hawaii 中擴展了 GCN 的工作分配硬件,但英偉達在 Maxwell 和 Pascal 中取得了巨大的提升。GCN 在性能和能效方面仍然難以與之匹配。

AMD 希望您編寫計算著色器

雖然這對 2012 年的 AMD 來說可能沒什么慰藉,但現代趨勢已經證實了 GCN 設計的合理性。固定功能圖形硬件仍然重要,但游戲已逐漸趨向于使用更多的計算。光線追蹤是一個廣為人知的例子。光線追蹤基本上是一種計算工作負載,它不使用光柵化器。然而,即使沒有光線追蹤,計算著色器也在現代游戲中悄然發揮著更大的作用?,F代設計采用了 GCN 設計的一些元素。RDNA 保留了標量數據路徑,并使用了類似的指令集。英偉達在其 Turing 架構中加入了標量路徑(稱為統一數據路徑),并將其保留在后續設計中。

如今,得益于更高的顯存容量,HD 7950 比 GTX 680 更具可用性。GCN 的設計也更傾向于大型、長時間運行的內核,因為這可以讓 GCN 的大型著色器陣列更好地發揮作用,同時減輕了光柵化器快速啟動波前來填充它的壓力。這使得 Tahiti 更有能力應對新游戲帶來的更高著色器工作負載。R9 390 也是如此。幾個月前,我收到了一位朋友的朋友不再使用的這款顯卡,但這并不是因為這款顯卡性能不足。相反地,這款 R9 390 為他效力的時間太長,以至于散熱膏都已經干掉,導致性能極度降低。



關鍵詞: AMD GPU

評論


相關推薦

技術專區

關閉
无码国产福利AV私拍|AV边做边流奶水无码免费|2021国自拍产精品视频|中文中文字幕不卡人妻|亚洲肥婆艳情片