3

我有一系列使用 32 位浮点数作为主要样本数据类型的 c++ 信号处理类。例如,所有振荡器类都会为请求的每个样本返回浮点数。这对所有类都是一样的,所有样本的计算都是浮点数。

我正在将这些类移植到 iOS 上。对于性能问题,我想在 8.24 定点中操作以充分利用处理器,据说 iOS 上处理整数而不是浮点数有很大的性能优势。我m 目前以浮点数进行所有计算,然后在输出前的最后阶段转换为 SInt32,这意味着最后阶段的每个样本都需要转换。

我是否只需将类中使用的数据类型从 Float 更改为 SInt32。所以我的振荡器和滤波器等通过在内部传递 SInt32 而不是浮点数来计算定点?

真的这么简单吗?还是我必须完全重写所有不同的算法?

在执行此任务之前,我还需要了解其他巫术吗?

非常感谢任何有时间对此发表评论的人..非常感谢..

4

1 回答 1

2

这主要是一个神话。armv6如果您在 Thumb 模式下编译,浮点性能曾经很慢;这不是armv7支持 Thumb 2 的问题(我将避免进一步讨论 Xcode 不再支持的 armv6)。您还希望避免使用双精度数,因为浮点数可以使用更快的 NEON(又名高级 SIMD 指令)单元——这很容易意外地做到;尝试启用-Wshorten.

我也怀疑你会在 8.24 乘法中获得明显更好的性能,尤其是在使用 NEON 单元时。更改float int//也不会自动为 8.24 乘法进行必要的转换int32_tSInt32

如果您知道将浮点数转换为整数比较慢,请考虑使用 Accelerate.framework 中的一些函数,即vDSP_vfix16()或 vDSP_vfixr16()。

于 2013-01-14T23:38:55.773 回答