GPU持續進化。 ? 三十年前,CPU和其他專用處理器處理幾乎所有計算任務。那個時代的顯卡可以加速Windows和應用程序中2D形狀的繪制,但沒有其他用途。
快進到今天,GPU已經成為行業中最主要的芯片之一。
如今,GPU不再僅僅是用于圖形處理的設備——實際上機器學習和高性能計算已經嚴重依賴于這個看似微不足道的GPU的處理能力。讓我們一起探討這一芯片是如何從一個樸素的像素處理器演變成具有強大浮點計算能力的核心設備的。
起初CPU主宰一切
讓我們回到20世紀90年代末。高性能計算領域,涵蓋了超級計算機上的科學研究、標準服務器上的數據處理以及工作站上的工程和設計任務,完全依賴于兩種類型的CPU:1)專為某一特定目的而設計的專用處理器;2)來自AMD、IBM或英特爾的現成芯片。
ASCI紅色超級計算機是1997年最強大的超級計算機之一,由9,632顆英特爾奔騰II Overdrive處理器組成(如下圖所示)。每個處理器單元運行在333 MHz的頻率下,系統的理論峰值計算性能達到了超過3.2 TFLOPS(每秒萬億次浮點運算)。
在本文中,我們經常會提及TFLOPS,因此有必要花一些時間來解釋一下它的含義。在計算機科學中,浮點數(floating points,簡稱浮點)是表示非整數值的數據類型,例如6.2815或0.0044。整數值常用于進行控制計算機及其上運行的任何軟件所需的計算。
浮點數對于精度至關重要的情況至關重要,尤其是與科學或工程相關的任何事物。即使是一個簡單的計算,比如求圓的周長,也至少涉及到一個浮點數值。
多年來,CPU一直擁有用于在整數和浮點數上執行邏輯運算的單獨電路。在前文提到的奔騰II過載版中,它可以在每個時鐘周期內執行一個基本的浮點操作(乘法或加法)。理論上,這就是為什么ASCI Red的浮點峰值性能為9,632個CPU x 3.33億個時鐘周期 x 1操作/周期 = 3,207,456百萬FLOPS。
這些數據是基于理想條件(例如,使用最簡單的指令處理適合緩存的數據),在現實中很難實現。然而,它們為評估系統潛在性能提供了一個很好的參考。
其他超級計算機也擁有類似數量的標準處理器——位于勞倫斯利弗莫爾國家實驗室的藍色太平洋使用了5808個IBM的PowerPC 604e芯片,洛斯阿拉莫斯國家實驗室的藍色山脈(見上圖)容納了6144個MIPS Technologies R1000芯片。
要達到太浮點運算級別,需要數千個CPU,以及大量的RAM和硬盤存儲作為支持。因為這些設備的數學需求如此之高,直到現在這種情況仍然存在。
當我們在學校的物理、化學和其他學科中第一次接觸方程式時,一切都是一維的。換句話說,我們對距離、速度、質量、時間等使用單一的數字。然而,為了準確地建模和模擬現象,需要更多的維度,數學進入了向量、矩陣和張量的領域。
這些在數學中被視為單一實體,但包含多個值,這意味著任何進行計算的計算機需要同時處理大量數字。考慮到當時的CPU每周期只能處理一到兩個浮點數,因此需要數千個CPU。
SIMD加入戰局:MMX,3DNow!和SSE
1997年,英特爾更新了Pentium CPU系列,引入了一項名為MMX的技術擴展——一組在核心內部利用八個附加寄存器的指令。每個寄存器被設計成存儲一到四個整數值。這種系統允許處理器在多個數值上同時執行單條指令,這種方法更為人所熟知的是SIMD(單指令,多數據)。
一年后,AMD推出了自己的版本,名為3DNow!。由于寄存器可以存儲浮點值,這使得3DNow!明顯優于MMX。又過了一年,英特爾在奔騰III中引入了SSE(流式單指令多數據擴展),解決了MMX中的問題。
3DNow! 首次亮相于 AMD K6-2 CPU。來源:Fritzchens Fritz
隨著時間推移,高性能計算機設計者們已經能使用可高效處理向量數學的標準處理器。
經過千百萬次的擴展,這些處理器可以同樣高效地處理矩陣和張量。盡管取得了這一進步,但超級計算機領域仍更青睞舊式或專用芯片,因為這些新擴展并未專為此類任務而設計。此外,還有另一種比AMD或Intel的任何CPU更擅長SIMD處理的迅速流行處理器:GPU。
在圖形處理器的早期,CPU處理場景中組成三角形的計算(因此,AMD為其SIMD實現使用了3DNow!這個名字)。然而,像素的著色和紋理處理完全由GPU負責,并且這項工作的許多方面涉及到矢量數學。
20多年前最好的消費級顯卡,如3dfx Voodoo5 5500和Nvidia GeForce 2 Ultra,都是出色的SIMD設備。然而,它們是為制作游戲的3D圖形而創建,沒有其他用途。即使在專業市場上的顯卡也完全專注于渲染。
ATI的 ATI FireGL 3 配備了兩個IBM芯片(一個GT1000幾何引擎和一個RC1000柵格化器),高達128 MB的DDR-SDRAM,以及聲稱的30 GFLOPS的處理能力。然而,所有這些都是為了加速像3D Studio Max和AutoCAD這樣的程序中的圖形渲染,使用的是OpenGL渲染API。
那個時代的GPU并沒有配備用于其他用途的功能,因為將3D對象變換并轉換為顯示器圖像的過程并不涉及大量的浮點運算。實際上,其中很大一部分是整數級別的運算,而且在顯卡開始在整個管道大量使用浮點值之前還需要幾年時間。
其中最早的一個是ATI的R300處理器,它擁有8個獨立的像素管線,可以以24位浮點精度處理所有數學運算。遺憾的是,除了圖形處理之外,無法利用其強大的性能 ——硬件和相關軟件都完全以圖像為中心。
計算機工程師并非對于GPU具有大量SIMD能力但缺乏將其應用于其他領域的途徑一無所知。令人驚訝的是,正是一款游戲主機向我們展示了如何解決這個棘手問題。
統一的新時代
2005年11月,微軟的Xbox 360上市,搭載了一款由IBM設計制造、基于PowerPC架構的CPU,以及一款由ATI設計、由TSMC制造的GPU。
這款名為Xenos的顯卡芯片非常特殊,因為其布局完全摒棄了傳統的分離頂點和像素管道的方法。
Xenos激發了一種至今仍在使用的設計范例的出現。
取而代之的是一個由三組SIMD陣列組成的簇。具體來說,每個簇包含16個向量處理器,每個處理器包含5個數學單元。這種布局使每個陣列能夠在一個周期內同時對80個浮點數據值執行來自線程的兩個順序指令。
統一著色器架構使得每個陣列都能處理任何類型的著色器。盡管這使芯片的其他方面變得更為復雜,但Xenos引發的設計模式至今仍在使用。在500 MHz的時鐘速度下,整個集群理論上可以實現240 GFLOPS(500 x 16 x 80 x 2)的處理速度,用于執行三個線程的乘-加指令。
為了讓這個數字更具規模感,我們可以將其與10年前世界頂級超算的速度進行對比。例如,1994年位居世界超算之首的桑迪亞國家實驗室的Aragon XP/S140,其擁有3,680個英特爾i860 CPU,峰值達到了184 GFLOPS。芯片發展的步伐迅速超過了這臺機器,但GPU的情況也是如此。
多年來,CPU已經將SIMD陣列集成到自己的設計中,例如,英特爾最早的奔騰MMX就擁有一個專用單元來處理向量上的命令,其中包括多達8個8位整數。到Xbox的Xenos在全球家庭中應用的時候,這樣的單元至少已經擴大了兩倍,但相較于Xenos中的單元,它們仍然顯得很小。
當消費級顯卡開始采用統一著色器架構的GPU時,它們已經具有比Xbox 360圖形芯片更高的處理速率。
英偉達的G80(如上圖所示),用于GeForce 8800 GTX(2006)的理論峰值達到了346 GLFOPS,而ATI的R600在Radeon HD 2900 XT(2007)上宣稱達到了476 GLFOPS。
兩大顯卡制造商很快在其專業型號上利用這種計算能力。雖然價格昂貴,但ATI FireGL V8650和Nvidia Tesla C870非常適合高端科學計算機。然而,在最高水平上,全球的超級計算機仍繼續依賴標準CPU。事實上,在GPU開始出現在最強大的系統之前還需要過去幾年時間。
那么,鑒于GPU顯然能提供顯著的處理速度,為什么它們一開始就沒有被使用呢?
超級計算機及類似系統的設計、建造和運行成本極高。多年來,它們都是圍繞著大量CPU構建的,因此,一夜之間整合其他處理器并非易事。這樣的系統需要進行徹底的規劃和初步的小規模測試,然后逐步增加芯片數量。
其次,要讓所有這些組件在軟件方面協調運行并非易事,這對當時的GPU來說是一個重大的弱點。盡管GPU已經具有高度可編程性,但之前為它們提供的軟件還是相當有限的。
Microsoft的HLSL(高級著色器語言),英偉達的Cg庫和OpenGL的GLSL使訪問圖形芯片的處理能力變得簡單,盡管這僅用于渲染。
所有這些都隨著統一著色器架構GPU的出現而發生了改變。
在2006年,當時已成為AMD子公司的ATI和英偉達發布了旨在將此功能用于不僅僅是圖形處理的軟件工具包,它們分別使用名為CTM(Close To Metal)和CUDA(計算統一設備架構)的API。
科學和數據處理領域的研究人員真正需要的是一個全面的解決方案——一個能將龐大的CPU和GPU陣列(通常稱為異構平臺)作為一個由眾多計算設備組成的單一實體。
2009年,他們的需求得到了滿足。最初,OpenCL是由蘋果公司開發的,后來由接管OpenGL的Khronos Group發布。如今,OpenCL已成為在日常圖形外使用GPU的事實上的統一軟件平臺。而當時人們稱這個領域為GPGPU,即指在GPU上進行通用計算,這個概念由Mark Harris首創。
GPU加入計算競賽
與龐大的科技評論世界不同,全球并沒有數百名評論家在測試超級計算機的性能聲明。然而,自20世紀90年代初以來,德國曼海姆大學的一個持續進行的項目就旨在實現這一目標。
被稱為TOP500的組織,每年發布兩次全球十大最強大超級計算機的排名榜單。
2010年榜單上首次出現了裝備GPU的計算機,這兩臺來自中國的系統分別是星云和天河一號。星云使用了英偉達的Tesla C2050(實質上是GeForce GTX 470,如下圖所示),而天河一號則采用了AMD的Radeon HD 4870芯片。前者具有理論峰值2,984 TFLOPS。
在早期高端GPGPU時代,英偉達成為了配置計算巨擘的首選廠商,并非因為性能上的優勢——通常AMD的Radeon顯卡具有更高的處理性能——而是因為軟件支持。CUDA得到了快速的發展,而在AMD推出合適的替代方案之前,還需要幾年的時間,這就促使用戶選擇使用OpenCL。
然而,英偉達并沒有完全壟斷市場。英特爾的Xeon Phi處理器也試圖在市場上占有一席之地。這些處理器源自一個被終止的名為Larrabee的GPU項目,它構成了一個奇特的CPU-GPU混合體。Xeon Phi處理器由多個類似Pentium的核心(即CPU部分)組成,并搭配了大型浮點運算單元(即GPU部分)。
對Nvidia Tesla C2050內部的檢查展示了14個被稱為流式多處理器(SMs)的模塊,這些模塊通過緩存和中央控制器進行劃分。每個模塊中包含32組邏輯電路(英偉達稱之為CUDA核心),分別負責執行整數值和浮點數的所有數學運算。對于后者,每個核心每個時鐘周期可以處理單精度(32位)的一次FMA(融合乘加)操作;而雙精度(64位)操作至少需要兩個時鐘周期。
Xeon Phi芯片中的浮點處理單元(如下圖所示)似乎有相似之處,但每個核心處理的數據量只有C2050中一個SM的一半。盡管如此,與特斯拉的14個SM相比,單個Xeon Phi處理器有32個重復的核心,因此每個時鐘周期總體上可以處理更多的數據。然而,英特爾首次發布的芯片更像是一個原型,并未完全發揮其潛力。相較而言,英偉達的產品運行速度更快、功耗更低,并最終被證明更勝一籌。
在AMD、英特爾和英偉達三家公司的GPGPU競爭中,這成為了一個反復出現的主題。其中一個公司的產品可能在處理核心數量上占優勢,而另一個公司的產品可能在時鐘速度上更快,或擁有更強大的緩存系統。
CPU在各種類型的計算中仍然不可或缺,許多超級計算機和高端計算系統仍然采用AMD或Intel處理器。雖然單個CPU在SIMD性能上無法與一般GPU競爭,但當它們以數千計連接在一起時,表現就相當不錯了。然而,這樣的系統在功耗效率方面欠佳。
例如,在Radeon HD 4870 GPU被用于天河一號超級計算機的同時,AMD的頂級服務器CPU(12核Opteron 6176 SE)也在廣泛應用。雖然CPU的功耗約為140W,理論上可達到220 GFLOPS的性能,但僅增加10W功耗的GPU則可提供高達1,200 GFLOPS的峰值性能,且成本只是CPU的一小部分。
一塊能做更多事的“小顯卡”
幾年后,不僅是世界上的超級計算機在使用GPU進行大量并行計算,英偉達也積極推廣其GRID平臺,這是一項用于科學和其他應用的GPU虛擬化服務。最初,它作為一個托管云端游戲的系統推出,但在GPGPU大規模、低成本需求不斷增長的推動下,發生了這一轉變。在英偉達的年度技術會議上,GRID作為各個行業工程師們的重要工具展示出來。
在同一活動中,GPU制造商展示了一個未來架構的概要,代號為Volta。發布的細節很少,人們普遍認為這將是另一款面向英偉達所有市場的芯片。
與此同時,AMD也在開展類似的項目。他們通過不斷更新其游戲型 Radeon 系列、服務器型 FirePro 和 Radeon Sky 系列顯卡的圖形核心下一代(GCN)設計。當時的性能表現令人驚嘆,FirePro W9100 的峰值 FP32 吞吐量達到 5.2 TFLOPS(32 位浮點),這一數據在不到二十年前的超級計算機上難以想象。
盡管GPU設計的初衷主要還是為了3D圖形處理,但隨著渲染技術的發展,這些芯片必須在處理通用計算任務方面表現出越來越高的性能。然而,唯一的問題在于它們處理高精度浮點數計算(即FP64或更高精度)的能力有限。
回顧2015年全球頂級超級計算機,使用GPU的數量相對較少,不論是Intel的Xeon Phi還是英偉達的Tesla,與完全基于CPU的計算機相比,GPU使用的數量都很少。
2016年,隨著英偉達發布Pascal架構,一切都發生了變化。這是該公司首次將重點放在專為高性能計算市場設計的GPU上,其他產品則適用于多個行業。在Pascal架構中,僅有一種型號(GP100)產品是針對高性能計算市場的,并僅衍生出5款相關產品。但是,在以往的架構中,只有少數幾個FP64核心,而這款芯片則擁有接近2000個FP64核心。
隨著特斯拉P100提供超過9 TFLOPS的FP32處理能力和一半的FP64處理能力,這款圖形卡非常強大。相比之下,AMD的Radeon Pro W9100使用Vega 10芯片,在FP32性能上提速30%,但在FP64性能上卻慢了800%。此時,由于銷售疲軟,英特爾即將停產Xeon Phi處理器。
一年后,英偉達終于發布了Volta架構,立刻表明公司不僅僅關注將其GPU引入高性能計算(HPC)和數據處理市場,還瞄準了另一個市場。
神經元、網絡,真是驚奇無比
深度學習是在更廣泛的機器學習領域內的一個子領域,而機器學習又是人工智能的一個子集。深度學習涉及使用復雜數學模型,即神經網絡,從給定數據中提取信息。
一個例子是判斷給定圖片描繪的是否為特定動物的概率。要做到這一點,模型需要進行“訓練”——以這個例子為例,訓練過程中要展示數百萬張該動物的照片,以及數百萬張未出現該動物的照片。涉及到的數學計算主要基于矩陣和張量運算。
幾十年來,這種工作負載一直只能由基于CPU的超級計算機承擔。然而,早在2000年代初期,人們已經認識到GPU非常適合處理這樣的任務。
盡管如此,英偉達把賭注押在深度學習市場的顯著擴張上,并在其Volta架構中添加了特殊功能以在這一領域中脫穎而出。這個功能被稱為張量核心,它包括多個FP16邏輯單元,組成一個大陣列,但其功能較為有限。
Pascal(左)和Volta(右)
實際上,它們的功能非常有限,只能執行一個操作:將兩個FP16 4x4矩陣相乘,然后將另一個FP16或FP32 4x4矩陣加到結果上(這個過程稱為GEMM操作)。英偉達以及競爭對手之前的GPU也能執行這樣的計算,但速度遠不如Volta。這個架構下的唯一一款GPU,GV100,共有512個張量內核,每個內核能在一個時鐘周期內執行64個GEMM操作。
根據數據集中矩陣的大小以及所使用的浮點數大小,Tesla V100顯卡在進行張量計算時理論上可以達到125 TFLOPS的性能。顯然,Volta是為一個小眾市場而設計的。盡管GP100在超級計算機領域的應用較為有限,但新型的Tesla顯卡卻迅速被廣泛采用。
隨后,英偉達在其后續的圖靈架構中為普通消費類產品添加了張量核心,并開發了名為DLSS(深度學習超采樣)的圖像放大技術。DLSS利用GPU中的核心運行神經網絡對圖像進行放大,同時糾正幀中的任何失真。
有一段時間,英偉達在深度學習領域的GPU加速市場一家獨大,數據中心業務的收入飆升,在2017財年、2018財年和2019財年分別達到了145%、133%和52%的增長。到2019財年末,高性能計算、深度學習等市場的銷售收入累計達到29億美元,取得了非常顯著的成果。
市場隨后迎來了爆炸式增長。2023年最后一個季度,公司的總收入達到了221億美元,同比暴增達到了265%。大部分增長是由公司的人工智能項目帶來的,貢獻了184億美元的收入。
然而,在利潤豐厚的領域,競爭自然難以避免。盡管英偉達仍是頂級GPU供應商,但其他大型科技公司也絕非甘于落后。
2018年,谷歌開始通過云服務提供自家開發的張量處理芯片(Tensor Processing Chips)的訪問。不久之后,亞馬遜也跟進推出了專門的CPU——AWS Graviton。同時,AMD正在重組其GPU部門,形成了兩個截然不同的產品線:一個主要面向游戲(RDNA),另一個專門用于計算(CDNA)。
盡管RDNA與其前身有顯著不同,但CDNA實際上可以看作是GCN的自然演進,只不過是放大到了龐大的規模。如今,觀察用于超級計算機、數據服務器和AI機器的GPU,一切都呈現出巨大的規模。
AMD的CDNA 2驅動的MI250X配備了220個計算單元,提供了接近48 TFLOPS的雙精度FP64吞吐量,以及128 GB的高帶寬存儲器(HBM2e)。這兩方面在高性能計算應用中都備受追捧。而英偉達的GH100芯片,采用Hopper架構和576個張量核心,在AI矩陣計算中使用低精度的INT8數字格式,可以潛在地達到4000 TOPS。
英特爾的Ponte Vecchio GPU同樣龐大,擁有1000億個晶體管,而AMD的MI300多了460億,由多個CPU、圖形和內存芯片組成。?
然而,這些產品都有一個共同之處,那就是它們并不是真正的GPU。在英偉達將這個術語當作營銷工具之前,GPU這個縮寫代表的是圖形處理單元。AMD的MI250X根本沒有光柵輸出單元(ROPs),即使是GH100在Direct3D性能方面也只類似于GeForce GTX 1050,使得GPU中的“G”變得無關緊要。
那么,我們還能稱呼它們為什么呢??
“GPGPU”并不理想,因為它表述得較笨拙,是指在通用計算中使用GPU,并非指設備本身。"HPCU"(高性能計算單元)也好不到哪去。但也許這并不是很重要。
畢竟,“CPU”這個術語相當寬泛,涵蓋了各種不同類型的處理器和用途。
下一個GPU征服的領域是什么?
隨著英偉達、AMD、蘋果、英特爾以及其他數十家公司投入數十億美元進行GPU研究和開發,現今的圖形處理器短時間內不太可能被截然不同的技術所替代。
對于渲染,最新的API和使用它們的軟件包(如游戲引擎和CAD應用程序)通常對運行代碼的硬件并不挑剔。因此,從理論上講,它們可以很容易地適應一種全新的硬件設備。
然而,在GPU中只有相對較少的部件專門用于圖形處理,其中最明顯的是三角形設置引擎、光柵化操作處理器(ROPs),以及在最近的版本中,高度專用的光線追蹤單元。然而,其余部分基本上是一個大規模并行的SIMD芯片,由強大且復雜的存儲器/緩存系統支持。
基本設計已經非常成熟,未來的提升主要依賴于半導體制造技術的進步。換句話說,它們只能通過增加更多邏輯單元、提高時鐘速度或二者結合來實現進一步的優化。
當然,可以將新功能整合到GPU中,從而讓它們在更廣泛的場景中發揮作用。在GPU歷史上,這樣的事情已經發生過多次,而統一著色器架構的過渡尤為重要。雖然專用硬件處理張量或光線追蹤計算更為理想,但現代GPU的核心也能夠勝任這些任務,盡管速度較慢。
正因如此,像AMD MI250和英偉達GH100這樣的產品與其桌面PC對應產品有著極為相似的外觀,而未來用于高性能計算和人工智能的設計也很可能會延續這一趨勢。那么,如果芯片本身并沒有發生重大變化,它們的應用領域會有什么變化呢?
谷歌的Coral加速板搭載了兩顆Edge TPU芯片
與人工智能相關的領域實質上都屬于計算領域。在需要執行大量SIMD計算的場景下,GPU很可能會被用到。雖然現今科學與工程領域中很多行業已經在利用這些處理器,但未來我們還可能見證GPU衍生品應用的迅猛增長。
如今,人們可以購買到配備了專用于加速張量計算的微型芯片的手機。隨著像ChatGPT這樣的工具在性能和受歡迎程度上的不斷提升,我們將看到更多搭載此類硬件的設備。
作為簡單的圖形處理器,GPU最初只是為了加速游戲運行而設計,但如今已經演變成一種全方位的加速器。它在全球范圍內助力各種工作站、服務器以及超級計算機的運行。
全球數百萬人每天都在使用這些技術——不僅在我們的電腦、手機、電視和流媒體設備中,還包括在使用整合了語音和圖像識別的服務,以及提供音樂和視頻推薦的服務時。
GPU的未來可能是未知領域,但有一點可以肯定:在未來的幾十年里,圖形處理單元將繼續作為計算和AI領域的主導工具。
審核編輯:黃飛
評論
查看更多