我在使用pyFFTW时遇到了困难。我正在使用macOS 10.12并使用pip3使用自制软件和afterfwards安装pyFFTW安装了python3,numpy和fftw。
事实上,我可以使用pyFFTW和文档中的示例:但它总是只使用一个核心,从活动监视器可以看出。
我将这两个例子用于我的测试:这个例子来自https://hgomersall.github.io/pyFFTW/sphinx/tutorial.html。我还将这个例子放大到长度为2 ^ 14的向量,以便看到效果,遗憾的是没有。
import pyfftw
import scipy.signal
import numpy
from timeit import Timer
a = pyfftw.empty_aligned((128, 64), dtype='complex128')
b = pyfftw.empty_aligned((128, 64), dtype='complex128')
a[:] = numpy.random.randn(128, 64) + 1j*numpy.random.randn(128, 64)
b[:] = numpy.random.randn(128, 64) + 1j*numpy.random.randn(128, 64)
t = Timer(lambda: scipy.signal.fftconvolve(a, b))
print('Time with scipy.fftpack: %1.3f seconds' % t.timeit(number=100))
# Monkey patch fftpack with pyfftw.interfaces.scipy_fftpack
scipy.fftpack = pyfftw.interfaces.scipy_fftpack
scipy.signal.fftconvolve(a, b) # We cheat a bit by doing the planning first
# Turn on the cache for optimum performance
pyfftw.interfaces.cache.enable()
print('Time with monkey patched scipy_fftpack: %1.3f seconds' %
t.timeit(number=100))
这是来自PyFFTW multithreading not working。请注意,我更正了示例以使用正确的修饰符“threads”。
import pyfftw
n_cpu = 4
flags = ('FFTW_MEASURE','FFTW_DESTROY_INPUT')
x_buffer = pyfftw.n_byte_align_empty((8192,8192,), 16, 'complex128')
f_buffer = pyfftw.n_byte_align_empty((8192,8192,), 16, 'complex128')
fftObj = pyfftw.FFTW(x_buffer, f_buffer, axes=(-2,-1), direction='FFTW_FORWARD', flags=flags, threads=n_cpu)
fftObj()
我很感激任何提示如何有意义地调试我的安装并使多线程工作。