NVIDIA CCCL 3.1 為 GPU 運算新增浮點確定性控制
Caroline Bishop 2026年3月5日 17:46
NVIDIA 的 CCCL 3.1 為平行歸約引入三種確定性等級,讓開發者在 GPU 運算中權衡效能與可重現性。
NVIDIA 已在 CUDA Core Compute Libraries (CCCL) 3.1 中推出確定性控制,解決平行 GPU 運算中一個長期存在的難題:在多次執行和不同硬體上取得浮點運算的相同結果。
此次更新透過 CUB 的新單階段 API 引入三種可配置的確定性等級,讓開發者明確控制困擾 GPU 應用多年的可重現性與效能之間的權衡。
為何浮點確定性很重要
問題在於:浮點加法並非嚴格可結合。由於有限精度的四捨五入,(a + b) + c 並不總是等於 a + (b + c)。當平行執行緒以不可預測的順序組合數值時,每次執行都會得到略有不同的結果。對於許多應用——金融建模、科學模擬、區塊鏈運算、機器學習訓練——這種不一致性會造成實際問題。
新的 API 讓開發者透過三種模式精確指定所需的可重現性程度:
不保證確定性優先考慮原始速度。它使用原子操作,按照執行緒執行的任何順序執行,在單次核心啟動中完成歸約。結果在不同執行之間可能略有變化,但對於近似答案足夠的應用,效能提升是顯著的——特別是在核心啟動開銷占主導地位的較小輸入陣列上。
執行間確定性(預設值)保證在使用相同輸入、核心配置和 GPU 時產生相同的輸出。NVIDIA 透過將歸約結構化為固定的分層樹而非依賴原子操作來實現這一點。元素首先在執行緒內組合,然後透過洗牌指令跨 Warp 組合,再使用共享記憶體跨區塊組合,第二個核心彙總最終結果。
GPU 間確定性提供最嚴格的可重現性,確保在不同的 NVIDIA GPU 上產生相同的結果。該實現使用可重現浮點累加器 (RFA),將輸入值分組到固定的指數範圍——預設為三個區間——以對抗在添加不同數量級的數字時出現的非結合性問題。
效能權衡
NVIDIA 在 H200 GPU 上的基準測試量化了可重現性的成本。與寬鬆模式相比,GPU 間確定性在大型問題規模下將執行時間增加了 20% 到 30%。執行間確定性介於兩個極端之間。
三區間 RFA 配置提供了 NVIDIA 所謂的「最佳預設值」,平衡準確性和速度。更多區間可提高數值精度,但會增加中間求和,從而減慢執行速度。
實作細節
開發者透過 cuda::execution::require() 存取新控制項,它會建構一個傳遞給歸約函式的執行環境物件。語法很直接——根據需求將確定性設定為 not_guaranteed、run_to_run 或 gpu_to_gpu。
該功能僅適用於 CUB 的單階段 API;較舊的兩階段 API 不接受執行環境。
更廣泛的影響
跨平台浮點可重現性一直是高效能運算和區塊鏈應用中的已知挑戰,不同的編譯器、最佳化旗標和硬體架構可能從數學上相同的操作產生不同的結果。NVIDIA 明確將確定性作為可配置參數而非隱藏實作細節的方法代表了一種務實的解決方案。
該公司計劃將確定性控制從歸約擴展到其他平行基元。開發者可以透過 NVIDIA 的 GitHub 儲存庫追蹤進度並請求特定演算法,其中一個開放議題追蹤擴展的確定性路線圖。
圖片來源: Shutterstock- nvidia
- gpu computing
- cccl
- floating-point determinism
- cuda


