2011-10-25 51 views
1

我正在为iPhone构建一个库(speex,但我确定它也会应用到很多其他库),并且make脚本可以选择使用固定点而不是浮点。针对iPhone的编译优化:浮点还是固定点?

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

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

回答

2

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

  1. 首先尝试启用优化0(最快最小)
  2. 打开放松IEEE符合
  3. 如果您的应用程序可以在独立的连续内存位置轻松处理浮点数,您应该查看ARM NEON内部指令和汇编指令,它们可以在一条指令中处理多达4个浮点数。
  4. 如果您已经在大量使用浮点运算,尝试一些你的逻辑切换到固定点(但请记住,从NEON移动注册中一个完整的流水线失速整数寄存器结果)
  5. 如果您已经大量使用整数数学,试着将你的一些逻辑改为浮点数学。
  6. 记得在优化之前进行配置文件
  7. 而且最重要的是,更好的算法总是会击败上述的微优化。
0

如果您正在处理大量的连续数据,NEON绝对是您的选择。

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

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

没有人会阻止你微调优化算法。通常,算法越好,由于现代机器上的流水线操作,通过微优化可以获得更多的性能增益。

虽然我会远离内在的东西。网络上有太多的帖子抱怨内部人员做些疯狂的事情,特别是在处理即时值时。 它可能会变得非常麻烦,你也难以用内在函数优化任何东西。