什么是iOS / Android ARM设备最快的FFT库?

时间:2011-11-03 22:12:40

标签: android ios arm fft neon

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

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

EDIT2:如果有人可以访问POWER7机器(或其他机器),请给我发电子邮件。非常感谢。

干杯,

4 个答案:

答案 0 :(得分:11)

以下是针对ARM的不同fft算法的基准测试页面:

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

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

答案 1 :(得分:4)

@Anthony:虽然NEON可以使用VLD指令很好地处理打包格式,但它比VLDMIA慢。 因此,分割格式仍然是IMO的首选。 此外,你从哪里截取屏幕截图?它是您自己的应用程序还是一些公共基准测试工具?

@Brad:我认为加速框架没有得到很好的优化。编写工作NEON代码相当简单,其速度已经比ARM慢很多倍。大多数NEON编码器都停在那里,因为进一步的优化需要更多的努力 - 无论他们是多么“知识渊博”。

答案 2 :(得分:4)

我在ARM Cortex-A9上比较了许多NEON优化的FFT库,而“libav”肯定是最快的FFT代码,但它是: - 单线程, - 仅支持1D FFT, - 仅支持2维幂, - 并没有对实际输入/输出进行各种优化(它只是一个复杂到复杂的FFT)。

另一方面,“FFTW”(官方版本或Vesperix版本)是多线程的,支持2D FFT,支持非2次幂的维度而且损失很小,并且具有真正的优化功能输入/输出而不仅仅是复杂的输入/输出。

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

为了给你一个指示,似乎FFTW NEON优化是由执行libav NEON优化的人的学生执行的。那么你宁愿学生或导师的代码; - )

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

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

答案 3 :(得分:1)

另请尝试Cricket FFT。它还具有Neon优化功能,并且具有非常宽松的许可证 - zlib。