晶片層 開放閱讀

佔用率

Occupancy

概念 ID
occupancy
更新時間
2026-05-29
來源數量
待補

佔用率

3 秒看懂

  • 佔用率(Occupancy) 是衡量GPU一個流多處理器(SM)上活躍執行緒束(warp)數量與理論最大排程能力之比的指標,直觀反映SM中“有多少等待被執行的活兒”。
  • 在深度學習訓練/推論的背景下,佔用率直接決定GPU隱藏記憶體延遲的能力——佔用率越高,SM在一條指令發射後能立刻切換到另一個可執行的warp,將片上計算單元“餵飽”。
  • 它不是“越高越好”的萬能指標:過高的佔用率可能帶來暫存器溢位(若限制過度)和共享記憶體容量不足降低資料複用,反而犧牲單個執行緒的效率(如矩陣乘法中每個執行緒複用資料的效率),業界常在佔用率與其它資源使用之間尋找平衡點。

3 分鐘產業解釋

在深度學習訓練的大規模平行計算鏈路中,佔用率是隱藏在硬體利用率背後的一級微觀排程指標。現代GPU由幾十個流多處理器(SM)構成,每個SM內部維護著數十個warp(每個warp包含32個執行緒)的上下文。SM按照指令發射邏輯,在每個時鐘週期從就緒的warp中挑選一個發射指令。如果就緒warp太少,當某warp因全域性記憶體訪問長延時(數百時鐘週期)而停滯時,SM將無其他任務可執行,計算單元空轉。

對於千卡級大型模型訓練而言,單個GPU的微架構效率會被放大。假設每個warp因記憶體等待停頓400週期,若佔用率僅25%(即可排程warp數遠低於理論資源限制),則近300個週期SM完全閒逛。反之,非常高的佔用率能通過“多份工作”讓SM幾乎連續發射指令。然而,為達到高佔用率往往需減少每個執行緒塊的資源佔用量(如暫存器、共享記憶體),這使得單個執行緒的資料複用度下降,可能導致總指令數增加、片上網路頻寬壓力攀升。所以,在深度學習架構(PyTorch/TensorFlow)與底層庫(cuBLAS/cuDNN)的運算元實現中,佔用率是調優迴圈的核心手藝之一,尤其影響小矩陣乘法、批次小運算元融合(Kernel Fusion)等場景的實際吞吐量。

15 分鐘專家深入

佔用率的概念根植於GPU的吞吐量設計哲學。與CPU通過大快取、分支預測低延遲隱藏不同,GPU使用海量執行緒並行來掩蓋長延時操作。這種“以量換時”策略的物理基礎就是warp排程器能在每個週期從所有未阻塞的warp中挑選出就緒的warp。於是,有多少warp“活著”且可被排程,成為決定硬體功能單元利用水平的核心槓桿。

定量關係可由 Little定律 思想理解:

  • 等待記憶體回覆的執行緒數 = 記憶體訪問頻率 × 記憶體延時
  • 若記憶體延時固定,必須保留足夠數量的活躍warp,才能讓SM始終有可發指令的warp,否則會因“執行緒乾涸”而喪失覆蓋延時的能力。

從AI晶片系統視角延伸,AMD對應概念為“Wavefront Occupancy”,其硬體執行緒粒度(wavefront為64執行緒)不同,但原理相通。在面向AI訓練的自研晶片(如Google TPU、華為昇騰)中,類似概念往往體現在矩陣計算單元(MXU/Cube)與標量/向量單元的指令流水深度和上下文保持能力,雖不直接叫佔用率,但內在權衡完全一致:任務併發的上下文越多,延遲容忍力越強,但每個上下文可用的快速儲存(暫存器/便籤儲存器)越少,可能降低計算密度。

如今,隨著Transformer類模型越來越深、MoE(混合專家)架構引入動態路由和All-to-All通訊,計算圖呈現更強的“瘦長型”運算元特徵(如大量小矩陣乘法、自定義啟用),這些運算元對佔用率極為敏感,因為每個執行緒塊所含的計算量不足以單純依靠執行緒級並行,必須輔以更多warp級並行才能壓滿單位頻寬。

技術原理(最深)

1. 佔用率計算公式

以NVIDIA CUDA模型為例,佔用率定義為:

Occupancy = Active_Warps_per_SM  /  Max_Warps_per_SM

其中 Max_Warps_per_SM 是架構規定的每個SM最多可駐留的warp數(取決於硬體資源上限,如warp槽位數量),而 Active_Warps_per_SM 受多種資源約束共同限制:

  • 執行緒限制:每個SM可同時駐留的最大執行緒總數(等於 Max_Warps_per_SM × 32),同時受每個SM最大執行緒塊數 (Max_Blocks_per_SM) 限制。
  • 暫存器限制:每個執行緒使用的暫存器數量決定了一個執行緒塊佔用多少暫存器,進而限制SM內可同時駐留的執行緒塊數。暫存器溢位(spill到L1快取/區域性記憶體)會降低有效效能,但不影響佔用率的分母形式(CUDA不因溢位而減少駐留warp數,但會導致指令數激增)。
  • 共享記憶體限制:每個執行緒塊宣告的共享記憶體量決定了一個SM內最多可放置多少執行緒塊,超出限制便無法啟動更多塊。
  • 其他資源:如Tensor Core使用、特殊記憶體一致性要求等可間接影響。

典型的資源約束圖可表示為:

           硬體資源配置: 
           每個SM最大warp數: W_max(架構定)
           每個SM最大執行緒數: T_max(架構定)
           每個SM最大塊數:   B_max(架構定)
           每個SM暫存器數量: R_total
           每個SM共享記憶體大小: S_total

           執行緒塊配置: 
           每塊執行緒數: threads_per_block
           每塊暫存器:  regs_per_thread × threads_per_block (向上取整對齊)
           每塊共享記憶體: smem_per_block

           執行緒維度限制:   floor(W_max * 32 / threads_per_block) 且 ≤ B_max
           暫存器限制:     floor(R_total / (regs_per_thread * threads_per_block))
           共享記憶體限制:   floor(S_total / smem_per_block)
           最終活躍warp數 = min(三個限制) * (threads_per_block / 32)

2. 延遲隱藏機制

在SM內部,每個warp有自己的程式計數器、暫存器堆和狀態。當warp發出全域性記憶體載入指令後,在資料返回前(400~800週期)該warp進入“等待”狀態,排程器會立即從其他就緒warp中選擇下一個發射指令。若活躍warp數N足夠多,SM在每個週期幾乎總能找到一個ready warp,使得功能單元利用率逼近100%。

公式化表達吞吐量飽和度所需的 N_required ≈ memory_latency × memory_throughput_per_warp / arithmetic_throughput。實際中,可以粗略認為 佔用率越高,隱藏相同延遲所需的最小warp數越遠低於實際提供量,從而更容易達到飽和。

過高的佔用率會導致每個執行緒可用的暫存器數量被壓縮。若暫存器不足,編譯器會插入溢位/填充程式碼,不僅增加執行指令數,還可能因為反覆存取快取導致額外的記憶體壓力,引發“偽隱藏”——看似佔用率高,實則每週期有效計算指令比例下降。

3. 在AI運算元中的典型權衡

以矩陣乘法為例,每個執行緒塊通常從全域性記憶體載入A/B矩陣瓦片到共享記憶體,再利用暫存器做多層複用(如外積累積)。要讓一個執行緒計算多輸出元素(即提高單個執行緒的計算/資料傳輸比),需要更多暫存器來保持中間累加器。但暫存器多了,一塊的執行緒數就必須少,導致總warp數下降,會影響整體隱藏延遲的能力。因此,開發者常通過自動調優或啟發式方法選擇最最佳化分塊(tiling)大小,使得佔用率落在效能“甜點區”而不是最大值。使用CUDA Occupancy Calculator之類的工具可以直觀地看到這種約束的互鎖關係。

技術演進史

  • Fermi(2010)之前:硬體warp排程能力有限,佔用率主要由執行緒槽位和暫存器總量決定。開發者通過手工分配暫存器數量(maxrregcount)來手動權衡。
  • Kepler(2012) - Maxwell(2014):改進了warp排程器的數量和排程策略;暫存器堆變大,SM可駐留warp數上限提升(Kepler SMX 每個SM多達64個warp),為更高佔用率提供物理基礎。獨立執行緒排程在此階段尚未引入(由Volta架構首次實現)。
  • Volta(2017):獨立執行緒排程(Independent Thread Scheduling)出現,warp內執行緒可交錯執行,佔用率模型更復雜,但底層仍可用活躍warp數衡量併發度。同時Tensor Core引入,佔用率中需額外考慮Tensor Core指令的發射依賴。
  • Ampere(2020) - Hopper(2022):SM結構進一步分裂為多個分割槽(如GA10x SM為4個處理分割槽),每個分割槽本地暫存器檔案、warp排程器更獨立,區域性分割槽的佔用率變得重要,而非整個SM的全域性佔用率。這一變化使得細粒度的warp分配和bank衝突躲避策略直接影響效能。
  • AI專用加速器時代:Google TPUv1/v2/v3 基於脈動陣列,沒有傳統GPU warp概念,但通過明確的MXU流水級維持大量並行操作,其“佔用”等價於“保持流水線充滿”所需的最小批次維度設定。Habana Gaudi等使用Tiled architecture,每個Tile內計算核的上下文數量類似佔用率概念。

技術路線對比(量化表)

下表聚焦於不同計算架構在“佔用率”相關指標上的定性對比,因各廠商未公開精確極限值,所以採用定性程度標註(依據公開程式設計指南及白皮書中的約束說明)。

架構 / 廠商並行單元粒度佔用率核心指標資源約束要點調優工具
NVIDIA CUDAWarp(32執行緒)Active warps / Max warps per SM(或per分割槽)暫存器、共享記憶體、每個SM的塊數Occupancy Calculator, NSight Compute
AMD ROCmWavefront(64執行緒)Wavefront occupancy per CU(與SM等價)向量暫存器、LDS(區域性資料共享)rocProf, Radeon GPU Profiler
Intel Xe-HPCHardware thread (SIMD8)EU執行緒佔用率,基於每個subslice的執行緒上下文數暫存器、SLM(共享本地記憶體)Intel VTune, GPU-Ocelot相容分析
Google TPU脈動陣列的維度無直接warp概念;用“MXU利用率”度量VPU/MXU的批次並行度、向量儲存器頻寬TPU Profile/TensorBoard trace
華為昇騰標量/向量/Cube分組DaVinci架構的multi-core間任務並行;每個core內指令多發射向量暫存器、L1 buffer、資料搬運Ascend Profiling Tool(msprof)

注:具體每個架構的warp/塊上限數字因代際而異,表中僅定性給出維度,具體數值需查閱最新硬體程式設計指南。

上下游

  • 上游——硬體設計:GPU架構師根據目標負載(如深度學習運算元特徵)決定SM內暫存器堆容量、warp排程器數、共享記憶體大小和分割槽數。佔用率模型是架構模擬中評估資源尺寸的重要輸入。
  • 上游——編譯器與驅動:PTX/SASS編譯器在暫存器分配、指令重排時影響最終暫存器用量和溢位情況;CUDA驅動層面亦有warp排程策略微調。
  • 中游——深度學習架構與運算元庫:PyTorch/TensorFlow呼叫cuBLAS/cuDNN或自實現Kernel時,launch configuration(grid/block尺寸、動態共享記憶體)直接影響佔用率。通過融合運算元(如FlashAttention)手工設計暫存器分塊和共享記憶體分配,達到更優佔用率和有效頻寬。
  • 下游——大型模型訓練平台與雲端服務:GPU雲端例項的整機效能除受單卡佔用率影響,還與多卡通訊疊加、PCIe/NVLink頻寬競爭有關。佔用率最佳化好的運算元可提高單卡吞吐,從而降低長期訓練的總TCO(總體擁有成本)。

關鍵指標

  • 理論佔用率:基於暫存器、共享記憶體、執行緒限制計算出的靜態佔用率上限(編譯器可見)。
  • 實際達成佔用率:執行時取樣到的平均活躍warp數/理論最大warp數。通常通過Profiler(如ncu)測量,理想情況下接近理論佔用率。
  • 每個warp的平均停滯週期來源:細分為記憶體等待、同步屏障、算術管道忙等,用於診斷“高佔用率低利用率”的根因。
  • 有效計算密度(FLOPs/Byte):結合佔用率與頻寬使用,評判是否計算或訪存受限。
  • 暫存器壓力指數:編譯器報告每個執行緒的暫存器使用量,與其上限的比值,結合溢位量評估佔用率代價。

供需與市場資料

佔用率作為微觀技術指標,不存在獨立的市場供需資料。但可間接觀察:

  • GPU供不應求背景下,雲端廠商和AI實驗室追求單位算力利用率最大化,正催生對底層Kernel最佳化的強勁需求,如FlashAttention、Cutlass模板庫的廣泛採用,這些最佳化的核心環節之一就是佔用率-暫存器-共享記憶體的聯合調優。
  • 據第三方機構[如Liftr Insights等雲端算力簽約追蹤],高效能GPU例項的預留利用率持續走高,表明提升每張卡的有效吞吐(含佔用率等微觀效率)的經濟動機明確。
  • 各AI晶片創企在宣傳中常強調“超越NVIDIA的利用率”,實際上是在自研架構上重做了類似佔用率的並行度最佳化,體現為特定benchmark下的有效MAC利用率。未有公開關於“佔用率”指標的規模統計。

代表公司與資本對映

  • NVIDIA:通過CUDA生態將佔用率概念推廣為GPU程式設計必備知識,其NVIDIA Nsight工具、Occupancy Calculator及GTC課程不斷教育市場。資本層面,每一代架構的SM資源調整(如增加暫存器、擴大共享記憶體)均支援更靈活佔用率-效能甜點區,構成軟體和硬體的正向迴圈護城河。
  • AMD:AMD Instinct MI系列在ROCm棧中使用類似的Wavefront佔用率作為效能調優核心,AMD在超算部署(如Frontier)中的效能表現離不開對佔用率的精細最佳化。公司通過持續迭代ROCm編譯器減少程式設計師顯式管理佔用率的負擔。
  • NVIDIA的CUDA軟體棧合作伙伴(如NVIDIA NGC上的Deep Learning Examples):提供開箱即用、佔用率調優的模型實現,降低了企業的使用門檻。
  • AI算力租賃服務商(如CoreWeave, Lambda Labs):它們提供的裸機例項通常預裝最佳化過的運算元庫;佔用率更高的軟體棧意味著相同硬體下能提供更多有效算力,這直接影響服務商的毛利率。
  • 初創公司:包括Modular(意在用新編譯器及執行時自動最佳化類似佔用率等底層資源)、各種AI編譯架構公司(如OctoML),致力於通過自動搜尋佔用率-分塊策略解放人力,從投資視角看是提升基礎設施效率的重要一環。

投資邏輯

  1. “良構Kernel”溢價:能夠自動或半自動生成高佔用率、高資料複用運算元的公司(如AI編譯器、Mlir-based架構團隊)將節省大量人力調優成本,加速模型部署和迭代,成為軟體定義硬體效率的受益人。
  2. 架構彈性:新一代AI晶片若能在佔用率類似指標上提供更寬的“甜點區”(即對塊大小/暫存器用量不敏感),則能吸引更多演算法開發者,減少遷移成本。投資GPU替代方案時可考察其開發工具對佔用率的暴露程度和最佳化簡易度。
  3. 大型模型成本敏感性提升:隨著推論成本成為生成式AI商業模型關鍵,針對小batch、低延遲場景的Kernel最佳化(常需極高佔用率以隱藏延遲)成為剛需。因此,能提供相關最佳化工具或服務的公司(如DeepSpeed、vLLM等背後的團隊)將隨推論規模擴大而受益。
  4. 關注“利用率”與“佔用率”區分:二級市場分析中常籠統討論GPU利用率,不區分SM空閒與計算單元實際繁忙。真正理解佔用率可分辨出某片GPU是“沒活幹”(排程不足)還是“慢活堵著”(峰值吞吐瓶頸),進而判斷效能最佳化空間和軟硬體迭代價值。

常見誤讀糾偏(≥2)

誤讀1:佔用率越高,程式一定跑得越快。

事實:佔用率僅衡量SM中活躍warp的充足程度,而不是計算效率。當每個warp因暫存器稀缺而頻繁溢位,或每個執行緒塊因太小導致重複載入大量資料、總指令數膨脹時,高佔用率可能對應更低的單warp效率,最終端到端時間不降反升。效能最佳化中通常追求“最優佔用率”(performance sweet spot),而非最大化。

誤讀2:佔用率等於GPU利用率。

事實:GPU利用率(如nvidia-smi顯示的GPU Utilization)通常指過去取樣週期內是否有任何Kernel在執行,它遠粗於佔用率。一個kernel可能達到了90%佔用率,但其內執行部件仍可能因指令依賴而導致只有30%的FPU活躍度;反之,低佔用率的kernel若每個warp都是計算密集無停頓,也可能使SM的算術單元滿載。兩者不能混用。

誤讀3:整塊GPU的佔用率是一個恆定值。

事實:不同Kernel甚至同一Kernel的不同階段(如預取資料 vs. 純計算)佔用率可能動態變化;現代GPU部分架構支援每SM分割槽的獨立warp排程,各分割槽佔用率可以不同。評估時需用profiler觀察distribution,而非單取平均值。

學習路徑

  • 第零步:閱讀官方程式設計指南——NVIDIA CUDA C++ Programming Guide中的“Occupancy”一章(涵蓋硬體能力、佔用率計算API)。
  • 第一步:執行CUDA自帶samples裡的deviceQueryoccupancy相關樣例,直觀感受執行緒塊配置如何影響駐留blocks數。
  • 第二步:使用NVIDIA Nsight Compute對深度學習運算元(如cuBLAS矩陣乘法、自定義element-wise)進行 profiling,觀察theoretical occupancyachieved occupancy差值,並結合stall原因分析。
  • 第三步:學習Cutlass或Triton語言中的自動調優(Auto-tuning)示例,理解分塊迴圈順序、暫存器分塊與佔用率的聯合權衡。
  • 第四步:擴充套件到非NVIDIA平台(如AMD ROCm profiler、Intel VTune),比較不同架構在佔用率語義上的差異。
  • 第五步:閱讀大型開源專案(如FlashAttention、vLLM)中關於launch config和分塊選擇的程式碼註釋,理解實際生產環境如何做佔用率設計取捨。

一句話總結

佔用率是GPU隱藏延遲的容量指標,但不是效能的唯一裁判;在深度學習運算元裡,找到佔用率與暫存器、資料複用的妥協點,往往是實現極致吞吐的秘鑰。

延伸閱讀與來源

  • NVIDIA. CUDA C++ Programming Guide, Chapter “Compute Capabilities” & “Achieved Occupancy”. [公開文件]
  • NVIDIA. CUDA Occupancy Calculator (XLS/online). [公開工具]
  • AMD. ROCm Documentation: Wavefront Occupancy. [公開文件]
  • Mark Harris. “How to Access Global Memory Efficiently in CUDA C/C++”. NVIDIA Developer Blog. [部落格]
  • P. Micikevicius. “GPU Performance Analysis and Optimization”. GTC talk. [會議材料]
  • 各AI晶片初創公司的架構白皮書(如Groq、Cerebras、Graphcore)有關利用併發隱藏延遲的設計理念,可作為對比理解佔用率通用價值的參考。
  • 《Professional CUDA C Programming》(John Cheng, et al.) 第5章關於佔用率的詳細調優案例。

注:本文中所有未明確給出具體數值的量化引數均為通用原理說明,避免在未檢索到確切廠商數字情況下給出不實規格。如需最新架構的precise warp/執行緒/暫存器上限,請查閱對應硬體廠商的最新程式設計參考手冊。

source: 公開揭露與公開資料整理 本頁僅用於產業鏈學習、資訊檢索和研究輔助;不構成投資建議,不預測漲跌,不提供買賣、部位或目標價建議。
完整概念頁 複盤 13 節結構 公司投研頁 沿產業鏈找到受益公司 投資課 把概念轉成可跟蹤模型