Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CUDA GPU整数/浮点大小约束_Cuda_Gpu_Gpgpu - Fatal编程技术网

CUDA GPU整数/浮点大小约束

CUDA GPU整数/浮点大小约束,cuda,gpu,gpgpu,Cuda,Gpu,Gpgpu,这是一个非常简单的问题,但在任何地方都找不到一个好的答案。GPU上浮点类型的大小约束是什么。例如,我需要对许多大数字进行立方运算,比如30000000000^3。当我从GPU得到结果时,我得到了一些荒谬的东西,一个大的负数。我猜这就是溢出的处理方式。非常感谢您的解释和评论。float使用主机编译器,GPU上的数字容量和精度与主机上的float相同。23个尾数位、8个指数位和一个符号位。二进制指数范围从-126到+127,对应于大约+/-37(127/log2(10))的十进制指数范围 由于您的3

这是一个非常简单的问题,但在任何地方都找不到一个好的答案。GPU上浮点类型的大小约束是什么。例如,我需要对许多大数字进行立方运算,比如30000000000^3。当我从GPU得到结果时,我得到了一些荒谬的东西,一个大的负数。我猜这就是溢出的处理方式。非常感谢您的解释和评论。

float
使用主机编译器,GPU上的数字容量和精度与主机上的
float
相同。23个尾数位、8个指数位和一个符号位。二进制指数范围从-126到+127,对应于大约+/-37(127/log2(10))的十进制指数范围

由于您的
30000000000^3
示例应生成一个十进制正指数约为28的数字,因此它不应“溢出”基本
浮点
存储容量

GPU上的
int
同样是主机/主机编译器上由
int
表示的32位有符号量。因为它是一个有符号的数字,所以它最多可以存储大约+/-2147483640的数字

如果您使用
int
处理示例,那么从一开始就有麻烦。即使在对其进行立方运算之前,该数字也不适合
int
表示


如果您使用的是
float
,您可能希望检查代码是否存在导致此类意外结果的其他数据处理问题,或者发布一个小样本复制器,与SSCCE.org上的预期一致。当然,如果你将
float
解释为
int
,或者反之亦然,你会得到奇怪的结果。

自己计算,因为这就是我一直在寻找的答案。问题是我使用的是CUDAfy.NET,所以我需要挖掘一下,看看项目中是否有bug。问题很简单,就是将变量传递给函数时产生的。在.NET中,如果未指定
float a=30000000000fvs.
浮动a=3000000000
.NET将自由地将分配的号码“强制转换”为双精度。很高兴知道。实际上C也是
30.0
在C中是一个
double
常量。
30.0f
在C中是一个
float
常量。我不清楚为什么这会产生不同。
float
double
可以表示此数字以及立方结果。当你做
float a=3000000000时可能会发生
由于省略了小数点,因此最终得到的常量是niether
float
double
。如果你做
float a=30000000000.0我认为它也会正常工作。