8

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

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

谢谢

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

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

4

2 回答 2

6

说得非常广泛,并概括介绍了最近的常见硬件:

  • 加法、减法和乘法速度很快(每个内核每个周期至少可以进行一次运算)。
  • 除法和平方根通常慢一个数量级(每个操作数十个周期)。有许多近似算法可用于在特定用途中缩小这一差距。
  • 调用数学库函数(sincosexplog等)会因您使用的数学库实现和硬件而有很大差异。在(例如)当前的 i7 上,通常在每 ~20 个周期执行一次操作和每 ~200 个周期执行一次操作之间,具体取决于实现的质量和被调用的特定函数。
于 2012-12-12T19:41:14.977 回答
2

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

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

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

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

DIVSD - 38-39 周期延迟,38-39 周期吞吐量

于 2012-12-12T19:33:19.613 回答