Я запускаю свои коды на основе обертки PyFFTW для библиотеки FFTW3. В вызове функции плана PyFFTW существует параметр «поток», чтобы указать количество потоков для использования. Я использую фундаментального судьи, Монитор активности, чтобы узнать, работает ли многопоточность или нет. Оказывается, следующий код работает на одном CPU, даже когда я указываю thread = 4. Мой ноутбук - Mac с 8 ядрами. Вот мой код.PyFFTW многопоточность не работает
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(), компьютер, кажется, работает на одном процессоре (ЦП 99 использования%, тогда как ожидается, должно быть 400%). Я хочу, чтобы задача FFT была распределена между процессорами моего ноутбука.
Помимо попытки использования pyfftw, я попытался написать некоторые другие коды на C с OpenMP, и я вижу из Activity Activity, что использование ЦП выше 100%. Это означает, что код C работает на нескольких процессорах, и моя машина имеет многоядерную функцию.
Есть ли что-то, что я пропустил, чтобы включить многопоточность пистолета? Или я неправильно понимаю значение параметра?
Существует related problem.
Weird ... Сообщение об ошибке –
Thanks! После добавления 's' программа работает хорошо. Я также сообщил в Гитубе. Спасибо, что написал эту замечательную упаковку. Это экономит мне много времени. –
Отлично, спасибо. :) –