【问题标题】:Fast Fourier transforms on GPU on iOSiOS 上 GPU 上的快速傅里叶变换
【发布时间】:2014-11-19 04:11:14
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • vDSP 和 Accelerate 做。
  • @quellish vDSP 和 Accelerate 在 GPU 上运行 FFT 吗?
  • @JoeBlow 这不是一个坏问题,但它要求对软件库提出建议(这被认为是 SO 题外话)。
  • Hey Sleuth,OP 只是在寻找所有 API、工具和技术来实现问题,这是一个非常有趣的话题。由于对“图书馆”的“法律”解释而失去这些问题是非常遗憾的。可惜
  • @JoeBlow 我并不否认围绕 iOS 使用 GPU 可能会产生非常有趣的讨论。但不一定要丢失:问题可以改写为专注于特定库的技术优点并且非常切题(例如,OP 在 vDSP 上是否存在特定问题?是否存在 vDSP 实现的特定场景( GPU 与 SIMD)导致 OPs 应用程序的性能瓶颈,...)

标签: ios fft gpgpu vdsp


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-07-12
          • 2017-09-14
          • 2012-12-10
          • 2013-03-31
          • 2015-08-19
          • 2020-03-29
          • 1970-01-01
          • 2010-12-13
          • 2012-05-25
          相关资源
          最近更新 更多