[英]benchmarking trig lookup tables performance gains vs cpp implementation
我们正在开发一个实时系统,该系统将在一个关键的运行时间内执行正弦/余弦计算。 我们正在考虑使用查找表来帮助提高性能,我正在尝试对实现表的好处/成本进行基准测试。 不幸的是,我们还不知道我们需要什么程度的准确度,但可能大约5-6个小数点。
我认为以前已经完成了C ++ trig函数与查找方法的比较。 我希望有人能够为我提供一个链接到一个记录任何此类基准测试的网站。 如果不存在这样的结果,我将不胜感激,如何确定给定最小精度的查找表需要多少内存,以及如何确定潜在的速度优势。
谢谢!
我无法回答你的所有问题,但是你不会试图确定理论速度的好处,而是在你的实际应用程序中分析它几乎肯定会更好。 然后,您可以准确了解您在特定问题域中可以获得哪些改进,这是满足您需求的最有用信息。
你的学位输入的准确度是多少(让我们使用弧度来保持讨论“更简单”)。 十分之一的学位? 百分之几度? 如果您的角度精度不是很高,那么您的触发结果就不会更好。
我已经看到这被实现为以百分之一度为索引的数组(保持角度为整数w /两个隐含的小数点也有助于计算 - 不需要使用高精度浮点/双弧度角)。
存储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)
如果您需要更高的精度但没有更多表空间的内存,您可以在数组中的两个条目之间进行线性插值,例如,SIN为45.00123将是
SIN [4500] + 0.123 *(SIN [4501] - SIN [4500])
了解这两种方法的性能特征的唯一方法是尝试它们 。
是的,其他人可能有基准测试,但是他们没有在您的代码环境中运行,并且它们没有在您的硬件上运行,因此它们不适用于您的情况。
但是,您可以做的一件事是查找CPU手册中的指令延迟。 (英特尔和AMD在其网站上以PDF格式提供此信息,大多数其他CPU制造商都有类似的文档)
然后你至少可以找出实际触发指令的速度有多快,为你提供一个基线,查找表将不得不打败它。
但这只能给出对方程式一侧的粗略估计。 如果您知道CPU缓存的延迟,并且大致了解内存访问的延迟,您也可以对查找表的成本进行类似的粗略估计。
但获得准确信息的唯一方法是尝试它。 同时实现,看看在你的应用程序会发生什么。 只有这样,你知道这是你的情况更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.