FFT 使用 C++ 定点优化 ARM 设备的性能

Posted

技术标签:

【中文标题】FFT 使用 C++ 定点优化 ARM 设备的性能【英文标题】:FFT using C++ fixed-point for optimizing performance for ARM devices 【发布时间】:2012-05-17 15:22:30 【问题描述】:

我在手机和平​​板电脑(比如 ARM 设备)中使用 OpenCV DFT。代码是 C++ 的。我期待能够通过使用 ARM 寄存器和定点算法来优化 FFT 性能,但我只设法获得比 OpenCV 多一倍的时间,甚至不是同一时间。

我使用 RADIX-4 256 点 FFT。

有谁知道 OpenCV 是做什么的,为什么优化如此困难? ARM 设备最快的 FFT 算法是什么? radix-4, radix-8, 256 点, 1024...

【问题讨论】:

什么 ARM 设备或处理器类型?一些 ARM 架构包括 VFP 或 NEON 单元,它们可以加速向量化短浮点运算,并且可以在汇编语言中进行优化。 没有霓虹灯。它是一个 tegra,ARM9。 看看FFT,它是一种快速的方法:cmlab.csie.ntu.edu.tw/cml/dsp/training/coding/transform/… RADIX-4 已经是一种 FFT 算法 【参考方案1】:

OpenCV 的实现在 Tegra、Tegra 2 和 Tegra 3 设备上使用特定于设备的优化。在 Tegra 和 Tegra 2 上,实现是并行的,一些操作使用 GLSL 着色器在 GPU 上加速;在 Tegra 3 上,它还使用 NEON SIMD 指令对 CPU 上的一些操作进行矢量化,并使用 CUDA 来获得更好的 GPU 性能。鉴于 NVidia 将人力投入到优化工作中,利用他们对平台的深入了解,在不常见的操作中超越它可能是一项艰巨的任务。

This article 主要是特定于 Tegra 3 的,但谈了很多关于他们使用的技术类型以及他们通过优化但与设备无关的代码获得的性能加速。

【讨论】:

以上是关于FFT 使用 C++ 定点优化 ARM 设备的性能的主要内容,如果未能解决你的问题,请参考以下文章

wav音频文件解析读取 定点转浮点分析 幅值提取(C语言实现)

需要定点 FFT 算法

你在 C++ 中使用啥来表示定点?

ARM NEON 图像转换优化

[CTSC2010]性能优化 [混合基FFT]

如何在C或C++代码中嵌入ARM汇编代码