【问题标题】:Which algorithms are used for common floating point operations in CPUs?哪些算法用于 CPU 中的常见浮点运算?
【发布时间】:2012-11-12 19:43:46
【问题描述】:

我正在写一篇关于 CPU 设计和实现不同数学运算(例如加法、乘法、除法、平方根和对数)的论文。这篇论文也是关于数值分析的。然而,我似乎走到了尽头。因此,我有一些问题

  1. 是否有任何阅读材料(其他论文、书籍)可以将某些操作分解为更简单的步骤?
  2. 我的印象是牛顿法用于平方根(有时是除法),泰勒级数用于对数。这是假的吗?用什么?
  3. 软件实现的浮点支持是否有所不同?

我意识到这可能取决于 CPU 架构,因此我们将不胜感激提供常见 CPU 的答案,例如较新的 Intel i7 处理器(通常是 x86 架构)。 非常感谢!

【问题讨论】:

  • 对数不再在硬件中实现。他们在 x87 FPU 中有它,但不是在所有现代的东西中。
  • 有意思,那我去搜一下。不知道有没有依赖泰勒级数的运算?
  • 我假设实现三角函数的硬件将使用CORDIC 或某种泰勒级数+参数缩减。以防万一,就硅房地产而言,它们都很昂贵。因此它们没有包含在 SSE 等现代扩展中。
  • @Mysticial:如果您希望它们快,它们只会在硅房地产中很昂贵;如果速度不是问题,您可以使用很少的晶体管实现 CORDIC =)
  • 即使是 x87 FPU 通常也通过称为微码的低级软件实现超越功能(我为 AMD 的 Athlon 处理器设计/实现了这个微码,也适用于其他 x86 处理器)。核心近似通常是多项式的,有时是有理数的。通常是极小极大近似,而不是泰勒级数。根据准确性和性能的要求,评估是通过霍纳方案或埃斯特林方案进行的。 J.-M 的“浮点算术手册”。穆勒等。 al.,Stephen Canon 下面已经提到过,是一个很好的起点,可以解释所有相关概念。

标签: floating-point cpu cpu-architecture


【解决方案1】:

此外,您想了解进位超前加法器(特别是Kogge-Stone adder)。

高性能乘法器的设计是一个相当复杂的主题,如果您不是研究生,可能超出您想要考虑的学校项目的范围。

牛顿法通常不用于硬件平方根或除法器;有时会使用 Goldschmidt 的方法(请参阅 Peter Markstein 的关于该主题的论文以获取来源;它非常易读),因为它更适合硬件,但也经常使用教科书方法的变体(通常使用大于 2 的基数;看成有符号数除法算法)。

软件实现往往完全不同。

【讨论】:

  • 我上一次从事软件实现是在 1980 年代,我们主要使用参数缩减和基于级数的多项式逼近。
  • 你在说这本书吗:amazon.com/… 那本书看起来很完美,我看看能不能找到有它的图书馆。非常感谢!
  • 哦,我猜你的意思是这篇论文:m1c4a1.wz.cz/docs/goldschmidt.pdf 看起来也不错,我去看看!
  • @Janiels:是的,Markstein 的书也不错,但我说的是论文。您可能还想找到一份让-米歇尔·穆勒 (Jean-Michel Muller) 的“浮点算术手册”。
  • 我已经订购了其中的一些书。同时我想要一些关于整数运算的材料,比如 x86 上的 'add' 'mul' 'div' 。我很难知道要搜索什么。你能帮我吗?
猜你喜欢
  • 2014-12-05
  • 1970-01-01
  • 2015-02-25
  • 2011-02-22
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
相关资源
最近更新 更多