“安全”在CUDA上包含整数的浮点数算术

时间:2012-11-01 13:03:56

标签: cuda

我目前正在研究在CUDA上使用浮点数而不是整数来进行算术运算。由于整数运算与浮点运算相比非常慢,因此必然会出现这种情况,因此在使用浮点数而不是整数时可能会提高性能。

我做了一个小实验并编写了一个简单的程序,它只是循环并向变量添加1.0f ..它出来了,这可以达到16777216.0f ..再加上1.0f的数字将留下数字没有改变...所以我想知道天气这个数字是最大数字,就运营商+, - ,*仅涉及整数将导致准确的整数结果,比如+/- 0.0001准确度?

此致 丹尼尔

1 个答案:

答案 0 :(得分:2)

Jonathan Dursi在他的评论中指出了一些解释浮点的重要链接。

如果你看,你会注意到16777216是2 ^ 24。浮点(单精度)有23位加上隐式'1'(因为值是标准化的)。使用24位,您将能够表示从1.0 * 2 ^ 0到1.11..11b * 2 ^ 23的任何整数(实际上您也会得到负数,因为符号位是分开的,而使用特殊编码则为零)。你得到额外的值(2 ^ 24)因为它可以表示为1.0 * 2 ^ 24。

只要您尝试添加1到2 ^ 24,您就会发现您受到Jonathan发布的链接中描述的舍入错误的影响。

因此对于整数,您需要将范围限制为[-2 ^ 24,2 ^ 24]。如果你不能这样做,你要么需要仔细检查,要么限制自己整数!