我正在开发一个项目,涉及使用 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)
FFTW 库中的“Wisdom”是指有关 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')
第二场;加载导出的智慧以加速优化过程:
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)