【问题标题】:Compilation optimization for iPhone : floating point or fixed point?iPhone编译优化:浮点还是定点?
【发布时间】:2011-10-25 08:47:42
【问题描述】:

我正在为 iphone 构建一个库(speex,但我确信它也适用于许多其他库)并且 make 脚本可以选择使用定点而不是浮点。

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

如果有人已经对此进行了基准测试并想分享,我真的很感谢他。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果您要处理大块的顺序数据,NEON 绝对是您的最佳选择。

      浮动还是固定,这是个好问题。 NEON 在处理固定问题时要快一些,但我会保留本机输入格式,因为转换需要时间,最终需要额外的内存。

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

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

      不过,我会远离内在函数。网上有很多帖子抱怨内在函数做了一些疯狂的事情,尤其是在处理直接值时。 它可能并且将会变得非常麻烦,而且您也几乎无法使用内在函数优化任何东西。

      【讨论】:

        猜你喜欢
        • 2012-03-04
        • 2017-12-28
        • 1970-01-01
        • 2018-08-19
        • 1970-01-01
        • 2020-03-03
        • 1970-01-01
        • 2013-11-06
        • 2022-10-15
        相关资源
        最近更新 更多