gpt4 book ai didi

c++ - float 到 SInt32

转载 作者:太空狗 更新时间:2023-10-29 21:46:52 27 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

这基本上是一个神话。如果在 Thumb 模式下为 armv6 编译,浮点性能过去会很慢;这在支持 Thumb 2 的 armv7 中不是问题(我将避免进一步讨论 Xcode 不再支持的 armv6)。您还希望避免使用 double ,因为 float 可以使用更快的 NEON(又名高级 SIMD 指令)单元——这很容易不小心发生;尝试启用 -Wshorten

我也怀疑您在执行 8.24 乘法时是否会获得明显更好的性能,尤其是在使用 NEON 单元时。更改 float int/int32_t/SInt32 也不会自动执行 8.24 乘法所需的移位。

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

关于c++ - float 到 SInt32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14327194/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com