NVIDIA GPU上的IEEE-754标准(sm_13)

Abh*_*nav 3 floating-point cuda gpgpu ieee-754

如果我在主机和设备(GPU arch sm_13)上执行浮点(单精度)操作,那么值是否会不同?

Jon*_*rsi 8

在NVIDIA 的白皮书中可以对此进行详细讨论.基本上:

  • IEEE-754几乎所有目前都在实施;
  • 即使在忠实实施此标准之间,您仍然可以看到结果的差异(着名的是,英特尔在内部执行80位双精度),或者使用编译器进行高优化设置可能会改变结果
  • 计算能力2.0及更高版本的NVIDIA显卡支持单精度和双精度的IEEE-754,只有非常小的警告
    • 某些操作不支持某些舍入模式 - 仅当您明确更改代码中的舍入模式时,这才有意义
    • 融合乘法和补充有一些细微之处
    • CUDA还提供(稍微)较低的精度但更快的几个操作的实现,当然如果你明确或隐含地使用它们(使用编译器选项),你自然不会得到完整的ieee-754结果
  • 计算能力1.3卡支持ieee-754,如上所述,双精度但不是单精度; (单精度不支持非正规 - 例如非常小 - 数字,没有FMA,平方根和除法不完全准确)
  • 计算能力1.2卡只有单精度,并且那些不是如上所述的ieee-754.

  • @Abhinav:这是一个标准,因为它定义了存储规则,格式,舍入规则,操作,交换格式和异常.它(取决于哪个版本)也定义了可重复性标准.但是一切都有宽容.这意味着浮点将在任何符合标准的平台上以相同的方式工作*.这并不意味着结果将按位相同. (2认同)