根据Agner的instruction tables,单个fp除法比单个倒数op和单个乘法op慢。 (这似乎在测量的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
第4个值是延迟。因此乘法运算取5-6,除法运算取9-24,倒数运算取5个周期。从24> 6 + 5,我想知道为什么2个单独的操作比单个操作更快,以获得基本相同的结果。
我怀疑这个问题的答案涉及错误的测量。也许情况是除法比倒数加上乘法要精确得多。如果是这种情况,误差测量如何比较?例如,是否存在线性关系,因为除法几乎是倒数+乘法的两倍,是否也是准确度的两倍?
答案 0 :(得分:4)
请注意,在最近的微架构之前,divss
吞吐量并不比延迟好得多,甚至Skylake非常令人印象深刻的FP divide / sqrt单元也没有完全流水线化。
至于问题的其余部分,答案与rsqrt
的答案相同,请参阅此问题Why is SSE scalar sqrt(x) slower than rsqrt(x) * x?
(感谢Ross挖掘链接)