Fastest Inverse Square Root on iPhone
我正在开发一款iPhone应用程序,它涉及到某些物理计算,每秒进行数千次。我正在优化代码以提高帧速率。我希望改进的部分之一是平方反比。现在,我使用的是地震3快速平方反比法。但是,在做了一些研究之后,我听说使用neon指令集有一种更快的方法。我不熟悉内联汇编,无法理解如何使用neon。我尝试实现MathNeon库,但由于大多数基于Neon的函数缺少
编辑:我突然得到一些"不清楚的问题"的近距离投票。虽然我认为这很清楚,那些回答清楚的人也明白,但也许有些人需要它明确地说明:如何使用Neon进行更快的计算?在iPhone上,这真的是获得平方反比最快的方法吗?
编辑:我今天对霓虹灯和地震做了一些更正式的测试,但如果有什么,我现在更不确定结果:
应用内测试:(当前在应用商店中修改了invsqrt方法的应用)
- 地震法(压力条件下平均fps的边际增加)
- 霓虹灯(这是一个非常接近的信号,但地震似乎稍微快一点)
- 1/sqrtf()(有点明显的区别,下降1-3 fps)。
"正式"测试(一个吞噬我手机CPU的应用程序。乘以每个方法通过10000000个随机生成的浮点数组所需的时间)
- 霓虹灯(显然是最快的,如果同时进行两次sqrt,则速度要加倍)。
- 1/sqrtf()(仅略慢于neon。这个令人惊讶的结果使我认为这个测试"没有结论",直到我进一步调查)
- 地震(令人惊讶的是,这种方法比其他两种方法慢几个数量级。考虑到它在其他测试中的性能,这一点尤其令人惊讶。)
虽然在应用程序性能测试中,Quake和Neon之间的距离太近,无法确定,但在第一次测试中,Quake和1/sqrtf()的距离非常明显,第二次测试与它输出的值非常一致。不过,最终重要的是应用程序的性能,所以我将根据测试做出最终决定。
在公认的应答问题你联已经提供了答案,但不能拼写出来。
1 2 3 4 5 | #import void foo() { float32x2_t inverseSqrt = vrsqrte_f32(someFloat); } |
头和功能已经提供的是iOS SDK。
http://P /数学/ code.google.com氖/源/浏览/饮料/数学_ sqrtf.c <霓虹灯有一个执行invsqrt有,你应该能够复制位是组装。