c++ - 使用 C++ 定点进行 FFT 优化 ARM 设备的性能

标签 c++ arm fft radix tegra

我在手机和平​​板电脑(假设是 ARM 设备)中使用 OpenCV DFT。这些代码是 C++ 的。我期望能够通过使用 ARM 寄存器和定点运算来优化 FFT 性能,但我只获得了 OpenCV 的两倍时间,甚至不是相同的时间。

我使用 RADIX-4 256 点 FFT。

有谁知道 OpenCV 是做什么的以及为什么它这么难优化? ARM 设备上最快的 FFT 算法是什么?基数 4、基数 8、256 点、1024...

最佳答案

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

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

关于c++ - 使用 C++ 定点进行 FFT 优化 ARM 设备的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638622/

相关文章:

assembly - 编译器添加的分支和进位

signal-processing - 对信号执行 FFT 时,相关通带的信息是否可以使算法更加高效?

c++ - 用 C++ 计算债券到期 yield (YTM)

c++ - 可能的逻辑错误 : remove(vector. begin(),vector.end(),val)

c - 注册虚拟机和加载/存储架构?

linux - ARM 嵌入式 Linux 工具链

matlab - Arduino 和 Matlab 之间串行同步数据传输

image-processing - 傅立叶变换帮助和均值滤波器

c++ - 在 Eigen 中按列计算 lpNorm

c++ - 在现有 Qt 项目中从源代码构建第 3 方库