三十年前,CPU 和其他專用處理器幾乎處理所有計算任務。那個時代的顯卡有助於加快 Windows 和應用程序中 2D 形狀的繪制速度,但絕對沒有其他作用。快進到今天,GPU 現已成爲整個行業最具主導地位的芯片之一。
具有諷刺意味的是,圖形芯片硬件的唯一功能的日子已經一去不復返了,圖形高性能計算和機器學習在很大程度上依賴於不起眼的 GPU 的處理能力。與我們一起探索這款單芯片如何從一個不起眼的像素推動器演變成一個強大的浮點計算引擎。
一开始CPU統治一切
讓我們首先回到 20 世紀 90 年代末。高性能計算領域,無論是使用超級計算機進行科學研究、標准服務器上的數據處理,還是工作站上的工程和設計任務,都完全依賴於兩種類型的 CPU:爲單一目的而構建的專用處理器或現成的處理器,AMD、IBM 或 Intel 的貨架芯片。
以 ASCI RED爲例。1997 年,它是最強大的超級計算機之一,由 9,632 個 Intel Pentium II Overdrive CPU 組成(下圖)。每個單元的運行頻率爲 333 MHz,該系統的理論峰值計算性能略高於 3.2 TFLOPS(每秒萬億次浮點運算)。
由於我們將在本文中經常提到這個指標,因此值得花點時間來解釋它的含義。在計算機科學中,浮點數(或簡稱浮點數)是表示非整數值的數據值,例如 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 年,英特爾使用一種名爲MMX的技術更新了其最初的奔騰系列 CPU ,這是一組利用內核內八個附加寄存器的指令。每個都被設計爲存儲一到四個整數值。該系統允許處理器同時執行跨多個數字的一條指令,這種方法更被稱爲 SIMD(單指令、多數據)。
一年後,AMD 推出了自己的版本,稱爲3DNow!。它的性能尤其優越,因爲寄存器可以存儲浮點值。又過了一年,英特爾才在 MMX 中解決這個問題,並在其 Pentium III 芯片中引入了SSE(流 SIMD 擴展)。
首次出現在 AMD K6-2 CPU 中的3D Now
隨着日歷進入新千年,高性能計算機的設計者可以使用能夠有效處理矢量數學的標准處理器。一旦擴展到數千個,這些處理器就可以同樣出色地管理矩陣和張量。盡管取得了這一進步,超級計算機世界仍然青睞舊的或專用的芯片,因爲這些新的擴展並不是專門爲此類任務而設計的。
對於另一種快速普及的處理器(GPU)來說也是如此,它比 AMD 或英特爾的任何 CPU 都更擅長 SIMD 工作。
在圖形處理器的早期,CPU 處理組成場景的三角形的計算(因此 AMD 爲其 SIMD 技術使用這個名稱)。然而,像素的着色和紋理完全由 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 功能,但缺乏將其應用到其他領域的方法這一事實。令人驚訝的是,這是一個遊戲機,展示了如何解決這個棘手的問題。
統一的新時代
2005年11月,微軟的Xbox 360上市,其CPU由IBM基於其標准PowerPC架構設計和制造,GPU由ATI設計、TMSC制造。這款代號爲 Xenos 的圖形芯片很特別,因爲它的布局完全避开了單獨的頂點和像素管道的經典方法。
取而代之的是一個三路 SIMD 陣列集群。具體來說,每個集群由 16 個向量處理器組成,每個向量處理器包含 5 個數學單元。這種布局使每個陣列能夠在每個周期對 80 個浮點數據值同時執行來自线程的兩條順序指令。
這被稱爲統一着色器架構,每個陣列可以處理任何類型的着色器。盡管 Xenos 使芯片的其他方面變得更加復雜,但它引發了一種至今仍在使用的設計範例。
在時鐘速度爲 500 MHz 的情況下,整個集群理論上可以爲乘法加法命令的三個线程實現 240 GFLOPS (500 x 16 x 80 x 2) 的處理速率。這個數字有一定的規模感,作爲對比,十年前的一些世界頂級超級計算機甚至無法匹敵這個速度。
例如,桑迪亞國家實驗室的aragon XP/S140配備 3,680 個 Intel i860 CPU,峰值速度爲 184 GFLOPS。到 1995 年,這台機器已經有幾年歷史了,芯片开發的速度很快就超過了它,但 GPU 也是如此。
CPU 多年來一直在整合自己的 SIMD 陣列,例如,英特爾最初的 Pentium MMX 有一個專用單元,用於在向量上執行指令,最多包含 8 個 8 位整數。當 Xenos 在世界各地的家庭中使用時,此類裝置的尺寸至少增加了一倍,但與 Xenos 相比,它們仍然很小。
消費級顯卡开始採用具有統一着色器架構的 GPU 時,它們已經擁有比 Xbox 360 的圖形芯片明顯更高的處理速率。2006 年GeForce 8800 GTX中使用的 Nvidia G80(上圖)的理論峰值爲 346 GLFOPS,而 2007 年Radeon HD 2900 XT中使用的 ATI R600則擁有 476 GLFOPS。
兩家制造商很快就在其專業模型中利用了這種計算能力。雖然價格過高,但 ATI 的 FireGL V8650 和 Nvidia 的 Tesla C870 非常適合高端科學計算機。然而,在最高級別上,全球超級計算機仍然僅依賴標准 CPU。事實上,幾年後 GPU 才开始出現在最強大的系統中。
那么,當它們明顯提供了巨大的處理速度時,爲什么不立即使用它們呢?
首先,超級計算機和類似系統的設計、建造和操作都極其昂貴。多年來,它們都是圍繞大量 CPU 陣列構建的,因此集成另一個處理器並不是一朝一夕的事。此類系統在增加芯片數量之前需要進行徹底的規劃和初始小規模測試。
其次,讓所有這些組件協調運行,尤其是軟件方面,絕非易事,這也是當時 GPU 的一個重大弱點。雖然它們已經變得高度可編程,但以前可供它們使用的軟件相當有限。
Microsoft 的 HLSL(高級着色器語言)、Nvidia 的Cg 庫和 OpenGL 的 GLSL 使訪問圖形芯片的處理能力變得簡單,盡管純粹是爲了渲染。
統一着色器架構 GPU 改變了這一切。2006 年,ATI(當時是AMD 的子公司)和 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 進入計算競賽
與廣闊的技術評論世界不同,全球範圍內並沒有數百名評論者測試超級計算機的性能主張。然而,德國曼海姆大學於 20 世紀 90 年代初啓動的一個正在進行的項目正是致力於實現這一目標。該組織被稱爲“TOP500”,每年兩次發布全球最強大的 10 台超級計算機排行榜。
第一個誇耀 GPU 的條目出現在 2010 年,中國有兩個系統——星雲和天河一號。他們分別使用 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 部分)配對組成。
對 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卡的同時,AMD最大的服務器CPU(12核Opteron 6176 SE)也开始流行。對於 140 W 左右的功耗,CPU 理論上可以達到 220 GFLOPS,而上述 GPU 的峰值性能可達到 1,200 GFLOPS,僅多出 10 W,而且成本僅爲其一小部分。
不再“只是”顯卡
到了 2013 年,不僅僅是世界上的超級計算機在集體利用 GPU 的能力進行並行計算。Nvidia 正在積極推廣其GRID 平台,這是一種用於科學和其他應用的 GPU 虛擬化服務。最初是作爲托管基於雲的遊戲的系統而推出的,對大規模、經濟實惠的 GPGPU 不斷增長的需求使得這一轉變不可避免。在其年度技術會議上,GRID 被認爲是各領域工程師的重要工具。
在同一事件中,GPU 公司展示了代號爲 Volta 的未來架構。然而,公布的細節很少,普遍的假設是這將是另一款服務於 Nvidia 所有市場的芯片。
與此同時,AMD 也在做類似的事情,在其專注於遊戲的 Radeon 系列以及 FirePro 和 Radeon Sky 服務器卡中利用定期更新的 Graphics Core Next (GCN) 設計。那時,性能數據已經令人震驚——FirePro W9100 的峰值 FP32(32 位浮點)量爲 5.2 TFLOPS,這個數字對於不到二十年前的超級計算機來說是不可想象的。
當然,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 4x4 矩陣相乘,然後將另一個 FP16 或 FP32 4x4 矩陣與該結果相加(這一過程稱爲 GEMM 運算)。Nvidia 之前的 GPU 以及競爭對手的 GPU 也可以執行此類計算,但速度遠不及 Volta。GV100 是唯一使用該架構制造的 GPU,總共包含 512 個張量核心,每個核心能夠在每個時鐘周期執行 64 個 GEMM。
根據數據集中矩陣的大小以及所使用的浮點大小,Tesla V100 卡在這些張量計算中理論上可以達到 125 TFLOPS。Volta 顯然是爲小衆市場設計的,但 GP100 在超級計算機領域的進軍有限,而新的 Tesla 型號則迅速被採用。
PC遊戲愛好者會知道,Nvidia隨後在隨後的圖靈架構中將張量核心添加到其通用消費產品中,並开發了一種稱爲深度學習超級採樣(DLSS)的升級技術。最新版本使用 GPU 中的核心在放大圖像上運行神經網絡,糾正幀中的任何僞影。
在短時間內,Nvidia 獨佔了 GPU 加速的深度學習市場,其數據中心部門的收入大幅增長——2017 財年增長率爲 145%,2018 財年增長率爲 133%,2019 財年增長率爲 52%。截至 2019 財年末,HPC、深度學習等領域的銷售額總計 29 億美元。
然而,只要有錢,競爭就不可避免。2018 年,谷歌开始通過雲服務提供對其內部开發的張量處理芯片的訪問。亞馬遜很快也緊隨其後,推出了專用 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,有可能達到 4000 TOPS,在 AI 矩陣計算中採用低精度 INT8 數字格式。
英特爾的Ponte Vecchio GPU 同樣龐大,擁有 1000 億個晶體管,AMD 即將推出的 MI300 擁有 460 億個晶體管,包括多個 CPU、顯卡和內存小芯片。
然而,它們共有的一件事是它們絕對不是 GPU:它們不是 GPU。早在英偉達將該術語用作營銷工具之前,該縮寫詞就代表圖形處理單元。AMD 的 MI250X 沒有任何渲染輸出單元 (ROP),甚至 GH100 也只擁有類似於 GeForce GTX 1050 的Direct3D 性能,使得 GPU 中的“G”變得無關緊要。
那么,我們可以稱呼它們什么呢?“GPGPU”並不理想,因爲它是一個笨拙的短語,指的是在通用計算中使用 GPU,而不是設備本身。“HPCU”(高性能計算單元)也好不了多少。但也許這並不重要。畢竟,“CPU”一詞非常廣泛,涵蓋了各種不同的處理器和用途。
GPU 接下來要徵服什么?
AMD、英特爾、Nvidia 和其他數十家公司在 GPU 研發上投入了數十億美元,當今的圖形處理器不會很快被任何截然不同的產品所取代。對於渲染,最新的 API 和使用它們的軟件包(例如遊戲引擎和 CAD 應用程序)通常與運行代碼的硬件無關,因此從理論上講,它們可以適應全新的東西。
然而,GPU 中專門用於圖形的組件相對較少 - 三角形設置引擎和 ROP 是最明顯的組件,並且最近版本中的光线追蹤單元也高度專業化。然而,其余部分本質上是大規模並行 SIMD 芯片,由強大而復雜的內存/緩存系統支持。
基本設計與以往一樣好,未來的任何改進都與半導體制造技術的進步緊密相關。換句話說,它們只能通過容納更多邏輯單元、以更高的時鐘速度運行或兩者的組合來改進。
當然,它們可以合並新功能,使其能夠在更廣泛的場景中發揮作用。在 GPU 的歷史上,這種情況已經發生過好幾次,不過向統一着色器架構的過渡尤爲重要。雖然最好有專用硬件來處理張量或光线追蹤計算,但現代 GPU 的核心能夠管理這一切,盡管速度較慢。
這就是爲什么 MI250 和 GH100 等產品與台式電腦的同類產品非常相似,未來用於 HPC 和 AI 的設計很可能會遵循這一趨勢。那么,如果芯片本身不會發生重大變化,那么它們的應用又如何呢?
鑑於與 AI 相關的任何事物本質上都是計算的一個分支,因此只要需要執行大量 SIMD 計算,就可能會使用 GPU。雖然科學和工程領域沒有多少領域尚未使用此類處理器,但我們可能會看到 GPU 衍生產品的使用激增。
谷歌的 Coral 加速器板配有兩個 edgeTPU 芯片
目前人們可以購买配備微型芯片的手機,其唯一功能是加速張量計算。隨着 ChatGPT 等工具的功能和普及度不斷增強,我們將看到更多配備此類硬件的設備。
不起眼的 GPU 已經從僅僅比 CPU 更快地運行遊戲的設備發展成爲通用加速器,爲全球的工作站、服務器和超級計算機提供動力。全球數百萬人每天都在使用它——不僅在我們的計算機、電話、電視和流媒體設備中,而且在我們使用包含語音和圖像識別或提供音樂和視頻推薦的服務時也是如此。
GPU 真正的下一步可能是一個未知的領域,但有一點是肯定的,圖形處理單元將在未來幾十年內繼續成爲計算和人工智能的主要工具。
本文作者可以追加內容哦 !
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
標題:爲什么是GPU?
地址:https://www.breakthing.com/post/82990.html