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

7
我正在为 iOS(即 iPhone 或 iPad)实现计算密集型应用程序,这些应用程序在很大程度上使用快速傅里叶变换(以及一些信号处理操作,例如插值和重取样)。那么,在 iOS 上运行 FFT 的最佳库和 API 是什么?
我已经简要地研究了 Apple Metal 和 Apple vDSP。我不确定 vDSP 是否利用 GPU,尽管它似乎高度并行化并利用了 SIMD。Metal 似乎允许访问 GPU 以进行计算密集型应用程序,但我无法找到类似于 AMD 的 clFFT 的 FFT 和基本信号处理操作的库。苹果是否提供这样的库?
还有没有其他适用于 iOS 的利用 GPU 的 API 和库可用于计算密集型应用程序?
谢谢。

1
vDSP和Accelerate的作用。 - quellish
@quellish,vDSP和Accelerate是否在GPU上运行FFT? - JustDoIt
@JoeBlow 这不是一个坏问题,但它请求软件库的建议(这被认为是 SO 的禁忌话题)。 - SleuthEye
3
嘿Sleuth,OP只是在寻找所有API、工具和技术来达到目标,这是一个非常有趣的主题。因为对“库”的“法律”解释失去这样的问题是一件很遗憾的事情。可惜了。 - Fattie
@JoeBlow 我并不否认在iOS上使用GPU可能会引发非常有趣的讨论。但这个问题不必被忽视:问题可以重新表述,聚焦于特定库的技术优点,这是完全符合主题的(例如,OP是否遇到了关于vDSP的具体问题?在OP的应用程序中,vDSP实现(GPU vs SIMD)是否会导致性能瓶颈的特定情况,...) - SleuthEye
4个回答

2
vDSP和Accelerate使用CPU上的向量指令来并行化和加速信号处理任务。
关于iOS系统上通过GPGPU进行FFT,我认为目前没有可用的库。许多信号处理算法是在GPGPU框架GPUImage中实现的,但看起来FFT不受支持,因为这些算法是使用OpenGL ES 2.0着色器实现的。ogles_gpgpu也是如此。
iOS系统不支持OpenGL ES 3.1计算着色器,因此您应该尝试Metal。

2
vDSP实际上使用了内置的(从iPhone 3GS开始)NEON向量算术处理器,正如你已经说过的,它是一个SIMD引擎,并且对于某些任务(包括FFT)非常快速。我没有在GPU上计算FFT的经验,但我怀疑它不会比vDSP中的NEON指令更快,因为它的唯一目的就是这些媒体和信号处理相关的任务。
vDSP在底层使用Arm NEON指令,并使使用它们变得非常容易。如果您想深入了解,您也可以手动使用NEON指令集,但是我认为即使在运行时方面与vDSP相媲美也是一项挑战,特别是如果您只需要类似FFT的开箱即用功能。
如果您想自己测试NEON引擎,有一个很棒的benchmark作为Android设备的APK,测试常规与NEON计算。您唯一需要注意的是,如果您的数据大于L1缓存,那么L2缓存访问将成为限制因素,如果您甚至超过这个限制,就不会有明显的运行时优势。

0

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接