根据Agner的指令表,一个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,我想知道为什么两个单独的操作比一个操作更快,从而得到基本相同的结果。
我怀疑这个问题的答案涉及误差的测量。也许除法比倒数加乘精确得多。如果是这样的话,如何比较误差测量?例如,是否存在线性关系,因为除法的速度几乎是倒数+乘的两倍,它是否也是倒数+乘的两倍?
发布于 2016-07-13 20:07:04
IIRC,快速近似倒数除法和sqrt指令基本上是一个表查找(从内部表),没有迭代精化,使精确的除法/平方根缓慢和难以流水线。这就是为什么/如何用一个时钟吞吐量来实现它们。
注意,直到最近的微体系结构之前,divss
吞吐量并不比延迟好得多,甚至Skylake非常令人印象深刻的FP divide / sqrt单元也没有完全流水线化。
至于您问题的其余部分,答案与rsqrt
相同,因此请参阅这个问题x?。
(谢谢罗斯挖掘链接)
https://stackoverflow.com/questions/38342154
复制相似问题