根据Agner的指令表,单个fp除法比单个倒数操作和单个乘法操作慢。(这似乎在测量的x86架构中很常见)
这是堆垛机架构表格的摘录。
第四个值是延迟。因此,乘法运算需要5-6个周期,除法运算需要9-24个周期,而倒数操作需要5个周期。由于24 > 6 + 5,我想知道为什么两个单独的操作比一个单一的操作更快地获得基本相同的结果。
我怀疑这个问题的答案涉及误差的测量。也许除法比倒数加乘法更精确。如果是这样,误差测量如何比较?例如,是否存在线性关系,因为除法几乎比倒数+乘法慢两倍,它也是两倍准确?
这是堆垛机架构表格的摘录。
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,我想知道为什么两个单独的操作比一个单一的操作更快地获得基本相同的结果。
我怀疑这个问题的答案涉及误差的测量。也许除法比倒数加乘法更精确。如果是这样,误差测量如何比较?例如,是否存在线性关系,因为除法几乎比倒数+乘法慢两倍,它也是两倍准确?
rpcss
的精确度为11.5位二进制数。而divss
是IEEE除法,因此它的精确度高达24位二进制数。 - Raymond Chen