fft算法的基准测试方法



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

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

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

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

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

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

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

您还可以尝试我的混合基数fft例程,该例程可从我的主页获得。它包括一个速度和准确性的基准测试程序,您可以使用它进行评估。

最新更新