【发布时间】:2016-11-15 11:29:53
【问题描述】:
根据 Agner 的instruction tables,单个 fp 除法比单个倒数运算和单个乘法运算慢。 (这似乎在测量的 x86 架构中很常见)
这是打桩机架构表的摘录。
MULSS MULSD x,x/m 1 5-6 0.5 P01 fma
MULPS MULPD x,x/m 1 5-6 0.5 P01 fma
VMULPS VMULPD y,y,y/m 2 5-6 1 P01 fma
DIVSS DIVPS x,x/m 1 9-24 5-10 P01 fp
VDIVPS y,y,y/m 2 9-24 9-20 P01 fp
DIVSD DIVPD x,x/m 1 9-27 5-10 P01 fp
VDIVPD y,y,y/m 2 9-27 9-18 P01 fp
RCPSS/PS x,x/m 1 5 1 P01 fp
第四个值是延迟。所以乘法运算需要 5-6,除法运算需要 9-24,倒数运算需要 5 个周期。由于 24 > 6 + 5,我想知道为什么 2 个单独的操作比 1 个单独的操作快以获得基本相同的结果。
我怀疑这个问题的答案涉及误差的测量。也许是除法比倒数加乘法更准确。如果是这种情况,误差测量如何比较?例如,是否存在线性关系,因为除法的速度几乎是倒数 + 乘法的两倍,那么它的准确度也是两倍吗?
【问题讨论】:
-
记录了错误。
rpcssis good to 11.5 binary places。另一方面,divss是 IEEE 划分,所以对 24 个二进制位很好。 -
正如英特尔文档所说:“RCPSS(计算标量单精度浮点值的倒数)指令计算 近似 的倒数源操作数中的低位单精度浮点值,并将结果存储在目标操作数的低位双字中。” (强调我的)
-
查看有关平方根及其倒数运算的相关问题:stackoverflow.com/questions/1528727/…
标签: performance assembly floating-point x86