Я использую FFTW 3.1.2 с Fortran для выполнения реальных, сложных и сложных для реальных БПФ. Отлично работает на одном потоке.
К сожалению, у меня возникают некоторые проблемы при использовании многопоточного FFTW
на компьютере с разделяемой памятью 32 CPU. У меня есть два плана,
один для 9 БПФ от реального к сложному и один для 9 БПФ от реального к сложному (размер
каждого реального поля: 512 * 512). Я использую Fortran, и я компилирую (используя ifort
) мой
код ссылки на следующие библиотеки:
-lfftw3f_threads -lfftw3f -lm -lguide -lpthread -mp
Программа, кажется, компилируется правильно, и функция sfftw_init_threads
возвращает ненулевое целочисленное значение, обычно 65527.
Однако, хотя программа работает отлично, она медленнее с 2
или больше тем, чем с одним. Команда top
показывает странную загрузку процессора
больше 100% (и гораздо больше, чем n_threads * 100). htop
Команда показывает, что один процессор (скажем, номер 1) работает на
100% нагрузка на программу, при этом ВСЕ остальные процессоры, в том числе
номер 1, работают над этой же самой программой, с 0% загрузкой, 0% памяти и 0 ВРЕМЯ.
Если кто-нибудь имеет представление о том, что здесь происходит ... большое спасибо!