1

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

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

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

4

2 回答 2

2

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

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

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

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

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

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

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

于 2011-11-07T19:16:24.833 回答