这是一个非常简单的问题,但无法在任何地方找到一个好的答案。GPU 上浮点类型的大小限制是多少。例如,我需要对许多大数进行立方运算,例如 3,000,000,000 ^ 3。当我从 GPU 获取结果集时,我得到了一些无意义的东西,一个很大的负数。我的猜测是这就是处理溢出的方式。非常感谢任何解释和评论。
问问题
3898 次
1 回答
1
float
float
使用主机编译器, GPU 上的数值容量和精度与主机上相同。它有23 个尾数位、8 个指数位和 1 个符号位。二进制指数范围从 -126 到 +127,对应于大约 +/- 37 (127/log2(10)) 的十进制指数范围
由于您的示例3,000,000,000 ^ 3
应该产生一个正十进制指数约为 28 的数字,因此它不应该“溢出”基本float
存储容量。
int
int
在 GPU 上同样是主机/主机编译器上表示的相同的 32 位有符号数量。由于它是带符号的数字,它可以存储最多大约 +/- 2,147,483,640 的数字
如果您使用int
. 该数字不适合int
表示,即使在您将其立方化之前也是如此。
如果您正在使用float
,您可能需要检查您的代码是否存在导致此类意外结果的其他数据处理问题,或者发布一个小样本复制器,与 SSCCE.org 的期望一致。当然,如果你解释float
为int
或反之,你会得到奇怪的结果。
于 2013-08-27T17:02:52.407 回答