我目前正在开发一个拥有自己的内部 fft(快速傅里叶变换)库的库,我想用FFTW替换它。现在,其他开发人员有点担心它可能导致的性能问题。速度方面最关键的部分也是处理半复数实数的一维卷积算法。(我正在使用 fftw 的 fftw_plan_r2r_1d)。
此外,事情有点复杂,因为内部 fftw 根据变换的大小使用不同的算法。
我目前的想法是生成一堆不同长度的数据集。然后将它们读入并在进行转换之前以预定方式为每次迭代修改数据集数组。
或者还有什么我应该知道的吗?
我目前正在开发一个拥有自己的内部 fft(快速傅里叶变换)库的库,我想用FFTW替换它。现在,其他开发人员有点担心它可能导致的性能问题。速度方面最关键的部分也是处理半复数实数的一维卷积算法。(我正在使用 fftw 的 fftw_plan_r2r_1d)。
此外,事情有点复杂,因为内部 fftw 根据变换的大小使用不同的算法。
我目前的想法是生成一堆不同长度的数据集。然后将它们读入并在进行转换之前以预定方式为每次迭代修改数据集数组。
或者还有什么我应该知道的吗?
您还可以尝试我的混合基数 fft 例程,该例程可从我的主页获得。它包括一个速度和准确性的基准测试程序,您可以将其用于评估。
确保为每个测试用例生成 FFTW 的最佳计划。PATIENT 和 EXHAUSTIVE 标志可以导致更快的计划,但它们可能需要大量时间才能到达那里。(显然你不应该把这个时间包含在你的基准时间中,因为它是一次性的并且可以缓存的。)
如果您只需要单精度输入/输出数据,则构建 FFTW 库的单精度版本 - 它们可能比默认的双精度版本快很多,并且对于信号处理和图像处理中的大多数应用程序来说足够准确。
此外,在构建 FFTW 库时,如果适合您的体系结构,请确保启用 SIMD,例如 x86 上的 SSE 或 PowerPC 上的 AltiVec。