You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CuBLAS的GEMM运算未遵循NaN输入的IEEE754规范问题

CuBLAS cublasSgemm alpha=0 时的行为解析

首先明确 cublasSgemm 的运算公式:

C = alpha * A * B + beta * C

你遇到的情况本质是CuBLAS的性能优化逻辑导致的:

  • 当设置 alpha=0 时,CuBLAS会直接跳过 A*B 的矩阵乘法计算——不管A、B中是否包含NaN,因为从数值计算的常规场景来看,0 * 任何矩阵 这一项对最终结果的贡献可以通过直接计算 beta*C 来替代,没必要执行冗余的乘法操作。
  • 你得到C全为0的结果,说明调用 cublasSgemm 时传入的 beta=0,此时最终结果就是 0 * C,和A、B中的NaN完全无关。

关于IEEE754规范的疑问:
严格来说,0 * NaN 确实应该得到NaN,但CuBLAS的这种优化是BLAS类库中普遍存在的实现选择——优先保证性能,而非绝对严格遵循IEEE754的所有边缘情况规则。NVIDIA的文档可能未明确提及这一细节,因为它属于底层性能优化范畴,而非核心API语义。

如果你需要严格符合IEEE754的行为,就得手动处理这种场景:当 alpha=0 且A/B中存在NaN时,手动将C的对应元素设置为NaN,但这会牺牲部分性能。

内容的提问来源于stack exchange,提问作者Sadiinso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:32:27