【问题标题】:sqrt and div instructions run at same speedsqrt 和 div 指令以相同的速度运行
【发布时间】:2013-02-01 03:52:56
【问题描述】:

我随便阅读了英特尔架构参考手册http://www.cs.princeton.edu/courses/archive/spr12/cos217/reading/ia32opt.pdf,当我阅读指令延迟和吞吐量附录时,我发现延迟(执行核心所需的时钟周期数) 完成构成指令的所有微操作的执行。)对于 sqrt 指令,与除法(第 C-28 页)指令的延迟完全相同——至少对于某些微架构而言。对于单精度、双精度和扩展精度,数字分别为 30、40 和 44 个时钟周期。

我的问题是 sqrt 指令如何与 div 指令一样大的处理器接收器?我一直认为 sqrt 指令在任何语言中都是昂贵的。

【问题讨论】:

  • 他们可能在某处使用查找表
  • 也许吧,虽然我不相信硬编码到处理器中的 64 位地址会形成一个易于管理的查找表

标签: algorithm optimization assembly language-agnostic


【解决方案1】:

理论上,除法与许多函数的阶数相同,包括平方根,可以通过http://en.wikipedia.org/wiki/Newton%27s_method 计算。牛顿法的迭代次数很少,因为每次正确数字的数量都会翻倍。早期迭代很便宜,因为您不必以全精度进行它们-您只需要迭代的期望精度-渐近结果是每个迭代都与单个全精度除法一样昂贵-请参阅@987654322 @

在一个芯片上,他们可能对两者都使用了一些经过高度调整的特殊用途方法,但如果对成本的最大贡献是最后通过芯片的乘法流水线获得完整的一些通道,那么它们可能是相同的成本- 快速查表或其他近似解后的精度结果。

【讨论】:

    【解决方案2】:

    这并不为人所知,但计算平方根的算法与移位运算的除法一样快。这些不是牛顿近似值。

    (Sqrt in) Binary numeral system (base 2)。我第一次在 Knuth 的半数字算法一书中看到这一点,并在 1970 年代初期用它在 16 位小型计算机上以与除法相同的速度对 sqrts 进行编码。循环的核心移出两位,计算平方根位,然后重复。因此,总移位 == 位数,这与经典除法相同。

    如果他们确实通过芯片上的移位比较方法进行除法,他们可以很容易地实现平方根。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2014-08-28
      相关资源
      最近更新 更多