x86 中不同数学函数的性能
Performance of different math functions in x86?
>我正在写一个 3D 碰撞,想知道基本数学函数的性能差异,例如 + - */sqrt pwr 三角函数,如 sin cos tan arcsin..
我听说这取决于许多其他事情,所以我只想大致了解哪一个速度较慢,在寻找解决问题的不同方法时需要避免。我也想知道差异的顺序和大小
谢谢
编辑:我用 x86 的 VC++ 编写。但是其他架构和总体情况方面的知识也很好。主要是实时应用的单浮点计算。
问题是某些算法需要 sqrt 或三角函数,但我可以通过其他方法绕过它们。每个人都有自己的进步,我想知道足以进行权衡。我想要一个一般的知识来解决我自己的问题,做了一个谷歌但什么也没找到,所以请让它回答
说得非常宽泛,并概括一下最近的常见硬件:
- 加法、减法和乘法速度很快(每个内核每个周期至少能够进行一次操作)。
- 除法和平方根通常慢一个数量级(每个操作数十个周期)。 有许多近似算法可用于缩小特定用途的差距。
- 调用数学库函数(
sin
、cos
、exp
、log
等)因您使用的数学库实现和硬件而异。 在(比如)当前的 i7 上,通常介于每 ~20 个周期的操作和每 ~200 个周期的操作之间,具体取决于实现的质量和调用的特定函数。
粗略的想法:+, -
<*
></
><sqrt
><sin, cos, etc
>
附言。在最近的英特尔架构上:
ADDSD/SUBSD - 3 个周期延迟,1 个周期吞吐量
MULSD - 6-7 个周期延迟,2 个周期吞吐量
DIVSD - 38-39 周期延迟,38-39 周期吞吐量
相关文章:
- 如何比较两个函数的速度和性能
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 函数局部静态变量:从性能角度来看的优点/缺点
- C++ 将函数指针与最佳性能相结合
- 为什么使用默认构造函数"{}"而不是"= default"存在性能变化?
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- 隐式转换函数的返回对象时是否会影响性能?
- 虚拟函数调用的性能作为 for 循环中的上限
- 如何提高对 std::函数侦听器的分发性能?
- 性能函数调用与乘以 1
- C++构造函数性能
- 课堂初始化(分配样式)与构造函数性能
- 类方法VS类静态函数VS简单函数-性能方面
- 对同一对象进行x调用的c++虚拟函数性能
- 由派生类调用时的虚函数性能
- c++ 11委托的函数是否比c++ 03调用init函数的函数性能差?
- 捕获Lambda函数性能的影响
- Visual c++中的函数性能计数器
- 从另一个操作符重载函数调用操作符重载函数:性能
- 内联函数性能