NVIDIA 的 CCCL 3.1 为并行归约引入了三种确定性级别,让开发者在 GPU 计算中权衡性能与可重现性。(阅读NVIDIA 的 CCCL 3.1 为并行归约引入了三种确定性级别,让开发者在 GPU 计算中权衡性能与可重现性。(阅读

NVIDIA CCCL 3.1 为 GPU 计算添加浮点确定性控制

2026/03/06 01:46
阅读时长 6 分钟
如需对本内容提供反馈或相关疑问,请通过邮箱 [email protected] 联系我们。

NVIDIA CCCL 3.1 为GPU运算添加浮点确定性控制

Caroline Bishop 2026年3月5日 17:46

NVIDIA的CCCL 3.1为并行归约引入三个确定性级别,让开发者在GPU计算中权衡性能与可重现性。

NVIDIA CCCL 3.1 为GPU运算添加浮点确定性控制

NVIDIA在CUDA核心计算库(CCCL) 3.1中推出了确定性控制,解决了并行GPU运算中一个长期存在的难题:在多次运行和不同硬件上从浮点运算中获得相同结果。

此更新通过CUB的新单阶段API引入三个可配置的确定性级别,让开发者明确控制多年来困扰GPU应用程序的可重现性与性能之间的权衡。

为什么浮点确定性很重要

问题在于:浮点加法并非严格符合结合律。由于有限精度的舍入,(a + b) + c并不总是等于a + (b + c)。当并行线程以不可预测的顺序组合值时,每次运行都会得到略有不同的结果。对于许多应用程序——金融建模、科学模拟、区块链计算、机器学习训练——这种不一致性会造成实际问题。

新的API让开发者通过三种模式精确指定他们需要的可重现性程度:

非保证确定性优先考虑原始速度。它使用原子操作,按线程运行的任意顺序执行,在单个内核启动中完成归约。结果在不同运行之间可能略有差异,但对于近似答案足够的应用程序,性能提升是显著的——尤其是在内核启动开销占主导地位的较小输入数组上。

运行到运行确定性(默认设置)在使用相同输入、内核配置和GPU时保证相同的输出。NVIDIA通过将归约构建为固定的层次树而非依赖原子操作来实现这一点。元素首先在线程内组合,然后通过洗牌指令跨越warp,接着使用共享内存跨越块,最后由第二个内核聚合最终结果。

GPU到GPU确定性提供最严格的可重现性,确保在不同的NVIDIA GPU上获得相同结果。该实现使用可重现浮点累加器(RFA),将输入值分组到固定的指数范围内——默认为三个区间——以应对在添加不同量级数字时出现的非结合律问题。

性能权衡

NVIDIA在H200 GPU上的基准测试量化了可重现性的成本。对于大问题规模,GPU到GPU确定性相比宽松模式将执行时间增加20%至30%。运行到运行确定性介于两个极端之间。

三区间RFA配置提供了NVIDIA所称的"最优默认设置",平衡了准确性和速度。更多区间可提高数值精度,但会增加中间求和,从而减慢执行速度。

实现细节

开发者通过cuda::execution::require()访问新控制,它构建一个传递给归约函数的执行环境对象。语法很简单——根据需求将确定性设置为not_guaranteedrun_to_rungpu_to_gpu

该功能仅适用于CUB的单阶段API;较旧的两阶段API不接受执行环境。

更广泛的影响

跨平台浮点可重现性一直是高性能计算和区块链应用中的已知挑战,不同的编译器、优化标志和硬件架构可能从数学上相同的操作中产生不同的结果。NVIDIA明确将确定性作为可配置参数而非隐藏实现细节的方法代表了一个务实的解决方案。

该公司计划将确定性控制扩展到归约之外的其他并行原语。开发者可以通过NVIDIA的GitHub存储库跟踪进展并请求特定算法,那里有一个公开问题在跟踪扩展的确定性路线图。

图片来源:Shutterstock
  • nvidia
  • gpu运算
  • cccl
  • 浮点确定性
  • cuda
市场机遇
Ucan fix life in1day 图标
Ucan fix life in1day实时价格 (1)
$0.0004551
$0.0004551$0.0004551
+5.64%
USD
Ucan fix life in1day (1) 实时价格图表
免责声明: 本网站转载的文章均来源于公开平台,仅供参考。这些文章不代表 MEXC 的观点或意见。所有版权归原作者所有。如果您认为任何转载文章侵犯了第三方权利,请联系 [email protected] 以便将其删除。MEXC 不对转载文章的及时性、准确性或完整性作出任何陈述或保证,并且不对基于此类内容所采取的任何行动或决定承担责任。转载材料仅供参考,不构成任何商业、金融、法律和/或税务决策的建议、认可或依据。