fft 算法的基准测试方法

Posted

技术标签:

【中文标题】fft 算法的基准测试方法【英文标题】:Benchmarking approaches for fft algorithms 【发布时间】:2011-08-17 21:29:10 【问题描述】:

我目前正在开发一个具有自己的内部 fft(快速傅立叶变换)库的库,我想将其替换为 FFTW。现在,其他开发人员有点担心它可能导致的性能问题。速度方面最关键的部分也是处理半复数实数的一维卷积算法。 (我用的是fftw的fftw_plan_r2r_1d)。

另外,事情有点复杂,因为 fftw 在内部根据变换的大小使用不同的算法。

我目前的想法是生成一堆不同长度的数据集。然后将它们读入并在进行转换之前以预定方式为每次迭代修改数据集数组。

或者还有什么我应该知道的吗?

【问题讨论】:

【参考方案1】:

确保为每个测试用例生成一个最佳的 FFTW 计划。 PATIENT 和 EXHAUSTIVE 标志可以导致更快的计划,但它们可能需要大量时间才能到达那里。 (显然,您不应将此时间包含在基准时间中,因为它是一次性的且可缓存的。)

如果您只需要单精度输入/输出数据,则构建 FFTW 库的单精度版本 - 它们可以比默认的双精度版本快很多,并且对于大多数应用程序来说足够准确,例如信号处理和图像处理。

此外,在构建 FFTW 库时,请确保在适合您的架构的情况下启用 SIMD,例如x86 上的 SSE 或 PowerPC 上的 AltiVec。

【讨论】:

【参考方案2】:

您也可以尝试我的混合基数 fft 例程,该例程可从 my homepage 获得。它包括一个速度和准确性的基准测试程序,您可以将其用于评估。

【讨论】:

以上是关于fft 算法的基准测试方法的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基准测试--方法

K-Means 聚类性能基准测试

包含、存在和任何的性能基准测试

有没有比计时更好的方法来对 C 程序进行基准测试?

csharp 基准测试和比较两种获取计算机自由记忆的方法

Go语言之基准测试