【问题标题】:what is the fastest FFT library for iOS/Android ARM devices? [closed]iOS/Android ARM 设备最快的 FFT 库是什么? [关闭]
【发布时间】:2011-12-21 14:24:24
【问题描述】:

iOS/Android ARM 设备最快的 FFT 库是什么?人们通常在 iOS/Android 平台上使用什么库?我猜 vDSP 是 iOS 上最常用的库。

编辑:我的代码位于 http://anthonix.com/ffts 并使用 BSD 许可证。它在 Android 和 iOS 上运行,比 libav、FFTW 和 vDSP 更快。

EDIT2:如果有人可以提供对 POWER7 机器(或其他机器)的访问权限,请给我发电子邮件。将不胜感激。

干杯,

【问题讨论】:

  • 欢迎来到 Stackoverflow!如果您发现回复有帮助,请投票。如果回复成功回答了您的问题,请点击旁边的绿色复选标记接受答案。也请查看stackoverflow.com/questions/how-to-ask 以获取有关如何写出好问题的建议
  • 我很困惑——你们为什么要对交错格式的性能进行基准测试? vDSP 对拆分复杂数据进行操作,因为它是对复杂数据进行许多其他信号处理操作的首选布局。这些布局之间的映射成本是否包含在您的基准测试中?
  • Stephen:是的,成本已经计算在内;我正在按照 Apple 开发人员库文章“使用加速框架进行数据处理”(developer.apple.com/library/mac/#featuredarticles/…) 中的“用例 2:快速傅立叶变换”执行 FFT。我对信号处理相当陌生。为什么拆分格式是首选布局?还有哪些图书馆使用它?我只使用了一些其他的库,例如 FFTW,而 vDSP 是唯一使用拆分格式的库。
  • 假设您想将信号乘以一个复数(或者执行除加法之外的任何其他操作,真的);如果您使用交错格式,则可能需要大量的置换来执行它。使用拆分格式,可以避免这些排列。
  • @Jake 查看 benchfft 以获取有关 FFT 基准测试的信息 (fftw.org/speed/method.html)

标签: android ios arm fft neon


【解决方案1】:

也可以试试Cricket FFT。它还具有 Neon 优化,并且具有非常宽松的许可证 - zlib。

【讨论】:

    【解决方案2】:

    我在 ARM Cortex-A9 上比较了许多 NEON 优化的 FFT 库,“libav”当然是最快的 FFT 代码,但它是: - 单线程, - 仅支持一维 FFT, - 仅支持二维的幂, - 并且没有针对实际输入/输出的各种优化(它只是一个复数到复数的 FFT)。

    另一方面,“FFTW”(无论是正式版还是 Vesperix 版)是多线程的,支持 2D FFT,支持非 2 次方维度且惩罚非常小,并且针对真实情况进行了全面优化输入/输出,而不仅仅是复杂的输入/输出。

    因此,根据您的 FFT 要求,由于额外的功能,FFTW 对于您的项目可能会更快,但如果您只需要 libav 提供的 FFT(或者您自己使用 NEON 和多线程编写额外的功能),那么libav 实际上是最快的 1D Complex-to-Complex FFT 代码。

    为了给你一个提示,FFTW NEON 优化似乎是由执行 libav NEON 优化的那个人的学生执行的。所以你更喜欢学生或导师的代码;-)

    另一个问题是 libav 使用 LGPL 许可证,而 FFTW 使用 GPL 许可证,因此限制性更强,除非您愿意支付大笔资金为 FFTW 购买适当的许可证。

    (就我个人而言,我最终在 libav 的 1D FFT 之上使用 NEON 和多线程编写了自己的 2D 和真实数据功能,但由于我不是 FFT 专家,因此付出了很多努力!)

    【讨论】:

    • 我刚刚将 libav 的 NEON 启用 FFT 与 FFTS 进行了基准测试,FFTS 是最快的,在大多数情况下至少是 2 倍。但是 libav 比 FFTW 快一点。
    • FFT 基准测试是否包括来自 Accelerate 框架的结果?
    • 有没有关于将 FFTW 移植到像 Arm Cortex M4 这样的嵌入式 MCU 的信息?
    【解决方案3】:

    这是一个在 ARM 上对不同 fft 算法进行基准测试的页面:

    http://pmeerw.dyndns.org/blog/programming/neon3.html

    从该页面来看,最快的 FFT 实现是 LibAv,它具有 Neon 优化的 fft http://libav.org/

    【讨论】:

    • 有趣..你知道libav FFT是否可以自己编译吗?它计算的变换的大小和类型范围是多少?
    • 忽略最后一条评论;我看了一下源代码。下周我将尝试将它与我的代码进行基准测试。
    • 安东尼,sfft 与 libav 的任何结果?我找不到比 libav 更快的东西,我想改进的唯一部分是他们没有 armv6 优化版本(仅限霓虹灯)。令人惊讶的是,即使是纯 C 版本的性能也非常好,但如果使用适当的 asm,它的速度可能会翻倍。
    • @Pavel 我刚刚将 FFTS 与 libav 进行了基准测试,FFTS 更快,在大多数情况下至少快 2 倍
    • @AnthonyBlake 这令人惊讶。顺便说一句,一年多后我在这里阅读了我自己的问题:)出于我自己的需要,我看不到任何接近 libav/ffmpeg 的 fft 实现的东西。我将它用于声音处理中的 16 位整数。您的测试是使用浮点数/双精度数还是整数?我最感兴趣的是 arm-neon 优化版本,它的优化非常好。
    猜你喜欢
    • 2011-09-10
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多