我们正在开发一个实时系统,该系统将在运行的关键时间段执行sin/cos计算。我们正在考虑使用查找表来帮助提高性能,我正在尝试对实现表的好处/成本进行基准测试。不幸的是,我们还不知道我们需要多高的精度,但可能在5-6个小数点左右。
我认为之前已经对C++触发器函数和查找方法进行了全面的比较。我希望有人能为我提供一个链接,链接到一个记录任何这样的基准的网站。如果这样的结果不存在,我将非常感谢任何关于如何在给定最小精度的情况下确定查找表需要多少内存的建议,以及如何确定潜在的速度优势。
谢谢!
发布于 2010-09-16 04:41:56
我不能回答您的所有问题,但您最好在实际应用程序中分析它,而不是尝试确定理论上的速度优势。然后,您可以准确地了解在您的特定问题领域中您将获得什么样的改进,这是对您的需求最有用的信息。
发布于 2010-09-16 09:09:22
你的度数输入的精确度是多少(让我们使用度数除以弧度,以使讨论“更简单”)。十分之一度?百分之一的学位?如果你的角度精度不是很高,那么你的trig结果不可能更好。
我已经看到这是一个以百分之一度为索引的数组(将角度保持为整数w/两个隐含的小数点也有助于计算-不需要使用高精度的浮点/双弧度角度)。
存储0.00到90.00度的SIN值将是9001 32位浮点结果值。
SIN =0.0...SIN4500 = 0.7071068 ...SIN9000 = 1.0
如果你有SIN,COS(a) = SIN(90-a)的trig属性就意味着你使用SIN9000-a得到COS(a)
如果您需要更高的精度,但是没有足够的内存来容纳更多的表空间,那么您可以在数组中的两个条目之间进行线性插值,例如,45.00123的SIN将是
SIN4500 + 0.123 * (SIN4501 - SIN4500)
发布于 2010-09-16 08:20:10
了解这两种方法的性能特征的唯一方法是尝试它们。
是的,可能有其他人做了基准测试,但它们不是在您的代码上下文中运行的,也不是在您的硬件上运行的,所以它们不太适合您的情况。
但是,您可以做的一件事是在CPU的手册中查找指令延迟。(Intel和AMD在其网站上以PDF格式提供了此信息,大多数其他CPU制造商也有类似的文档)
然后,你至少可以找出实际的trig指令有多快,给你一个基线,查找表必须超过这个基线才是值得的。
但这只给了你方程式的一个粗略估计。如果您知道CPU缓存的延迟,并且对内存访问的延迟有一个大致的了解,那么您也可以对查找表的成本进行类似的粗略估计。
但获取准确信息的唯一方法就是尝试一下。实现这两种方法,看看应用程序中发生了什么。只有这样,你才能知道哪一个更适合你的情况。
https://stackoverflow.com/questions/3721216
复制相似问题