2013-01-14 3 views
1

Я хочу использовать fftw3 в потоках. Но код, вставленный в http://codepad.org/lIjdGF5z, вызывает ошибку «двойное освобождение или повреждение». Как правильно вызвать функции fftw3 в потоках. Благодаря! Вы можете скомпилировать код с помощью команды «g ++ test.cpp -lfftw3_threads -lfftw3 -lboost_thread»вызов fftw в программе с несколькими потоками

+0

Вы не должны создавать и уничтожать план каждый раз, когда выполняете БПФ. Просто сделайте это один раз. –

ответ

3

Я считаю, что вызов fftw_plan_dft_2d не является реентерабельным, что означает, что он не может быть вызван в нескольких потоках одновременно, даже если вы создавая разные планы. Единственными функциями fftw, которые являются потокобезопасными, являются варианты fftw_execute в соответствии с пунктом 2 документа Thread Safety page.

Кроме того, как сказал Пол Р. в комментариях, вы должны только создать план/с один раз в начале, а затем использовать их снова и снова. Это будет намного быстрее. Кроме того, согласно пункту 3 страницы документации по технике безопасности, вы можете использовать один и тот же план при нескольких одновременных вызовах до fftw_execute. Поэтому, если ваши преобразования имеют одинаковый размер, вам понадобится только один план для всех потоков.

+0

как насчет программы, вставленной на http://codepad.org/nHSAN1lJ. В потоке содержится только повторная программа fftw – user41635

+0

Работает ли она? Если нет, я не думаю, что вам нужно использовать интерфейс 'fftw_plan_many_dft' здесь. Это значит, что если у вас есть несколько 2D FFT, чтобы выполнить последовательность с одним вызовом 'fftw_execute'. Тот факт, что вы вызываете его с 'howmany == 1', означает, что вы по-прежнему выполняете только одно двумерное преобразование на' fftw_execute'. Вы можете использовать простой интерфейс 'fftw_plan_dft_2d'. –

+0

Как можно использовать один и тот же план в нескольких одновременных вызовах 'fftw_execute'? Поскольку план инкапсулирует его ввод/вывод, не даст ли вам либо неопределенные, либо, в лучшем случае, идентичные результаты? –

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