我正在为PyFFTW库运行基于FFTW3包装器的代码。在PyFFTW的计划函数调用中,有一个参数“线程”来指定要使用的线程数。我使用一个基本的判断,Activity,来判断多线程是否有效。事实证明,即使我指定了thread=4,以下代码也在一个CPU上运行。我的笔记本电脑是一个有8个核心的Mac。这是我的密码。
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, thread=n_cpu)
fftObj()当我运行fftObj()时,计算机似乎运行在一个CPU上(CPU使用率为99%,而预期为400%)。我想要的是让FFT任务分布在我的笔记本电脑上的CPU中。
除了尝试pyfftw之外,我还尝试用OpenMP用C编写了一些其他代码,我从Activity中看到,CPU使用率超过了100%。这意味着C代码运行在多个CPU上,而我的机器确实具有多核特性。
有什么是我错过了打开皮夫特的多线程吗?还是我误解了参数的含义?
有一个相关问题。
发布于 2015-04-10 06:40:36
论点是threads而不是thread。多余的和无效的论点也许应该被采纳。想想看在github上留下一个问题
https://stackoverflow.com/questions/29534959
复制相似问题