基准测试三角函数查找表性能增益 vs C++实现

3
我们正在开发一个实时系统,在操作的关键时间段内进行sin/cos计算。我们考虑使用查找表来提高性能,我正在尝试评估实施表格的成本效益。不幸的是,我们还不知道需要多少精度,但可能在5-6个小数点左右。
我认为已经有人对比了C++三角函数和查找方法的性能。我希望有人能够向我提供记录任何此类基准测试的网站链接。如果没有这样的结果,我将感激任何有关如何确定在给定最小精度下需要多少内存进行查找表,并且如何确定潜在速度优势的建议。
谢谢!
3个回答

2

我无法回答你所有的问题,但是与其试图确定理论速度优势,你几乎肯定会更好地在实际应用程序中进行分析。然后,你可以获得一个准确的图片,了解你在特定问题领域可以获得什么样的改进,这是你需求中最有用的信息。


1

你的角度输入精度是多少(为了讨论“更简单”,我们使用度数而不是弧度)。十分之一度?百分之一度?如果你的角度精度不高,那么你的三角函数结果也不会更好。

我见过这种实现方式,它是由百分之一度索引的数组(将角度作为带有两个隐含小数点的整数也有助于计算 - 不需要使用高精度浮点/双精度弧度角)。

存储0.00到90.00度的SIN值将是9001个32位浮点结果值。

SIN [0] = 0.0 ... SIN [4500] = 0.7071068 ... SIN [9000] = 1.0

如果你有SIN,三角函数的COS(a) = SIN(90-a)属性只需要你执行 SIN[9000-a] 就可以得到COS(a)

如果你需要更高的精度但没有足够的内存来存储更多的表格空间,你可以在数组的两个条目之间进行线性插值,例如45.00123的SIN值将是

SIN[4500] + 0.123 * (SIN[4501] - SIN[4500])


0

了解这两种方法的性能特征唯一的方法是尝试它们

是的,可能有其他人制作的基准测试,但它们没有在您的代码上下文中运行,也没有在您的硬件上运行,因此对您的情况不太适用。

然而,您可以做的一件事是查阅CPU手册中的指令延迟时间。(英特尔和AMD在其网站上以PDF形式提供此信息,大多数其他CPU制造商也有类似的文档)

然后,您至少可以找出实际三角函数指令的速度有多快,从而为您提供一个基准,以便查找表必须超越才能有价值。

但这只给您提供了方程式的一面粗略估计。如果您知道CPU缓存的延迟时间,并且大致了解内存访问的延迟时间,那么您可能也能够对查找表的成本进行类似的粗略估计。

但获取准确的信息的唯一方法是尝试它们。实现两种方法,看看在您的应用程序中会发生什么。只有这样,您才会知道哪种方法在您的情况下更好。


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