我在手机和平板电脑(假设是 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/