fermi cuda对C的双精度

时间:2010-12-30 19:18:55

标签: cuda rounding

使用fermi GPU,CPU和GPU双精度结果之间存在一个小错误。

e.g。对于一个小测试集,我得到以下绝对错误:(数字1(CPU) - 数字2(GPU))= 3E-018。

以二进制形式,它按预期非常小......

  

二进制数字1:

xxxxxxxxxxxxx111000000010 01

vs

  

二进制数字2:

xxxxxxxxxxxx1111000000010 10

虽然这是一个二进制数字的差异,但我很想消除任何差异,因为在我的代码中加错了。

那些熟悉费米的人提示?如果这是不可避免的,我可以让C / C ++模仿fermi四舍五入的行为吗?

1 个答案:

答案 0 :(得分:1)

你应该看看this post

浮点不是关联的,因此如果编译器选择以不同的顺序执行操作,那么您将得到不同的结果。同一编译器的两个版本可以产生差异!不同的编译器更有可能产生差异,如果你在GPU上并行工作(你是,对吧?)那么你本来就是以不同的顺序进行操作......

Fermi硬件符合IEEE754-2008标准,这意味着除了IEEE754标准舍入外,它还具有融合乘法 - 加法(FMA)指令,可避免乘法和加法之间的精度损失。