2015-04-09 3 views
0

Я запускаю свои коды на основе обертки 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.

ответ

2

Аргумент threads не thread. Вероятно, следует удалить лишние и недопустимые аргументы. Представьте, что выйдет и оставит вопрос на github?

+0

Weird ... Сообщение об ошибке –

+0

Thanks! После добавления 's' программа работает хорошо. Я также сообщил в Гитубе. Спасибо, что написал эту замечательную упаковку. Это экономит мне много времени. –

+0

Отлично, спасибо. :) –

Смежные вопросы