x86 中不同数学函数的性能

Performance of different math functions in x86?

本文关键字:函数 性能 x86      更新时间:2023-10-16

>我正在写一个 3D 碰撞,想知道基本数学函数的性能差异,例如 + - */sqrt pwr 三角函数,如 sin cos tan arcsin..

我听说这取决于许多其他事情,所以我只想大致了解哪一个速度较慢,在寻找解决问题的不同方法时需要避免。我也想知道差异的顺序和大小

谢谢

编辑:我用 x86 的 VC++ 编写。但是其他架构和总体情况方面的知识也很好。主要是实时应用的单浮点计算。

问题是某些算法需要 sqrt 或三角函数,但我可以通过其他方法绕过它们。每个人都有自己的进步,我想知道足以进行权衡。我想要一个一般的知识来解决我自己的问题,做了一个谷歌但什么也没找到,所以请让它回答

说得非常宽泛,并概括一下最近的常见硬件:

  • 加法、减法和乘法速度很快(每个内核每个周期至少能够进行一次操作)。
  • 除法和平方根通常慢一个数量级(每个操作数十个周期)。 有许多近似算法可用于缩小特定用途的差距。
  • 调用数学库函数(sincosexplog等)因您使用的数学库实现和硬件而异。 在(比如)当前的 i7 上,通常介于每 ~20 个周期的操作和每 ~200 个周期的操作之间,具体取决于实现的质量和调用的特定函数。

粗略的想法:+, - <*></><sqrt><sin, cos, etc>

附言。在最近的英特尔架构上:

ADDSD/SUBSD - 3 个周期延迟,1 个周期吞吐量

MULSD - 6-7 个周期延迟,2 个周期吞吐量

DIVSD - 38-39 周期

延迟,38-39 周期吞吐量