7

我正在为 iOS(即 iPhone 或 iPad)实现计算密集型应用程序,这些应用程序大量使用快速傅立叶变换(以及一些信号处理操作,例如插值和重采样)。允许在 iOS 上运行 FFT 的最佳库和 API 是什么?

我曾简要研究过 Apple Metal 和 Apple vDSP。我不确定 vDSP 是否使用 GPU,尽管它似乎高度并行化并使用 SIMD。Metal 似乎允许为计算密集型应用程序访问 GPU,但我无法找到用于 FFT 和基本信号处理操作的库(类似于 AMD 的 clFFT)。Apple 是否提供此类库?

是否有其他适用于计算密集型应用程序的使用适用于 iOS 的 GPU 的 API 和库?

谢谢。

4

4 回答 4

2

vDSP 和 Accelerate 在 CPU 上使用矢量指令来并行化和加速信号处理任务。

关于在 iOS 系统上通过 GPGPU 进行 FFT,我认为目前没有这样的库可用。许多信号处理算法在 GPGPU 框架GPUImage中实现,但似乎不支持 FFT,因为这些算法是使用 OpenGL ES 2.0 着色器实现的。ogles_gpgpu也是如此

iOS 系统不支持 OpenGL ES 3.1 Compute Shaders,所以你应该看看 Metal。

于 2015-01-11T12:04:02.910 回答
2

vDSP 实际上使用内置(从 iPhone 3GS 起)NEON 矢量算术处理器,正如您已经说过的那样,它是一个 SIMD 引擎,并且对于某些任务非常快,包括 FFT。

我没有在 GPU 上计算 FFT 的经验,但我怀疑它会比 vDSP 中的 NEON 指令更快,因为它的唯一目的是这些媒体和信号处理相关的任务。

vDSP 在后台使用 Arm NEON 指令,使使用它们变得非常容易。如果你想搞砸,你也可以手动使用 NEON 指令集,但我认为即使在运行时方面与 vDSP 相提并论也是一个挑战,特别是如果你只需要像 FFT 这样的开箱即用的功能。

如果您想自己测试 NEON 引擎,有一个很好的基准测试作为 Android 设备的 APK,用于测试常规与 NEON 计算。您唯一需要注意的是,如果您的数据大于 L1 Cache,则 L2 Cache 访问将成为限制因素,即使您超过了这一点,也不会有明显的运行时优势。

于 2015-01-02T12:13:51.880 回答
0

看看我的答案:https ://stackoverflow.com/a/19966776/468812

虽然其中的代码使用 FFT 进行音频处理,但它可以应用于任何信号。

于 2015-03-09T13:02:35.207 回答
0

您会发现Surge正是您所需要的。它是用纯 Swift 编写的!

于 2015-01-11T13:25:48.700 回答