Многопоточный FFTW 3.1.2 на компьютере с общей памятью - PullRequest
2 голосов
/ 17 сентября 2009

Я использую 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 ВРЕМЯ.

Если кто-нибудь имеет представление о том, что здесь происходит ... большое спасибо!

Ответы [ 2 ]

2 голосов
/ 17 сентября 2009

Похоже, что это может быть проблема синхронизации. Вы можете получить этот тип поведения, если все потоки, кроме одного, заблокированы, например. семафором в библиотечный вызов.

Как вы звоните планировщику? Все ли ваши вызовы функций правильно синхронизированы? Вы создаете планы в одном потоке или во всех потоках? Я предполагаю, что вы читали заметки по потокобезопасности в документах FFTW ...;)

1 голос
/ 16 сентября 2010

Если ваши FFT не очень большие, автоматическая многопоточность в FFTW вряд ли будет выигрышной по скорости. Затраты на синхронизацию внутри библиотеки могут доминировать в выполняемых вычислениях. Вы должны профилировать различные размеры и посмотреть, где точка безубыточности.

...