算力引擎的內核:GPU 架構深度解析與 H100 技術密碼? 原創
本文聚焦 GPU 這一 AI 時代的核心算力引擎,從 CPU 與 GPU 的本質差異切入,解析二者在架構設計(運算單元占比、并行能力)和協同工作流程(數據傳輸、指令注入、并行計算、結果回傳)的底層邏輯。
以 NVIDIA H100(Hopper 架構)為核心案例,深入拆解其基本架構:80GB HBM3 顯存的高帶寬設計、PCI-E 5.0 接口的傳輸能力,以及內部層級化結構 —— 從頂層 GPC(圖形處理集群)、中層 TPC(紋理處理集群)到核心 SM(流式多處理器)的功能分工。同時,詳解 SM 的四象限組成(Tensor Core、CUDA Core 等計算單元及緩存系統)、五級緩存機制(寄存器、L0/L1/L2 緩存、HBM3)的動態調度策略,以及 TMA(張量內存加速器)對數據搬運效率的革命性提升,為理解 GPU 高性能計算原理提供全景視角。
GPU:AI時代的算力引擎
在AI技術蓬勃發展的今天,大模型訓練和推理應用正在各個行業快速普及。越來越多的企業開始自行訓練AI模型,或是基于大廠提供的基礎模型進行二次開發。在這個過程中,數據隱私保護的要求促使企業傾向于在本地部署AI模型,而不是完全依賴云端服務。這種趨勢使得硬件部署成為了AI應用落地的重要課題,而GPU作為AI計算的核心硬件,自然成為了關注的焦點。
CPU VS GPU
在計算機系統中,CPU(中央處理單元)和GPU(圖形處理單元)是兩個核心組件,它們各自承擔著不同的任務,設計理念和架構也有所不同。CPU是計算機的大腦,負責處理操作系統和應用程序運行所需的各類計算任務。它具有強大的通用性,能夠處理各種復雜的數據類型和邏輯判斷。CPU的內部結構非常復雜,因為它需要應對大量的分支跳轉和中斷處理,以確保程序能夠高效、穩定地運行。由于CPU需要處理的任務種類繁多,它的設計更注重邏輯控制和串行計算能力,通過流水線技術等手段縮短程序的執行時間。
如下圖所示,從架構上看,CPU和GPU都包含運算單元(ALU)、控制單元(Control)和緩存單元(Cache),但三者所占的比例截然不同。CPU的緩存單元占據了很大一部分空間,大約占50%,控制單元占25%,運算單元僅占25%。這種設計使得CPU能夠通過緩存減少數據訪問的延遲,提高處理效率。而GPU的緩存單元僅占5%,控制單元占5%,運算單元則占據了90%。GPU的設計更注重運算能力的提升,通過大量運算單元和線程來實現高吞吐量。
在并行處理能力方面,CPU擁有少量的強大計算單元,適合處理順序執行的任務。它的時鐘頻率很高,能夠在很少的時鐘周期內完成算術運算。CPU還具備復雜的控制邏輯單元,可以提供分支預測能力,使其在處理邏輯控制和串行計算時表現出色。相比之下,GPU采用了數量眾多的計算單元和線程,能夠實現非常大的計算吞吐量。GPU的超配線程設計可以很好地平衡內存延遲問題,從而同時處理多個任務,專注于大規模高度并行的計算任務。
一言以蔽之,CPU更適合處理順序執行的任務,如操作系統、數據分析等;而GPU則適合處理需要大規模并行計算的任務,如圖形處理、深度學習等。
CPU 與 GPU 協同工作
在了解了CPU(中央處理器)和GPU(圖形處理器)的不同功能和特點后,我們可以進一步探討它們是如何協同工作的。CPU和GPU雖然在設計和功能上有所不同,但通過高效協作,能夠充分發揮各自的性能優勢,提升整體系統的計算效率。接下來,我將通過下面這張圖來展示CPU與GPU協作的全過程。
根據圖上的標號,進行詳細解釋:
數據傳輸階段
- CPU發起DMA(Direct Memory Access,直接內存訪問),將系統主內存中的數據復制到GPU內存中。
指令注入階段
- CPU向GPU注入指令,告訴GPU需要執行的任務。 ?
- 例如,在深度學習任務中,這些指令可能包括模型推理或訓練的命令。
并行計算階段
- GPU中的多個計算線程會并行執行CPU注入的指令。 ?
- 由于GPU擁有大量計算核心,特別適合處理高度并行化的任務,如矩陣運算。
結果回傳階段
- GPU完成計算后,會通過DMA將結果數據從GPU內存復制回系統主內存中。 ?
- 這些結果可能包括模型的推理輸出或訓練過程中的中間結果。通過這種協作機制,CPU負責任務的調度和管理,而GPU則專注于執行高并行化的計算任務,從而實現了計算資源的高效利用。
GPU 基本架構
在介紹了CPU和GPU的協作方式后,我們接下來將聚焦于GPU的內部機構,特別是以NVIDIA H100(基于Hopper架構)為例,深入了解其高性能計算的核心秘密。作為英偉達于2022年發布的旗艦級GPU加速器,H100專為高性能計算(HPC)、人工智能(AI)和大規模數據中心設計,是前代A100(Ampere架構)的升級版。其內部設計采用了多項突破性技術,其中最引人注目的是其高帶寬內存(HBM)和PCI-E 5.0接口的結合。
如下圖所示,H100配備了80GB的HBM3顯存,這是其性能的核心保障之一。與之配套的顯存技術——高帶寬內存(HBM),是一種基于3D堆疊技術的高性能內存標準。通過將多個DRAM芯片垂直堆疊在GPU芯片旁邊(圖的左側)。多個 HBM 堆疊的部分就是顯卡的顯存。而在它右邊通過雙箭頭連接的綠色區域就是顯卡的運算核心,包含:運算、緩存、控制等功能,在后面的內容中會展開描述。
讓我們將上面的圖片放大, 關注 HBM 顯存本身,如下圖所示。多個顯存芯片(HBM)通過硅通孔(TSV, Through-Silicon Via)實現層間通信,像一棟高樓,每層樓是一個DRAM芯片,通過“電梯”(TSV)快速連通所有樓層,從而實現了更高的傳輸效率。HBM顯著提升了內存帶寬,同時減少了功耗和占用面積。
需要注意的是,H100芯片支持6個HBM堆棧(HBM Stack),每個堆棧可提供800GB/s的傳輸帶寬,總內存帶寬高達4.8TB/s。
在連接方面,H100通過16個PCI-E 5.0通道與CPU相連,每個通道的單向帶寬約為4GB/s(雙向約8GB/s),總理論傳輸帶寬可達63GB/s。這一設計確保了CPU能夠高效地將程序指令發送到GPU,并為GPU提供訪問計算機主存儲器的快速通道。
GPU 內部結構
在對 GPU 的基本架構有所了解之后,然后深入到 GPU 的運算核心中一探究竟。如果籠統而言,GPU 的運算核心包含:運算、緩存和控制。不過設計到的組件和單元較多,需要通過下圖來了解。
我們可以清晰地看到 NVIDIA GH100 芯片的層級架構,從頂層的 GPC 到下層的 TPC、SM,再到具體的運算核心(CUDA Core、Tensor Core、RT Core)和緩存(L2 Cache)的分布與功能。
從圖片整體而言,描述了 GPU 的運算單元與其他組件的協同情況。圖的上方通過 PCI-E5.0 的接口與 CPU 溝通,左右兩側與 HBM 顯存進行數據交換,下方利用英偉達的 NVLinke 接口技術與其他 GPU 顯卡進行溝通。
接下來,讓我們把目光放到這張圖的中間部分:
GPC(Graphics Processing Cluster,圖形處理集群)
它用綠色的區域表示,在 H100 GPU 中有 8 個 GPC。它負責管理和協調多個下級計算單元(如 TPC、SM)。每個 GPC 包含 9 個 TPC。每 4 個 GPC 共享 30MB L2 緩存,整顆芯片總計 60MB L2 Cache。
它用來分配計算任務,將圖形渲染或計算任務分發到下屬 TPC/SM。同時避免不同任務間的資源爭用(如光線追蹤與 AI 計算)。
TPC(Texture Processing Cluster,紋理處理集群)
它是 GPC 的子模塊,傳統上專注于紋理處理(圖形渲染),但在現代 GPU 中已擴展為通用計算單元。每個 GPC 包含 9 個 TPC,整顆芯片共 72 個 TPC。每個 TPC 包含 2 個 SM,整顆芯片總計 144 個 SM。它用來做紋理映射,例如:加速游戲/圖形中的紋理采樣(雖命名保留“紋理”,實際功能已泛化)。負責與 SM 協作處理通用計算(如 CUDA 核心的并行任務)。
SM(Streaming Multiprocessor,流式多處理器)
它是 NVIDIA GPU 的最小計算單元,位于 GPC 內部,H100 的 TPC 中包含了 2 個 SM 單元,SM 直接執行 CUDA 核心、Tensor Core 等運算任務。換句話說它就是運算的主力軍。每個 SM 包含:128 個 CUDA Core(FP32/INT32 運算)。4 個 Tensor Core(FP8/FP16/TF32 加速 AI)。1 個 RT Core(光線追蹤加速)。整顆芯片總計 144 個 SM→總計 18,432 個 CUDA Core(144 × 128)。
L2 Cache(二級緩存)
它位于整個運算核心的中間,是全局共享的高速緩存,用于減少訪問顯存(HBM)的延遲。我們可以看到 H100 擁有 60MB L2 Cache(8 GPC ÷ 4 × 30MB)。采用 非均勻分配(NUMA):每 4 個 GPC 共享 30MB,優化數據局部性。這起到了數據復用的效果,頻繁訪問的數據(如 AI 模型參數)緩存在 L2,降低 HBM 訪問功耗。還會肩負協調多個 GPC 間數據同步的責任。
SM 流式多處理器
通過前面對 GPU 內部結構的介紹,我們發現在GPU的層級架構中,SM(Streaming Multiprocessor) 是執行實際計算任務的核心單元。每個SM如同一個高度并行的微型計算集群,負責管理數百個并發線程的計算資源調度。當GPU接收來自CPU的指令后,任務會被拆解成線程塊(Thread Block)分配到各個SM上執行。這種設計使數萬個線程能高效協同,尤其適合處理圖形渲染與AI計算中的海量并行任務。
SM 內部組成結構
接下來,通過下圖對 SM 的內部結構進行了解。
每個SM被劃分為4個對稱的象限(Quadrant),形成高度復用的計算單元集群:
- 計算資源分層部署:每個象限配備 1個第四代Tensor Core(專精矩陣運算,如FP16矩陣乘法提速10倍)和 32個FP32 CUDA Core(處理標量計算與邏輯控制)。二者互補協作——Tensor Core像“矩陣流水線”高效處理大塊數據,CUDA Core則如“精密工具組”執行激活函數、數據轉換等細粒度操作。?
- 執行單元全域覆蓋:INT32單元(地址計算)與FP64單元(科學計算)分布其間,確保整數/雙精度需求無縫銜接。特殊函數單元(SFU)獨立處理超越函數(如SIN/COS),釋放主計算管線壓力。?
- 存儲系統緊耦合:每象限獨占 1KB寄存器文件(線程私有,1-2周期延遲),構成最速數據通道;共享的 L0指令緩存實時輸送指令流,避免計算單元“饑餓”。全局 L1緩存(256KB/SM)作為數據中轉站,減少高延遲內存訪問。?
- 動態調度中樞:Warp調度器(每SM配4個)持續監控32線程束狀態,將矩陣運算分派至Tensor Core,標量指令路由到CUDA Core,實現零空閑的流水線作業。
從上圖得知,每個SM采用四象限(Quadrant)架構,這里我們將象限中的組件列了一個清單方便查看:
組件類型 | 數量/象限 | 功能說明 | 關鍵技術特性 |
Tensor Core | 1個 | 加速矩陣運算(GEMM) | 第四代架構,支持FP8/FP16/TF32 |
FP32 CUDA Core | 32個 | 單精度浮點運算(激活函數等) | 傳統標量計算核心 |
INT32單元 | 16 個 | 整數運算與地址計算 | 獨立于FP32單元 |
FP64單元 | 16 個 | 雙精度科學計算 | 面向HPC場景 |
寄存器文件 | 1KB | 線程私有存儲(速度最快) | 延遲1-2周期 |
L0指令緩存 | 1 個 | 減少指令獲取延遲 | 服務象限內所有核心 |
LD/ST | 8 個 | 加載參數訓練集 | |
SFU | 1 個 | 保存特殊函數 | |
Warp Scheduler | 1 個 | 運算線程調度器 | |
Dispatch Unit | 1 個 | 發送指令 |
SM內部工作機制
在了解了 SM 的組成結構之后, 再來看看它是如何工作。 SM通過三級流水線機制實現組件高效協作,以執行一條典型指令為例:
階段1:指令調度
- Warp Scheduler監控32線程組成的Warp狀態,選擇就緒的Warp。?
- Dispatch Unit解析指令類型,分配至對應硬件單元:
A.FP32/INT32運算→CUDA Core
B.矩陣乘法 (GEMM)→Tensor Core
C.超越函數 (e.g. SIN)→SFU(特殊函數單元)
D.數據搬運→LD/ST(加載/存儲單元)
階段2:數據供給
- 寄存器文件提供線程級瞬時數據(如矩陣計算中的中間值)?
- L1 Cache緩存共享數據(若寄存器溢出則暫存至此處,延遲20-30周期)?
- TMA(Tensor Memory Accelerator)優化矩陣分塊訪問(自動處理子矩陣內存布局)
階段3:并行執行
假設上圖完成 Transform 模型架構的運算,大致工作流程如下:
- Tensor Core率先處理核心矩陣運算:接收16×16矩陣塊(如QK<sup>T</sup>),執行FP16/FP8混合精度GEMM,提供10倍于標量單元的吞吐量。?
- FP32 CUDA Core承接后續計算:處理非矩陣操作,包括Softmax歸一化、激活函數(GELU/ReLU)等標量密集型任務。?
- SFU加速特殊函數:專精超越函數計算(如Softmax中的指數運算),降低主計算管線延遲。?
- 分級存儲體系保障數據供給:結果優先寫回寄存器(1-2周期延遲)或L1緩存(20-30周期),最終由L2緩存(60MB)協調寫入HBM顯存(3.35TB/s帶寬)。
GPU 的緩存機制
通過對 SM 的內部組成和工作原理的介紹,讓我們對 GPU 的運算有了更加深刻的了解,不過在探究 GPU 內部的過程中發現遇到了很多的“緩存”。這里我們以英偉達 H100 顯卡為例,對其緩存按照五級分層給大家做詳細介紹。
這五級分層分別是:頂層的寄存器文件(1周期延遲/1KB線程)與L0指令緩存如同貼身工作臺,專精服務線程的即時計算與指令吞吐;中層的L1緩存(256KB/SM)與L2緩存(60MB/GPU)扮演共享樞紐,以容量換帶寬,高效緩存高頻數據塊(如Attention矩陣切片);底層的HBM3顯存(80GB/3.35TB/s)則如中央倉庫,承載全量模型參數。這套機制通過動態路由策略——將98%的“熱數據”鎖定在高速緩存,僅5%的“冷數據”下沉至顯存——使H100的Tensor Core利用率突破98%,同時將AI訓練的吞吐量推升6倍。
GPU 緩存分層
如下圖所示,我們將 GPU (以英偉達 H100 為例)緩存分成五個層次。
針對這五個層級,按照功能和服務的對象將其分為頂層、中層和底層,如下:
頂層:專注運算命令的極速通道(服務線程即時需求)
組件 | 速度優勢 | 容量限制 | 高頻場景示例 |
寄存器文件 | 1周期延遲(硬件極限) | 1KB/線程 | 矩陣乘法中間累加值 |
L0指令緩存 | 2-5周期取指(0空轉) | 4KB/象限 | Tensor Core的HMMA指令預取 |
中層:專注數據緩存的均衡通道(服務SM協作需求)
組件 | 速度-容量平衡點 | 核心功能 | 實戰價值 |
L1數據緩存 | 256KB/SM(20-30周期) | 緩存Attention頭的K/V塊 | 使QK^T計算減少76% HBM訪問 |
L2 數據緩存 | 60MB/GPU(100-200周期) | 聚合多SM的梯度數據 | AllReduce通信延遲降低40% |
底層:專注參數模型的海量通道(服務全局存儲需求)
組件 | 容量王者 | 速度代價 | 不可替代性 |
HBM3顯存 | 80GB(存儲全量參數) | 300+周期 | 承載百億參數大模型 |
GPU 緩存策略
1. 熱度感知緩存
基于訪問頻率動態調整數據層級, L2緩存通過內置的訪問計數器自動識別熱點數據,例如Transformer的Embedding表。當某個數據塊被連續訪問超過三次時,其緩存優先級會被提升,可能被保留在L2緩存的Bank0高速區。此外,在多個SM共享相同權重的情況下,例如在AllReduce期間,L2緩存會采用單副本緩存策略,以優化資源使用。
2. 寄存器壓力釋放
通過編譯器驅動數據生命周期管理。通過路由邏輯實現高效的資源分配和性能優化。在實施機制方面,寄存器分配算法優先保留循環計數器、矩陣累加器等關鍵變量,確保核心計算任務的高效執行。當寄存器不足,例如線程使用超過1KB時,系統會自動將中間變量暫存至L1緩存,以避免性能瓶頸。
此外,針對長生命周期變量,如優化器狀態等,系統采用動態降級策略,直接路由至L2或HBM,進一步優化內存使用效率。在性能防護方面,編譯器引入了寄存器溢出警告機制,當寄存器溢出時會觸發性能懸崖警告(通過NVCC編譯選項--ptxas-warnings實現),提醒開發者關注潛在性能問題。同時,Hopper架構新增寄存器文件壓縮技術,使寄存器的有效容量提升40%,從而在有限的硬件資源下實現更高的計算效率。
3. 顯存預取流水線
路由邏輯主要關注計算與數據搬運的時空重疊,通過三級預取流水線和TMA加速器來優化數據傳輸與計算的并行性。在實施機制方面,三級預取流水線分為三個層級:Tier1階段,Tensor Core啟動時,DMA預取相鄰數據至L2緩存;Tier2階段,L2到L1的數據搬運與標量函數單元(SFU)的計算任務并行執行;Tier3階段,寄存器加載與矩陣乘法操作實現重疊執行。
此外,TMA(張量內存加速器)通過張量坐標的直接定位,能夠快速訪問HBM中的數據塊,從而減少地址計算的開銷。在帶寬優化方面,系統將細碎的數據傳輸請求合并為128字節的大塊傳輸,這使得HBM3的效率提升了4倍;同時,當Tensor Core正在處理一個16×16的矩陣時,DMA已經預取了下一個64×64的數據塊,進一步提升了數據傳輸的效率和計算的連續性。
緩存路由策略全景圖
這里我們將路由策略做一個總結,通過下面矩陣表格的方式展示。
數據特性 | 路由目標 | 策略實現 | 硬件支持 |
指令流 | → L0緩存 | 分支預測預取下4條指令 | PC-Relative Addressing |
線程私有中間結果 | → 寄存器 | 編譯器寄存器分配算法 | 寄存器文件壓縮 |
高頻共享數據 | → L1緩存 | LRU替換策略+硬件預取 | 256KB SRAM陣列 |
跨SM共享權重 | → L2緩存 | 訪問計數晉升機制 | 60MB全域緩存 |
歷史參數/冷數據 | → HBM | DMA異步搬運+緩存逐出 | HBM3 3.35TB/s帶寬 |
TMA 加速原理
前面我們花費了很多的篇幅在講解 GPU 的構成和工作方式,并且在 GPU 的運算單元上停留了很長時間。我們知道,在大模型訓練和高性能計算任務中,GPU 的計算效率并不僅僅取決于 Tensor Core 的運算能力,還極大依賴于數據搬運是否高效。而傳統架構中,計算線程必須親自負責內存地址生成與數據傳輸任務,這使得原本用于數學運算的資源被“數據搬運”占用,效率無法最大化。
為了解決這個問題,NVIDIA 在 Hopper 架構的 H100 中引入了 TMA(Tensor Memory Accelerator)單元,徹底改變了數據在 GPU 內部的傳輸機制。
為了把 TMA 這種重要的概念搞清楚,通過下圖給大家做詳細講解,先看圖的左邊。
在 A100 中,數據從顯存搬運到 SM(流式多處理器)內部緩存的全過程,依賴指令線程來完成。
當計算需要數據時,線程首先要手動生成內存地址,再通過 LDGSTS 指令從顯存讀取數據。這意味著線程不僅要負責發起讀寫操作,還要等待數據搬運完成。在這個過程中,線程無法繼續進行其他計算任務,Tensor Core 的計算資源也被閑置下來。
換句話說,在 A100 架構中,“線程+數據線程”是合并在一起的,既要思考如何計算,也要親自去“搬磚”。尤其在大模型訓練這種需要頻繁搬運大塊數據的任務中,這種緊耦合的模式會嚴重限制整體吞吐率。
既然 A100 的設計限制了整體吞吐量,那么我們看看圖的右邊 H100 在加入了 TMA 有何改觀。H100 的最大變化在于新增了一個名為 TMA 的硬件單元,專門負責地址生成和數據搬運。現在,線程只需告訴 TMA 自己需要哪一塊數據、數據的尺寸和布局等信息,TMA 就能自動生成地址,直接將數據從 GPU 顯存搬運到共享內存或一級緩存中。
圖中可以看到,H100 的指令線程與數據線程已經分離,原本由線程執行的數據搬運操作完全交由 TMA 處理。線程和 Tensor Core 因此可以繼續執行數學運算,不再被等待或阻塞。
這種架構上的優化,使得 SM 內部的資源調度更加高效,計算與數據訪問可以并行進行,尤其對 AI 和 HPC 等任務密集型場景,帶來顯著的性能提升。
TMA 的出現最大程度上利用了緩存的時間局部性和空間局部性原則,將頻繁使用的數據及時搬入共享內存,讓計算單元可以高速、低延遲地訪問數據。
在 GPU 這樣數以千計線程并行執行的環境中,避免線程在 I/O 上的等待成為提升效率的關鍵。而 TMA 的加入,則是在這一關鍵點上,邁出的決定性一步。
補充說明:什么是時間局部性和空間局部性?
GPU(以及 CPU)之所以設置緩存,是為了避免頻繁訪問速度較慢的顯存或主存,而緩存的命中效率依賴于“數據局部性”原則。
時間局部性指的是:剛剛訪問過的數據,很快可能會再次被訪問。比如你正在做一段矩陣計算,某個數據塊多次參與乘法,就體現了時間局部性。
空間局部性則是指:如果某個地址的數據被訪問,那么它附近的數據也很可能在接下來被訪問。比如讀取一個數組時,往往會按序讀取多個相鄰元素,這就屬于空間局部性。
TMA 支持批量搬運連續的數據塊,正好契合這兩個局部性原則。它能預判和預取有可能用到的數據,減少線程頻繁請求顯存的次數,讓共享內存和一級緩存的命中率大大提高,進而提升整體計算效率。
總結
本文系統剖析了 GPU 的架構設計與工作機制,核心揭示了其作為并行計算引擎的獨特優勢。通過對比 CPU 與 GPU 的架構差異(運算單元占比、并行能力側重),闡明二者協同工作的高效模式。以 H100 為實例,層層拆解其層級化結構:GPC 的任務分配、TPC 的功能擴展、SM 的并行計算核心,尤其是 SM 內部 Tensor Core 與 CUDA Core 的分工協作,構成了高效處理 AI 與圖形任務的基礎。
五級緩存機制通過動態調度熱數據,平衡了速度與容量;TMA 技術則通過分離指令與數據線程,突破了數據搬運的效率瓶頸。這些設計共同支撐了 H100 的高性能表現,使其成為 AI 訓練、高性能計算的核心硬件,也為理解現代 GPU 的技術演進與應用價值提供了清晰框架。
作者介紹
崔皓,51CTO社區編輯,資深架構師,擁有18年的軟件開發和架構經驗,10年分布式架構經驗。
