基准测试三角形查找表性能增益与cpp实现

时间:2010-09-15 19:43:21

标签: c++ benchmarking trigonometry lookup-tables

我们正在开发一个实时系统,该系统将在关键的操作时段内执行正弦/余弦计算。我们正在考虑使用查找表来帮助提高性能,我正在尝试对实现表的好处/成本进行基准测试。不幸的是,我们还不知道我们需要什么程度的准确度,但可能大约5-6个小数点。

我认为以前已经完成了对C ++ trig函数与查找方法的比较。我希望有人能够为我提供一个链接到一个记录任何此类基准测试的网站。如果不存在这样的结果,我将非常感谢如何确定查找表需要多少内存,假设给定的最低精度,以及如何确定潜在的速度优势。

谢谢!

3 个答案:

答案 0 :(得分:2)

我无法回答您的所有问题,但您不会尝试确定理论速度优势,而是在实际应用中进行分析时几乎肯定会更好。然后,您可以准确了解您在特定问题域中可以获得哪些改进,这是满足您需求的最有用信息。

答案 1 :(得分:1)

你的学位输入的准确度是多少(让我们使用弧度来保持讨论“更简单”)。十分之一的学位?百分之几度?如果你的角度精度不是很好,那么你的三角形结果就不会好了。

我已经看到这被实现为以百分之一度为索引的数组(保持角度为整数w /两个隐含的小数点也有助于计算 - 不需要使用高精度浮点/双弧度角)。

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

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

如果你有SIN,则COS(a)的SIN属性= SIN(90-a) 只是意味着你这样做 SIN [9000-A] 获得COS(a)

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

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

答案 2 :(得分:0)

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

是的,其他人可能会对其进行基准测试,但是他们没有在您的代码中运行,并且它们没有在您的硬件上运行,因此它们不适用于您的情况。 / p>

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

然后你至少可以找出实际触发指令的速度有多快,为你提供一个基线,查找表将不得不打败它。

但这只能给出对等式一边的粗略估计。如果您知道CPU缓存的延迟,并且大致了解内存访问的延迟,您也可以对查找表的成本进行类似的粗略估计。

但获取准确信息的唯一方法是尝试。实现两者,并查看您的应用程序中发生的情况。只有这样,你才会知道你的案例中哪个更好。