在 pyFFTW 中使用 FFTW Wisdom 来优化快速傅里叶变换

问题描述 投票:0回答:1

我正在开发一个项目,涉及使用 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)
python fft fftw pyfftw
1个回答
0
投票

FFTW 库中的“Wisdom”是指有关 FFT 计算最优计划的预先计算信息。

FFT 对象初始化后,会发生规划过程,在此期间存储智慧。因此,生成的 FFT 对象会根据所提供的输入数据的特定形状和类型进行微调。采用此规划的后续转换将自动重用存储的智慧。

因此,所有的智慧魔法都是在内部处理的。当希望使用特定的规划知识而不是重新计算它时,输出智慧就变得有意义。 作为一个例子,考虑一个场景,其中后续计算会话重用之前导出的智慧:

  1. 第一节;计算规划,并导出由此产生的智慧:

    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')
    
  2. 第二场;加载导出的智慧以加速优化过程:

    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)
    
© www.soinside.com 2019 - 2024. All rights reserved.