为什么基于FFTW的pyfftw是慢numpy的fft()?

use*_*884 1 python fft

我运行测试sqript.它使用基于FFTW的numpy.fft.fft(),anfft.fft()和基于FFTW的pyfftw.interfaces.numpy_fft.fft().

这是我的测试脚本的来源:

import numpy as np
import anfft
import pyfftw
import time

a = pyfftw.n_byte_align_empty(128, 16, 'complex128')
a[:] = np.random.randn(128) + 1j*np.random.randn(128)

time0 = time.clock()
res1 = np.fft.fft(a)
time1 = time.clock()
res2 = anfft.fft(a)
time2 = time.clock()
res3 = pyfftw.interfaces.numpy_fft.fft(a,threads=50)
time3 = time.clock()

print 'Time numpy: %s' % (time1 - time0)
print 'Time anfft: %s' % (time2 - time1)
print 'Time pyfftw: %s' % (time3 - time2)
Run Code Online (Sandbox Code Playgroud)

我得到了这些结果:

Time numpy: 0.00154248116307
Time anfft: 0.0139805208195
Time pyfftw: 0.137729374893
Run Code Online (Sandbox Code Playgroud)

anfft库在巨大的数据上产生更快的fft,但是pyfftw呢?为什么这么慢?

Col*_*Two 5

在这种情况下,产生比CPU内核更多的线程不会增加性能,并且可能会因为切换线程的开销而使程序变慢.50个线程完全矫枉过正.

尝试使用一个线程进行基准测试