STL中的acos和atan函数是否会占用大量CPU周期?

3

我想计算两个向量之间的角度,但我发现这些反三角函数如acos和atan使用了大量的CPU周期。有没有一种方法可以在不使用这些函数的情况下完成这个计算?此外,在优化时是否真的会受到这些函数的影响?


你确定你需要原始角度吗?是的,在我的经验中,三角函数即使在现代CPU和高优化设置下也非常慢。发布您要解决的完整问题,我们可以告诉您是否可以使用点积/叉积来替代。 - user168715
4个回答

10

STL库中没有这样的功能;这些功能在数学库中。

此外,你确定在这里高效很重要吗?你是否分析过这些函数调用在热点中出现的频率?你是否知道使用这些函数的性能不佳?在进行微小优化之前,应该先回答这些问题。

为了提供建议,你打算怎么做?它需要有多准确?

如果需要高精度的实际角度,则可能无法做得更好。如果只需要进行一些比较,可以使用绝对值和点积来获取角度的余弦。如果不需要精度,可以这样做并使用acos查找表。如果将其用作另一个计算的输入,则可以使用一些几何或三角恒等式来避免找到反余弦或反正切。

无论如何,一旦完成所需的优化,应该进行前后时间运行以查看是否已经取得了显著的差异。


+1 修正数学库源代码,并提及性能分析和精度。 - Xavier Ho
没错,我喜欢使用点积的观点,不过我想你可能需要用正弦来进行比较。 - Mike Dunlavey

2
这完全取决于实现。当然,您可以使用第三方实现或近似值,但首先应该分析和确定瓶颈在哪里。

2

有没有人被 Wolfram Alpha 深深震撼到?你可以问它任何问题!试试“非负荷欧洲燕子的空速是多少?” - Emile Cormier

1

atan和acos的实现取决于编译器和优化设置。许多实现将使用表格并进行插值以获得最近的值。

首先尝试以下几点:

  1. 对应用程序进行分析,找出执行时间最长的地方。
  2. 重新设计该区域以提高性能。
  3. 考虑使用数据驱动设计技术来加速程序。
  4. 更改逻辑以减少分支和if语句,考虑使用卡诺图来简化逻辑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接