使用查找表进行优化:

时间:2012-01-31 15:21:14

标签: javascript optimization trigonometry lookup-tables square-root

这家伙:http://andrew-hoyer.com/experiments/cloth/制作了一个javascript算法来模拟布料。他指出代码太慢,所以他不得不使用泰勒系列来优化平方根。

  1. 这不能通过预先计算每个可能的值并使用查找表来获得它来优化吗?

  2. 经常使用吗?例如,在3D游戏中,他们是否实际执行计算,或者他们已经为每个sin,cos,tg,sqrt和类似函数设置了查找表?

  3. 为什么不预先编程到处理器中?

3 个答案:

答案 0 :(得分:3)

查找表几乎死了,并埋没了现代处理器。特别是像sqrt这样的东西。大多数FPU可以在9-20个周期内完成它们,它们通常与其他计算交错。内存访问现在经常成为CPU缓存未命中数百个周期的瓶颈。即使是二级缓存也可能需要20-30个周期。通常,进行计算比保持预先计算的值更快。

答案 1 :(得分:2)

因为默认情况下您的平均CPU定义了基于IEEE-754标准的浮动操作,该标准非常严格地定义了任何数学运算的结果。按设计查找表只是一个近似值,只包含特定问题所需的特定范围和粒度 - 这使得在硬件中无法实现合理的实现。如果你想存储任何可能的价值 - 自己做数学。

这并不意味着我们从不接近结果 - 查找表对此没有那么好的解决方案。即SSE同时具有sqrtssrsqrtss - 后者返回实际结果的近似值,并且速度更快。那里只是一点数学。

答案 2 :(得分:1)

使用查找表可能没错,但可能是微优化。使用算法或专注于其他代码更聪明。也许是因为它没有硬编码到cpu中的截止日期。对数怎么样?在cpu中有查找表吗?