【问题标题】:PyFFTW multithreading not workingPyFFTW多线程不起作用
【发布时间】:2015-04-09 09:40:42
【问题描述】:

我正在运行基于 FFTW3 库的 PyFFTW 包装器的代码。在 PyFFTW 的计划函数调用中,有一个参数“thread”来指定要使用的线程数。我使用一个基本判断,活动监视器来判断多线程是否有效。事实证明,即使我指定 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 Monitor 看到 CPU 使用率高于 100%。这意味着 C 代码在多个 CPU 上运行,而我的机器确实具有多核功能。

在打开 pyfftw 的多线程时我有什么遗漏的吗?还是我误解了参数的含义?

有一个related problem

【问题讨论】:

    标签: python multithreading pyfftw


    【解决方案1】:

    参数是threads 而不是thread。可能应该选择多余和无效的论点。想在github 上留下问题吗?

    【讨论】:

    • 谢谢!添加“s”后,程序运行良好。我也在 Github 上报道过。感谢您编写这个出色的包装。它为我节省了很多时间。
    猜你喜欢
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2014-04-30
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多