4

我正在使用 Atmel 的 AT91SAM9G20 处理器为嵌入式 Linux 系统开发 C/C++ 软件。我需要使用 Linux 用户空间程序使用定点(或者可能是浮点)数学快速计算 FFT。我知道汇编器可能是实现的方式,并且在使用 gcc 编译器进行编译时可能需要额外的 -mpcu 开关。进行此实施的最佳方法是什么,是否有任何好的书籍参考或优化的 FOSS 库可用?

我必须实现一些算法,这些算法也需要多次应用小的 FFT 长度(即 1024 点),我想知道某些库(例如 Kissfft)是否也能正常工作。我也对长 FFT 长度感兴趣,因此下面的答案中建议的 FFTW 也可以很好地工作。

除了这个问题,我还想知道如何在 ARM9 Linux 用户空间程序中处理整数除法。如果我将两个整数相除(例如 25 / 4),是否使用软浮点数进行除法?我还需要实现一些繁重的数字运算算法,我想知道在这里使用定点是否比浮点数学更好,以及 gcc 编译器如何真正处理事情。

4

1 回答 1

4

FFTw 包含特定于 CPU 的优化(也可以进行编译时/运行时 CPU 分析)。

3.3.1 版引入了对 ARM Neon 扩展的支持

并来自常见问题解答:问题 4.2。为什么 FFTW 这么快?

这是一个复杂的问题,没有简单的答案。事实上,作者也不完全知道答案。除了整个 FFTW 的许多小型性能黑客之外,FFTW 的速度还有三个一般原因。

  • FFTW 使用多种 FFT 算法和实现风格,可以任意组合以适应机器。请参阅 Q4.1 `FFTW 是如何工作的?
  • FFTW 使用代码生成器生成高度优化的例程来计算小型变换。
  • FFTW 使用显式的分治法来利用内存层次结构。
于 2012-03-26T15:17:50.733 回答