CUDA __fsqrt 轮内在函数中四​​舍五入的术语是什么?

What term is rounded in the CUDA __fsqrt round intrinsics?

我需要在 CUDA 设备代码中计算浮点数的平方根。很难说在我的用例中速度是否比准确性更重要。

__sqrtf CUDA intrinsic is the natural choice

但后来我看到了 various __fsqrt with rounding CUDA intrinsics;

这些内在函数中的四舍五入;参数“x”或 return 值?还是我理解错了这里四舍五入的意思?

我的测试表明两者都不是四舍五入的!我写了一个评估的内核:

__fsqrt_rn(42 * 42 + 0.1)

并且 return 值始终为 42.0011902,等于 42 * 42 + 0.1 的平方根。那么四舍五入是什么?

这是结果的舍入模式。输入参数在被注入算术流之前没有被“舍入”。

“rn”舍入“方向”是“舍入到最近”

这意味着无论中间结果的计算精度如何,该结果都将舍入到最接近的可用表示形式。在 float 最终结果的情况下,它将四舍五入到最接近的可用 float 表示。

让我们重新审视一下您的示例。当我将你的问题放入 windows 10 计算器时,我得到的结果是 42.001190459319126303634970957554 我们从“任意精度的正确结果”到 32 位浮点“rn”结果的方法是取两个32 位浮点数,一个最接近但数值较高,一个最接近但数值较低,在这 2 个中,select 是最接近的一个。那显然是 42.0011902.