iPhone的编译优化:浮点还是固定点?

时间:2011-10-25 08:47:43

标签: iphone compilation floating-point arm fixed-point

我正在构建一个iphone库(speex,但我相信它也适用于很多其他的lib),make脚本可以选择使用固定点而不是浮点。

由于iphone ARM处理器具有VFP扩展并执行非常好的浮点计算,您认为使用定点选项是更好的选择吗?

如果某人已经对此进行了基准测试并希望分享,我真的会感谢他。

2 个答案:

答案 0 :(得分:2)

嗯,这取决于你的应用程序的设置,这里有一些指导

  1. 首先尝试将优化设置为0(最快最小)
  2. 启用“放宽IEEE合规性”
  3. 如果您的应用程序可以独立地在连续的内存位置轻松处理浮点数,您应该查看ARM NEON内部和汇编指令,它们可以在一条指令中处理多达4个浮点数。
  4. 如果您已经大量使用浮点数学,请尝试将某些逻辑切换到固定点(但请记住,从NEON寄存器移动到整数寄存器会导致完整的管道停顿)
  5. 如果您已经大量使用整数数学,请尝试将某些逻辑更改为浮点数学。
  6. 请记住优化前的个人资料
  7. 最重要的是,更好的算法总能胜过上面的微优化。

答案 1 :(得分:0)

如果您正在处理大量的顺序数据,那么NEON绝对是您的选择。

漂浮或固定,这是一个很好的问题。 NEON处理固定的速度有点快,但我会保留原生输入格式,因为转换需要时间,最终需要额外的内存。

即使lib提供了不同的输出格式作为选项,它几乎总是意味着lib内部转换。所以我想在这种情况下浮动是原生的。坚持下去。

没有人阻止您微观优化更好的算法。通常,算法越好,由于现代机器上的流水线操作,通过微优化可以实现更高的性能提升。

但是,我会远离内在的东西。网上有这么多帖子抱怨内部人员疯狂做事,特别是在处理即时价值时。 它会变得非常麻烦,你很难用内在函数优化任何东西。