这家伙:http://andrew-hoyer.com/experiments/cloth/制作了一个javascript算法来模拟布料。他指出代码太慢,所以他不得不使用泰勒系列来优化平方根。
这不能通过预先计算每个可能的值并使用查找表来获得它来优化吗?
经常使用吗?例如,在3D游戏中,他们是否实际执行计算,或者他们已经为每个sin,cos,tg,sqrt和类似函数设置了查找表?
为什么不预先编程到处理器中?
答案 0 :(得分:3)
查找表几乎死了,并埋没了现代处理器。特别是像sqrt这样的东西。大多数FPU可以在9-20个周期内完成它们,它们通常与其他计算交错。内存访问现在经常成为CPU缓存未命中数百个周期的瓶颈。即使是二级缓存也可能需要20-30个周期。通常,进行计算比保持预先计算的值更快。
答案 1 :(得分:2)
因为默认情况下您的平均CPU定义了基于IEEE-754标准的浮动操作,该标准非常严格地定义了任何数学运算的结果。按设计查找表只是一个近似值,只包含特定问题所需的特定范围和粒度 - 这使得在硬件中无法实现合理的实现。如果你想存储任何可能的价值 - 自己做数学。
这并不意味着我们从不接近结果 - 查找表对此没有那么好的解决方案。即SSE同时具有sqrtss
和rsqrtss
- 后者返回实际结果的近似值,并且速度更快。那里只是一点数学。
答案 2 :(得分:1)
使用查找表可能没错,但可能是微优化。使用算法或专注于其他代码更聪明。也许是因为它没有硬编码到cpu中的截止日期。对数怎么样?在cpu中有查找表吗?