隨著GPU 計算用例的快速增長,對圖形處理單元 (GPU) 的需求激增。事實上,對 GPU 的需求一直很高,短缺現在很常見。在這里,我們將深入了解 Nvidia GPU 的架構,以幫助您了解 GPU 的工作原理以及它們為何非常適合眾多現代應用程序。
GPU的基本架構
正如我們在GPU 與 CPU:主要區別是什么?,GPU 使用許多輕量級處理核心,利用數據并行性,并具有高內存吞吐量。雖然具體組件因型號而異,但從根本上說,大多數現代 GPU 使用單指令多數據 (SIMD) 流架構。要理解這意味著什么——以及它為什么重要——讓我們看一下 Flynn 的分類法。
什么是弗林分類法?
Flynn's Taxonomy 是斯坦福大學的 Michael J. Flynn 對計算機體系結構進行的分類。弗林分類法背后的基本思想很簡單:計算由 2 個流(數據和指令流)組成,可以按順序(一次 1 個流)或并行(一次處理多個流)處理。兩個數據流和兩種可能的處理方法導致弗林分類法中的 4 個不同類別。讓我們逐一看看。
單指令單數據 (SISD)
SISD 流是一種架構,其中單個指令流(例如程序)在一個數據流上執行。這種架構用于具有單核處理器的舊計算機以及許多簡單的計算設備。
單指令多數據 (SIMD)
SIMD 流架構具有單個控制處理器和指令存儲器,因此在任何給定時間點只能運行一條指令。該單條指令被復制并同時在每個內核上運行。這是可能的,因為每個處理器都有自己的專用內存,允許在數據級別進行并行處理(也稱為“數據并行處理”)。SIMD 的根本優勢在于數據并行性使其能夠快速(多個處理器做同一件事)和高效(只有一個指令單元)執行計算。
多指令單數據 (MISD)
MISD 流架構實際上是 SIMD 架構的逆向。使用 MISD,多個指令在同一數據流上執行。今天 MISD 的用例非常有限。其他架構之一可以更好地解決大多數實際應用程序。
多指令多數據 (MIMD)
MIMD 流架構為數據流和指令流提供并行性。使用 MIMD,多個處理器針對不同的數據流獨立執行指令流。
是什么讓 SIMD 最適合 GPU?
現在我們了解了不同的架構,讓我們考慮一下為什么 SIMD 是 GPU 的最佳選擇。當您了解到從根本上說圖形處理以及許多其他常見的 GPU 計算用例只是大規模地一遍又一遍地運行相同的數學函數時,答案就變得很直觀了。在這種情況下,許多處理器在多個數據集上運行相同的指令是理想的。
恰當的例子:調整像素的視頻亮度依賴于使用 RGB(紅綠藍)值的簡單算法。多次執行同一功能是產生所需結果的必要條件,而 SIMD 是該用例的理想選擇。相反,MIMD 在需要執行多個離散計算的應用程序中最有效,例如計算機輔助設計 (CAD)。
SIMT 呢?
如果您熟悉 GPU,您可能聽說過單指令多線程 (SIMT) 這個術語。那么 SIMT 在哪里適合 Flynn 的分類法?SIMT 可以看作是 SIMD 的擴展。它將多線程添加到 SIMD,從而提高了效率,因為指令獲取開銷更少。
CUDA并行計算平臺
我們理解 GPU 架構的下一步將我們引向 Nvidia 流行的計算統一設備架構 (CUDA) 并行計算平臺。通過提供一個 API,使開發人員能夠優化 GPU 資源的使用方式——無需專門的圖形編程知識——CUDA 在使 GPU 用于通用計算方面已經走了很長一段路。
在這里,我們將了解與 GPU 架構相關的關鍵 CUDA 概念。
CUDA 計算層次結構
CUDA 中的處理資源旨在幫助優化 GPU 用例的性能。層次結構的三個基本組件是線程、線程塊和內核網格。
線程
線程——或 CUDA 核心——是一種并行處理器,可在 Nvidia GPU 中計算浮點數學運算。GPU 處理的所有數據都是通過 CUDA 內核處理的。現代 GPU 有數百甚至數千個 CUDA 內核。每個 CUDA 核心都有自己的內存寄存器,其他線程無法使用。
雖然計算能力和 CUDA 核心之間的關系不是完全線性的,但一般來說——假設其他條件相同——GPU 擁有的 CUDA 核心越多,它的計算能力就越大。然而,這個一般想法有多種例外情況。例如,不同的 GPU 微架構會影響性能并使 CUDA 內核較少的 GPU 更強大
線程塊
顧名思義,線程塊(或 CUDA 塊)是一組 CUDA 核心(線程),可以串行或并行地一起執行。核心的邏輯分組可實現更高效的數據映射。線程塊在每個塊的基礎上共享內存。當前的 CUDA 架構將每個塊的線程數量限制為 1024。給定 CUDA 塊中的每個線程都可以訪問相同的共享內存(更多關于下面不同類型的內存)。
內核網格
線程塊的下一層抽象是內核網格。內核網格是同一內核上的線程塊分組。網格可用于并行執行更大的計算(例如,那些需要超過 1024 個線程的計算),但是由于不同的線程塊不能使用相同的共享內存,所以在塊級別發生的相同同步不會發生在網格 -等級。
CUDA 內存層次結構
與計算資源一樣,內存分配遵循 CUDA 中的特定層次結構。雖然 CUDA 編譯器自動處理內存分配,但 CUDA 開發人員可以直接優化內存使用。以下是了解 CUDA 內存層次結構的關鍵概念。
寄存器
寄存器是分配給各個線程(CUDA 核心)的內存。因為寄存器存在于“片上”內存中并且專用于各個線程,所以存儲在寄存器中的數據可以比任何其他數據處理得更快。寄存器中的內存分配是一個復雜的過程,由編譯器處理,而不是由 CUDA 開發人員編寫的軟件控制。
只讀存儲器
只讀 (RO) 是 GPU 流式多處理器上的片上存儲器。它用于特定任務,例如可以使用 CUDA 紋理函數訪問的紋理內存。在許多情況下,從只讀內存中獲取數據比使用全局內存更快、更高效。
L1緩存/共享內存
第 1 層 (L1) 緩存和共享內存是在線程塊(CUDA 塊)內共享的片上內存。因為一級緩存和共享內存存在于芯片上,所以它比二級緩存和全局內存都快。一級緩存和共享內存的根本區別在于:共享內存的使用是通過軟件控制的,而一級緩存是由硬件控制的。
二級緩存
所有 CUDA 塊中的所有線程都可以訪問第 2 層緩存。L2緩存存儲全局和本地內存。從 L2 緩存中檢索數據比從全局內存中檢索數據更快。
全局內存
全局內存是駐留在設備 DRAM 中的內存。使用 CPU 類比,全局內存可與 RAM 相提并論。從全局內存中獲取數據本質上比從 L2 緩存中獲取數據要慢。
Nvidia GPU 架構簡史
雖然近年來 Nvidia GPU 確實更頻繁地成為新聞,但它們絕不是新的。事實上,多年來,Nvidia GPU 已經進行了多次迭代,GPU 架構也取得了進步。因此,讓我們回顧一下最近的歷史,了解 GPU 是如何隨著時間的推移而發展的。我們將通過探索自 2000 年以來發布的每個流行的 Nvidia GPU 微體系結構來做到這一點。
開爾文
Kelvin 于 2001 年發布,是 Nvidia 千禧年的第一個新 GPU 微架構。最初的 Xbox 游戲機使用了具有開爾文微架構的 NV2A GPU。GeForce 3 和 GeForce 4 系列 GPU 是使用這種微架構發布的。
朗肯
Rankine 是 2003 年發布的 Kelvin 的后續產品,用于 Nvidia GPU 的 GeForce 5 系列。Rankine 支持頂點和片段程序,并將 VRAM 大小增加到 256MB。
居里
GeForce 6 和 7 系列 GPU 使用的微架構 Curie 于 2004 年作為 Rankine 的繼任者發布。Curie 將顯存量翻了一番,達到 512MB,是第一代支持 PureVideo 視頻解碼的 Nvidia GPU。
特斯拉
2006 年發布的 Tesla GPU 微架構作為 Curie 的繼任者,為 Nvidia 的 GPU 產品線引入了幾個重要的變化。除了作為 GeForce 8、9、100、200 和 300 系列 GPU 使用的架構之外,Tesla 還被為圖形處理以外的用例設計的 Quadro 系列 GPU 使用。
令人困惑的是,Tesla 既是 GPU 微架構的名稱,也是 Nvidia GPU 的品牌。2020 年,Nvidia 決定停止使用特斯拉名稱,以免與流行的電動汽車品牌混淆。
費米
Tesla 的繼任者 Fermi 于 2010 年發布。Fermi 引入了許多增強功能,包括:
- 支持 512 個 CUDA 內核
- 64KB RAM 和分區 L1 緩存/共享內存的能力
- 支持糾錯碼 (ECC)
開普勒
Kepler GPU 微架構作為 Fermi 2012 的繼任者發布。對 Fermi 的主要改進是:
- 一種稱為 SMX 的新型流式多處理器架構
- 支持 TXAA(一種抗鋸齒方法)
- CUDA 內核增加到 1536 個
- 更少的功耗
- 通過 GPU boost 支持自動超頻
- 支持 GPUDirect,它允許 GPU——無論是在同一臺計算機上還是通過網絡相互訪問——無需訪問 CPU 即可進行通信
麥克斯韋
2014 年發布的麥克斯韋是費米的繼任者。根據 Nvidia 的說法,第一代 Maxwell GPU 與 Fermi 相比具有以下優勢:
- 由于與控制邏輯分區、時鐘門控、指令調度和工作負載平衡相關的增強,更高效的多處理器
- 每個流式多處理器上有 64KB 的專用共享內存
- 與 Fermi 使用的鎖定/解鎖范例相比,本機共享內存原子操作提供了性能改進
- 動態并行支持
帕斯卡
Pascal 于 2016 年接替 Maxwell。這種 Nvidia GPU 微架構提供了對 Maxwell 的改進,例如:
- 支持 NVLink 通信,與 PCIe 相比具有顯著的速度優勢
- 高帶寬內存 2 (HBM2) - 一種 4096 位內存總線,提供 720 GB 的內存帶寬
- 計算搶占
- 動態負載平衡以優化 GPU 資源利用率
沃爾特
Volta 是 2017 年發布的一種有點獨特的微架構迭代。雖然以前的大多數微架構都用于消費類 GPU,但 Volta GPU 嚴格針對專業應用進行銷售。Volta 也是第一個使用 Tensor Core 的微架構。
張量核心是一種新型的處理核心,可以執行專門的數學計算。具體來說,Tensor Cores 執行支持 AI 和深度學習用例的矩陣運算。
圖靈
Turing 于 2018 年發布,除了支持 Tensor Cores 外,還包括許多面向消費者的 GPU。Turing 是 Nvidia 廣受歡迎的 Quadro RTX 和 GeForce RTX 系列 GPU 使用的微架構。這些 GPU 支持實時光線追蹤(又名 RTX),這對于虛擬現實 (VR) 等計算量大的應用程序至關重要。
安培
Ampere 微架構才剛剛開始投放市場。Ampere 旨在進一步支持高性能計算 (HPC) 和人工智能用例。Ampere 的增強功能包括第 3 代 NVLink 和 Tensor 核心、結構稀疏性(將不需要的參數轉換為零以啟用 AI 模型訓練)、第 2 代光線追蹤核心、多實例 GPU (MIG) 以實現 A100 GPU 在邏輯上的分區隔離且安全的 GPU 實例。
最后的想法
我們希望您喜歡我們對 GPU 架構及其演變過程的概述。在Cherry Servers,我們對 HPC 的未來和下一代 GPU 將支持的用例充滿熱情。我們是裸機云的行業領導者,也是幫助企業充分利用其計算資源的專家。