走過30年GPU是如何在一統天下的?
三十年前,CPU 和其他專用處理器幾乎處理所有運算任務。那個時代的顯示卡有助於加快Windows 和應用程式中2D 形狀的繪製速度,但沒有其他用途。快進到今天,GPU 已經成為業界最具主導地位的晶片之一。
但諷刺的是,圖形晶片的唯一功能是圖形的日子已經一去不復返了,機器學習和高效能運算嚴重依賴不起眼的GPU 的處理能力。與我們一起探索這款單晶片如何從一個不起眼的像素推動器演變成一個強大的浮點運算引擎。
一開始,CPU統治一切
讓我們回到20 世紀90 年代末。高效能運算領域,包括超級電腦的科學工作、標準伺服器上的資料處理以及工作站上的工程和設計任務,完全依賴兩種類型的CPU:1)專為單一目的而設計的專用處理器,2 )來自AMD、IBM 或Intel 的現成晶片。
ASCI Red 超級電腦是1997 年左右最強大的超級電腦之一,由9,632 個Intel Pentium II Overdrive CPU 組成(如下圖所示)。每個單元的運作頻率為333 MHz,該系統的理論峰值計算性能略高於3.2 TFLOPS(每秒兆次浮點運算)。
由於我們將在本文中經常提到TFLOPS,因此值得花點時間來解釋它的含義。在計算機科學中,浮點數(或簡稱floats )是表示非整數值的資料值,例如6.2815 或0.0044。整數值(稱為整數)經常用於控制電腦及其上運行的任何軟體所需的計算。
浮點數對於精確度至關重要的情況至關重要,特別是與科學或工程相關的任何事情。即使是簡單的計算,例如確定圓的周長,也至少涉及一個浮點數值。
幾十年來,CPU 一直擁有單獨的電路來對整數和浮點數執行邏輯運算。在上述Pentium II Overdrive 的情況下,它可以在每個時脈週期執行一次基本浮點運算(乘法或加法)。理論上,這就是為什麼ASCI Red 的峰值浮點效能為9,632 個CPU x 3.33 億個時脈週期x 1 次操作/週期= 3,207,456 百萬次FLOPS。
這些數字是基於理想條件(例如,對適合緩存的資料使用最簡單的指令),並且在現實生活中很少可以實現。然而,它們很好地表明了系統的潛在能力。
其他超級電腦也擁有類似數量的標準處理器——勞倫斯利弗莫爾國家實驗室的Blue Pacific使用5808 個IBM PowerPC 604e晶片,洛斯阿拉莫斯國家實驗室的Blue Mountain(上圖)則使用6144 個MIPS Technologies R1000。
為了達到兆次浮點運算等級的處理能力,需要數千個CPU,所有這些都需要大量RAM 和硬碟儲存的支援。這過去是,現在仍然是,由於機器的數學要求。
當我們在學校第一次接觸物理、化學和其他學科的方程式時,一切都是一維的。換句話說,我們使用一個數字來表示距離、速度、品質、時間等。然而,為了準確地建模和模擬現象,需要更多的維度,數學上升到向量、矩陣和張量的領域。
它們在數學中被視為單一實體,但包含多個值,這意味著任何進行計算的計算機都需要同時處理大量數字。鑑於當時的CPU 每個週期只能處理一到兩個浮點數,因此需要數千個浮點數。
SIMD 加入競爭:
MMX、3DNow!和SSE
1997 年,Intel 透過名為MMX 的技術擴充更新了Pentium CPU 系列,這是一組利用核心內部八個附加暫存器的指令。每個都被設計為儲存一到四個整數值。該系統允許處理器同時執行跨多個數字的一條指令,這種方法稱為SIMD(Single Instruction, Multiple Data)。
一年後,AMD 推出了自己的版本,名為3DNow!。它的效能尤其優越,因為暫存器可以儲存浮點值。又過了一年,英特爾才在MMX 中解決這個問題,並在Pentium III 中引入了SSE (Streaming SIMD Extensions)。
隨著日曆進入新千年,高效能電腦的設計者可以使用能夠有效處理向量數學的標準處理器。
一旦擴展到數千個,這些處理器就可以同樣出色地管理矩陣和張量。儘管取得了這一進步,超級電腦世界仍然青睞舊的或專用的晶片,因為這些新的擴充並不是專門為此類任務而設計的。對於另一種快速普及的處理器來說,GPU 也是如此,它比AMD 或Intel 的任何CPU 都更擅長SIMD 工作。
在圖形處理器的早期,CPU 處理構成場景的三角形的計算(因此AMD 用於執行SIMD 的名稱為3DNow!)。然而,像素的著色和紋理完全由GPU 處理,而這項工作的許多方面都涉及向量數學。
20 多年前最好的消費級顯示卡,例如3dfx Voodoo5 5500和NVIDIA GeForce 2 Ultra,都是出色的SIMD 設備。然而,它們的創建目的是為遊戲生成3D 圖形,而不是其他任何東西。即使是專業市場的顯示卡也只專注於渲染。
ATI 售價2,000 美元的ATI FireGL 3 配備了兩個IBM 晶片(一個GT1000 幾何引擎和一個RC1000 光柵器)、一個巨大的128 MB DDR-SDRAM 以及據稱30 GFLOPS 的處理能力。但這一切都是為了使用OpenGL 渲染API 加速3D Studio Max 和AutoCAD 等程式中的圖形。
那個時代的GPU 無法用於其他用途,因為轉換3D 物件並將其轉換為監視器影像的過程並不涉及大量的浮點數學。事實上,其中很大一部分是在整數級別,並且圖形卡需要幾年的時間才開始在整個管道中大量使用浮點值。
第一個是ATI 的R300 處理器,它有8 個獨立的像素管道,以24 位元浮點精度處理所有數學運算。不幸的是,除了圖形之外,沒有其他方法可以利用這種能力——硬體和相關軟體完全以圖像為中心。
電腦工程師並沒有忘記GPU 擁有大量SIMD 功能,但缺乏將其應用到其他領域的方法。令人驚訝的是,這是一個遊戲機,展示瞭如何解決這個棘手的問題。
統一的新時代
微軟的Xbox 360於2005年11月上市,其CPU由IBM設計製造,基於PowerPC架構,GPU由ATI設計、台積電製造。
這款代號為Xenos 的圖形晶片很特別,因為它的佈局完全避開了單獨的頂點和像素管道的經典方法。
取而代之的是一個三路SIMD 陣列集群。具體來說,每個叢集由16 個向量處理器組成,每個向量處理器包含5 個數學單元。這種佈局使每個陣列能夠在每個週期對80 個浮點資料值同時執行來自執行緒的兩個順序指令。
被稱為統一著色器架構(unified shader architecture),每個陣列可以處理任何類型的著色器。儘管Xenos 使晶片的其他方面變得更加複雜,但它引發了一種至今仍在使用的設計範例。在時脈速度為500 MHz 的情況下,整個群集理論上可以為乘法加法指令的三個執行緒實現240 GFLOPS (500 x 16 x 80 x 2) 的處理速率。
為了讓這個數字有一定的規模感,十年前的一些世界頂級超級電腦無法匹敵這個速度。例如,桑迪亞國家實驗室的aragon XP/S140憑藉3,680 個Intel i860 CPU 在1994 年名列世界超級電腦榜首,峰值速度為184 GFLOPS。晶片開發的速度很快就超過了這台機器,但GPU 也是如此。
CPU 多年來一直在整合自己的SIMD 陣列,例如,英特爾最初的Pentium MMX 有一個專用單元,用於在向量上執行指令,最多包含8 個8 位元整數。當Xbox 的Xenos 在全球家庭中使用時,這類設備的尺寸至少增加了一倍,但與Xenos 相比,它們仍然很小。
當消費級顯示卡開始採用具有統一著色器架構的GPU 時,它們已經擁有比Xbox 360 的圖形晶片明顯更高的處理速率。
GeForce 8800 GTX (2006 ) 中使用的NVIDIA G80(上圖)的理論峰值為346 GLFOPS,而Radeon HD 2900 XT (2007) 中的ATI R600 則擁有476 GLFOPS。
兩家圖形晶片製造商很快就在其專業模型中利用了這種運算能力。雖然價格過高,但ATI FireGL V8650 和NVIDIA Tesla C870 非常適合高階科學計算機。然而,在最高層級上,全世界的超級電腦仍然依賴標準CPU。事實上,幾年後GPU 才開始出現在最強大的系統中。
超級電腦和類似系統的設計、建造和操作都極為昂貴。多年來,它們都是圍繞著大量CPU 陣列構建的,因此整合另一個處理器並不是一朝一夕的事。此類系統在增加晶片數量之前需要進行徹底的規劃和初始小規模測試。
其次,讓所有這些元件協調運行,尤其是軟體方面,絕非易事,這也是當時GPU 的重大弱點。雖然它們已經變得高度可編程,但以前可供它們使用的軟體相當有限。
Microsoft 的HLSL(Higher Level Shader Language)、NVIDIA 的Cg 函式庫和OpenGL 的GLSL 使存取圖形晶片的處理能力變得簡單,儘管純粹是為了渲染。
統一著色器架構GPU 改變了這一切。
2006 年,當時已成為AMD 子公司的ATI和NVIDIA 發布了軟體工具包,旨在將此能力不僅僅用於圖形,其API 分別稱為CTM(Close To Metal)和CUDA(Compute Unified Device Architecture) 。
然而,科學和資料處理社群真正需要的是一個全面的軟體包,它將大量的CPU 和GPU(通常稱為異質平台)視為由眾多運算設備組成的單一實體。
他們的需求在2009 年得到滿足。OpenCL 最初由Apple 開發,由Khronos Group 發布,該集團幾年前吸收了OpenGL,成為在日常圖形之外或當時該領域使用GPU 的事實上的軟體平台GPGPU 指的是GPU 上的通用計算,該術語由Mark Harris創作。
GPU 進入運算競賽
與廣闊的技術評論世界不同,全球並沒有數百名評論者測試超級電腦的效能主張。然而,德國曼海姆大學在1990 年代初啟動的一個正在進行的計畫正是致力於實現這一目標。
該組織被稱為“TOP500”,每年兩次發布全球最強大的10 台超級電腦排行榜。
第一個誇耀GPU 的條目出現在2010 年,中國有兩個系統-Nebulae 和Tianhe-1。它們分別依賴NVIDIA 的Tesla C2050(本質上是GeForce GTX 470,如下圖)和AMD 的Radeon HD 4870晶片,前者的理論峰值為2,984 TFLOPS。
在高階GPGPU 的早期階段,NVIDIA 是為運算巨頭配備的首選供應商,不是因為效能(因為AMD 的Radeon 卡通常提供更高程度的處理效能),而是因為軟體支援。CUDA經歷了快速發展,幾年後AMD 才找到合適的替代方案,鼓勵使用者改用OpenCL。
然而,英偉達並沒有完全主導市場,英特爾的至強融核處理器試圖佔有一席之地。這些大型晶片源自於一個名為Larrabee 的已中止的GPU 項目,是一種特殊的CPU-GPU 混合體,由多個類似奔騰的核心(CPU 部分)與大型浮點單元(GPU 部分)配對組成。
對NVIDIA Tesla C2050 內部結構的檢查揭示了14 個稱為串流多處理器(SM) 的區塊,由快取和中央控制器劃分。每一個都包含32 組兩個邏輯電路(NVIDIA 稱為CUDA 核心),用於執行所有數學運算——一組用於整數值,另一組用於浮點數。在後一種情況下,核心可以在每個時脈週期以單一(32 位元)精度管理一次FMA(融合乘加)操作;雙精度(64 位元)運算至少需要兩個時脈週期。
Xeon Phi 晶片(如下所示)中的浮點單元看起來有些相似,只是每個核心處理的資料值是C2050 中SM 的一半。儘管如此,由於與Tesla 的14 個重複核心相比,有32 個重複核心,單一Xeon Phi 處理器整體上每個時脈週期可以處理更多的值。然而,英特爾首次發布的該晶片更多的是一個原型,並不能完全發揮其潛力——英偉達的產品運行速度更快,功耗更低,並被證明最終是優越的。
這將成為AMD、英特爾和NVIDIA 之間三路GPGPU 之爭中反覆出現的主題。一種型號可能擁有數量較多的處理核心,而另一種型號可能具有更快的時脈速度或更強大的快取系統。
CPU 對於所有類型的運算仍然至關重要,許多超級電腦和高階運算系統仍然由AMD 或英特爾處理器組成。雖然單一CPU 無法與普通GPU 的SIMD 效能競爭,但當數千個CPU 連接在一起時,它們就證明足夠了。然而,此類系統缺乏功效。
例如,在天河一號超級電腦使用Radeon HD 4870 GPU的同時,AMD最大的伺服器CPU(12核心Opteron 6176 SE)也開始流行。對於大約140 W 的功耗,CPU 理論上可以達到220 GFLOPS,而GPU 只需額外10 W 即可提供1,200 GFLOPS 的峰值,而且成本僅為其一小部分。
一個可以(做更多事)的小顯示卡
幾年後,不僅是世界上的超級電腦在利用GPU 來集體進行平行運算。NVIDIA 正在積極推廣其GRID 平台,這是一種用於科學和其他應用的GPU 虛擬化服務。最初是作為託管基於雲端的遊戲的系統而推出的,對大規模、經濟實惠的GPGPU 不斷增長的需求使得這一轉變不可避免。在其年度技術會議上,GRID 被認為是各領域工程師的重要工具。
在同一事件中,GPU 製造商展示了代號為Volta 的未來架構。公佈的細節很少,普遍的假設是這將是另一款服務於英偉達所有市場的晶片。
同時,AMD 也在做類似的事情,在其專注於遊戲的Radeon 系列以及FirePro 和Radeon Sky 伺服器卡中利用定期更新的Graphics Core Next (GCN) 設計。那時,效能數據已經令人震驚——FirePro W9100 的峰值FP32 吞吐量為5.2 TFLOPS(32 位元浮點),這個數字對於不到二十年前的超級電腦來說是不可想像的。
GPU 仍然主要是為3D 圖形設計的,但渲染技術的進步意味著這些晶片必須越來越熟練地處理一般運算工作負載。唯一的問題是它們執行高精度浮點數學(即FP64 或更高)的能力有限。
縱觀2015 年頂級超級計算機,與完全基於CPU 的超級計算機相比,使用GPU(英特爾的Xeon Phi 或NVIDIA 的Tesla)的數量相對較少。
當NVIDIA 在2016 年推出Pascal 架構時,這一切都改變了。這是該公司首次嘗試專門為高效能運算市場設計GPU,其他GPU 則用於多個領域。前者只生產過一款(GP100),並且只產生了5 種產品,但之前所有架構都只配備少數FP64 內核,而這款晶片卻容納了近2,000 個內核。
Tesla P100 提供超過9 TFLOPS 的FP32 處理能力和FP64 處理能力的一半,它的功能非常強大。AMD 的Radeon Pro W9100 使用Vega 10 晶片,在FP32 下速度快了30%,但在FP64 下慢了800%。此時,英特爾因銷售不佳而瀕臨停產Xeon Phi。
一年後,NVIDIA 終於發布了Volta,這表明該公司不僅有興趣將其GPU 引入HPC 和資料處理市場,它還瞄準了另一個市場。
神經元、網絡
深度學習是機器學習這更廣泛學科中的一個領域,而機器學習又是人工智慧的一個子集。它涉及使用複雜的數學模型(稱為神經網路)從給定數據中提取資訊。
一個例子是確定所呈現的圖像描繪特定動物的機率。為此,模型需要進行「訓練」——在本例中,顯示了數百萬張該動物的圖像,以及數百萬張不顯示該動物的圖像。所涉及的數學植根於矩陣和張量計算。
幾十年來,此類工作負載只適合基於CPU 的大型超級電腦。然而,早在2000 年代,GPU 就顯然非常適合此類任務。
儘管如此,英偉達還是押注於深度學習市場的大幅擴張,並在其Volta 架構中添加了額外的功能,使其在該領域脫穎而出。這些是作為張量核心銷售的FP16 邏輯單元組,作為一個大型陣列一起運行,但功能非常有限。
事實上,它們的功能非常有限,只能執行一個功能:將兩個FP16 4×4 矩陣相乘,然後將另一個FP16 或FP32 4×4 矩陣加入結果中(這個過程稱為GEMM 運算)。NVIDIA 之前的GPU 以及競爭對手的GPU 也能夠執行此類運算,但速度遠不及Volta。使用此架構的唯一GPU GV100 總共容納了512 個張量核心,每個核心能夠在每個時脈週期執行64 個GEMM。
根據資料集中矩陣的大小以及所使用的浮點大小,Tesla V100 卡片在這些張量計算中理論上可以達到125 TFLOPS。Volta 顯然是為小眾市場設計的,但GP100 在超級電腦領域的進展有限,而新的Tesla 型號則迅速被採用。
PC 愛好者會知道,NVIDIA 隨後在圖靈架構的通用消費產品中添加了張量核心,並開發了一種名為DLSS(Deep Learning Super Sampling)的升級技術,該技術使用GPU 中的核心在計算機上運行神經網路。放大影像,修正畫面中的任何偽影。
在短時間內,NVIDIA 獨佔了GPU 加速的深度學習市場,其資料中心部門的營收大幅成長-2017 財年成長率為145%,2018 財年成長率為133%,2019 財年成長率為52 %。截至2019 財年末,HPC、深度學習等領域的銷售額總計29 億美元,這是一個非常正面的結果。
但隨後,市場真的爆發了。該公司2023 年第四季的總營收為221 億美元,年增265%。其中大部分成長來自該公司的人工智慧計劃,該計劃創造了184 億美元的收入。
然而,只要有錢,競爭就不可避免,儘管NVIDIA 仍然是迄今為止最大的GPU 供應商,但其他大型科技公司也沒有坐以待斃。
2018 年,Google開始透過雲端服務提供對其內部開發的張量處理晶片的存取。亞馬遜很快也緊跟其後,推出了專用CPU AWS Graviton。同時,AMD 正在重組其GPU 部門,形成兩條不同的產品線:一條主要用於遊戲(RDNA),另一條則專門用於計算(CDNA)。
雖然RDNA 與其前身明顯不同,但CDNA 在很大程度上是GCN 的自然演變,儘管規模擴大到了一個巨大的水平。看看當今用於超級電腦、資料伺服器和人工智慧機器的GPU,一切都非常巨大。
AMD 的CDNA 2 驅動的MI250X擁有220 個計算單元,提供略低於48 TFLOPS 的雙精度FP64 吞吐量和128 GB 的高頻寬記憶體(HBM2e),這兩個方面在HPC 應用中都備受追捧。NVIDIA 的GH100 晶片採用Hopper 架構和576 個Tensor Core,在AI 矩陣運算中採用低精度INT8 數字格式,有可能達到4000 TOPS。
英特爾的Ponte Vecchio GPU 同樣龐大,擁有1000 億個電晶體,AMD 的MI300 擁有460 億個電晶體,包括多個CPU、圖形和記憶體小晶片。
然而,它們共有的一件事是它們絕對不是GPU:它們不是GPU。早在英偉達將該術語用作行銷工具之前,該縮寫詞就代表圖形處理單元。AMD 的MI250X 沒有任何渲染輸出單元(ROP:render output units),甚至GH100 也只擁有類似GeForce GTX 1050 的Direct3D 效能,使得GPU 中的「G」變得無關緊要。
那麼,我們可以稱呼它們呢?
「GPGPU」並不理想,因為它是一個笨拙的短語,指的是通用計算中使用GPU,而不是設備本身。「HPCU」(高效能運算單元)也好不了多少。但也許這並不重要。
畢竟,「CPU」一詞非常廣泛,涵蓋了各種不同的處理器和用途。
GPU 接下來要征服什麼?
NVIDIA、AMD、Apple、Intel 和其他數十家公司在GPU 研發上投入了數十億美元,而當今的圖形處理器不會很快被任何截然不同的產品所取代。
對於渲染,最新的API 和使用它們的軟體包(例如遊戲引擎和CAD 應用程式)通常與運行程式碼的硬體無關,因此從理論上講,它們可以適應全新的東西。
然而,GPU 中專門用於圖形的組件相對較少,三角形設定引擎和ROP 是最明顯的組件,並且最近版本中的光線追蹤單元也高度專業化。然而,其餘部分本質上是大規模並行SIMD 晶片,由強大而複雜的記憶體/快取系統支援。
基本設計與以往一樣好,未來的任何改進都與半導體製造技術的進步緊密相關。換句話說,它們只能透過容納更多邏輯單元、以更高的時脈速度運行或兩者的組合來改進。
當然,它們可以合併新功能,使其能夠在更廣泛的場景中發揮作用。在GPU 的歷史上,這種情況已經發生過多次,但向統一著色器架構的過渡尤其重要。雖然最好擁有專用硬體來處理張量或光線追蹤運算,但現代GPU 的核心能夠管理這一切,儘管速度較慢。
這就是為什麼AMD MI250 和NVIDIA GH100 等產品與桌上型電腦的同類產品非常相似,未來用於HPC 和AI 的設計很可能會遵循這一趨勢。那麼,如果晶片本身不會發生重大變化,那麼它們的應用又如何呢?
鑑於與AI 相關的任何事物本質上都是一個計算的分支,因此只要需要執行大量SIMD 計算,就可能會使用GPU。雖然科學和工程領域沒有太多領域尚未使用此類處理器,但我們可能會看到GPU 衍生產品的使用激增。
目前人們可以購買配備微型晶片的手機,其唯一功能是加速張量計算。隨著ChatGPT等工具的功能和普及度不斷增強,我們將看到更多配備此類硬體的設備。
不起眼的GPU 已經從僅僅比CPU 更快地運行遊戲的設備發展成為通用加速器,為全球的工作站、伺服器和超級電腦提供動力。
全球數百萬人每天都在使用它——不僅在我們的電腦、電話、電視和串流媒體設備中,而且在我們使用包含語音和圖像識別或提供音樂和視訊推薦的服務時也是如此。
GPU 真正的下一步可能是一個未知的領域,但有一點是肯定的,圖形處理單元將在未來幾十年內繼續成為運算和人工智慧的主要工具。