提问人: 提问时间:8/18/2023 最后编辑:Loïc Reynier 更新时间:8/18/2023 访问量:75
在 pyFFTW 中使用 FFTW Wisdom 进行优化的快速傅里叶变换
Using FFTW Wisdom in pyFFTW for optimized Fast Fourier Transforms
问:
我正在从事一个项目,该项目涉及使用 Python 中的 pyFFTW 库在大型数据集上执行 FFT。我听说 FFTW 有一个叫做“智慧”的功能,它可以通过预先计算特定转换大小和配置的最优计划来显着提高 FFT 计算的性能。
我不完全确定如何在pyFFTW库中有效地使用这个智慧功能。我已经阅读了文档,但我仍然对实际实现感到有些困惑。如果能深入了解何时以及如何将智慧应用于我的 FFT 计算以获得最佳性能增益,我将不胜感激。
这是我正在使用的设置的 MWE:
import pyfftw
# Define input and output data arrays
input_data = pyfftw.empty_aligned(128, dtype='complex128')
output_data = pyfftw.empty_aligned(128, dtype='complex128')
# Create an FFT object using pyFFTW
fft_object = pyfftw.FFTW(input_data, output_data, direction='FFTW_FORWARD', flags=('FFTW_MEASURE',))
# Perform FFT computation
fft_object(input_data)
答:
2赞
Loïc Reynier
8/18/2023
#1
FFTW 库中的“智慧”是指有关 FFT 计算最优计划的预先计算的信息。
在初始化 FFT 对象时,将进行规划过程,在此过程中存储智慧。因此,生成的 FFT 对象被微调为所提供输入数据的特定形状和类型。采用此规划的后续转换将自动重用存储的智慧。
因此,所有的智慧魔法都是在内部处理的。当希望使用特定的规划知识而不是重新计算它时,输出智慧就变得很重要。 例如,考虑后续计算会话重用以前导出的智慧的场景:
第一届会议;计算计划,并导出由此产生的智慧:
import pyfftw # Define input and output data arrays input_data = pyfftw.empty_aligned(128, dtype='complex128') output_data = pyfftw.empty_aligned(128, dtype='complex128') # Create an FFT object with pyFFTW fft_object = pyfftw.FFTW( input_data, output_data, direction='FFTW_FORWARD', flags=('FFTW_MEASURE',), ) # Perform FFT computation (this will compute and store internally the wisdom) fft_object(input_data) # Export the computed wisdom to a file pyfftw.export_wisdom(filename='./fft_wisdom.dat')
第二届会议;加载导出的 Wisdom 以加快优化过程:
import pyfftw # Define input and output data arrays input_data = pyfftw.empty_aligned(128, dtype='complex128') output_data = pyfftw.empty_aligned(128, dtype='complex128') # Load wisdom from file pyfftw.import_wisdom(filename='./fft_wisdom.dat') # Create an FFT object using the loaded wisdom fft_object = pyfftw.FFTW( input_data, output_data, direction='FFTW_FORWARD', flags=('FFTW_MEASURE',), ) # Perform FFT computation using planning wisdom fft_object(input_data)
评论
0赞
8/18/2023
感谢您的澄清。但是,我对第二届会议的代码有疑问。是否没有必要删除该标志以确保不重新计算计划?FFTW_MEASURE
0赞
Loïc Reynier
8/18/2023
你确实可以使用旗帜来最大限度地发挥所保存的智慧的好处,避免不必要的计划。FFTW_WISDOM_ONLY
1赞
Loïc Reynier
8/18/2023
有关该主题的更多详细信息,您可以参考此问题和有关 SO 的相关评论。
评论