在iOS上的GPU上进行快速傅里叶变换

时间:2014-09-24 15:24:57

标签: ios fft gpgpu vdsp

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

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

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

感谢。

4 个答案:

答案 0 :(得分:2)

vDSP实际上使用内置(从iPhone 3GS开始)NEON向量算术处理器,正如您已经说过的SIMD引擎,并且对于包括FFT在内的某些任务来说非常快。

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

vDSP使用引擎盖下的Arm NEON指令,使用起来非常简单。如果你想要沮丧和肮脏,你也可以手动使用NEON指令集,但我认为即使与vDSP运行时明智相提并论也是一个挑战,特别是如果你只需要开箱即用的函数如FFT。

如果您想自己测试NEON引擎,那么有一个很棒的benchmark作为Android设备的APK,用于测试常规与NEON计算。您唯一需要注意的是,如果您的数据大于L1缓存,则L2缓存访问将成为限制因素,如果您甚至超过此限制,则不会有明显的运行时优势。

答案 1 :(得分:2)

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

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

iOS系统不支持OpenGL ES 3.1计算着色器,因此您应该查看Metal。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

在这里查看我的答案:https://stackoverflow.com/a/19966776/468812

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