Cuda GPU上浮点数的划分与CPU上的不同
当我在GPU上除以两个浮点数时,结果是Cuda GPU上浮点数的划分与CPU上的不同,cuda,gpu,Cuda,Gpu,当我在GPU上除以两个浮点数时,结果是0.196405。当我在CPU上划分它们时,结果是0.196404。使用计算器的实际值为0.196404675。如何使GPU和CPU上的除法相同?您没有。千万不要假设浮点值在经过数学运算后与预期值完全相等。它们仅被定义为正确到指定的精度,并且在不同的处理器之间会略有不同,无论该处理器是CPU还是GPU。例如,x86处理器在默认情况下会以80位的精度进行浮点计算,然后将结果截断为要求的精度。浮点数的等价性比较应始终使用公差,因为不能保证任何两个处理器(或通过不
0.196405
。当我在CPU上划分它们时,结果是0.196404
。使用计算器的实际值为0.196404675
。如何使GPU和CPU上的除法相同?您没有。千万不要假设浮点值在经过数学运算后与预期值完全相等。它们仅被定义为正确到指定的精度,并且在不同的处理器之间会略有不同,无论该处理器是CPU还是GPU。例如,x86处理器在默认情况下会以80位的精度进行浮点计算,然后将结果截断为要求的精度。浮点数的等价性比较应始终使用公差,因为不能保证任何两个处理器(或通过不同但数学上等价的指令序列的同一处理器)将产生相同的结果。例如,当且仅当| a-b |- 浮点操作是不关联的,因此看似良性的重新排序(如上面提到的多线程的竞争条件)可能会改变结果李>
- 不同的体系结构在不同的条件下支持不同级别的精度和舍入(即编译器标志、控制字与每条指令)李>
- 不同的编译器对语言标准的解释不同
- 有些体系结构支持FMAD(融合乘法加法),有些不支持
哪个GPU用于计算 如果使用单精度浮点运算,尾数部分的第六位通常会有+1/-1的精度误差。这是因为GPU中存在舍入误差
如果您使用的是双精度,您将获得与CPU相同的精确精度。但速度几乎是浮点精度的一半,内存使用率将是2倍。现在,从基于费米的体系结构开始,NVIDIA GPU支持双精度点计算。你需要它们相同吗?我的直觉告诉我,如果你需要它们相等,你应该在解释结果时调整有效数字,而不是在计算结果时。什么精度,什么GPU,什么源代码,最重要的是为什么?请显示代码和编译选项,并确定GPU。CUD中的双精度除法A始终使用IEEE-754舍入,但是CPU内部可能会使用扩展精度,导致在返回双精度结果时出现称为双舍入的问题。CUDA中的单精度除法默认情况下对sm_20及以上使用IEEE-754舍入。各种编译器选项可能导致使用近似单精度除法,sm_1x平台始终对单精度除法运算符使用近似除法(您可以使用内部函数获得IEEE-754四舍五入除法)@Talonmes:我在做浮点除法。GPU是GeForce GT 540M。至于原因,我知道我的CPU实现是正确的。只是想通过比较输出来检查我的GPU实现是否正确。@Programmer:单精度或双精度是我要问的问题。没有人对你的答案有异议,但事实上,这已经有一段时间了e 80位是x86 CPU的标准。大多数现代面向性能的x86 FP代码。
它们仅定义为正确到指定的精度,并且处理器之间会略有不同,无论处理器是CPU还是GPU。
我认为这不正确。据我所知,IEEE 754定义了确切的bit序列r