2

fftw3 をスレッドで使いたい。しかし、http://codepad.org/lIjdGF5zに貼り付けられたコードは、「二重解放または破損」エラーを引き起こします。スレッドで fftw3 ルーチンを正しく呼び出す方法。ありがとう!コマンド「g++ test.cpp -lfftw3_threads -lfftw3 -lboost_thread」でコードをコンパイルできます。

4

1 に答える 1

4

への呼び出しfftw_plan_dft_2dは再入可能ではないと思います。つまり、異なる計画を作成している場合でも、複数のスレッドで同時に呼び出すことはできません。スレッド セーフな fftw 関数は、ドキュメントのスレッド セーフティ ページfftw_executeのパラグラフ 2 によるバリアントのみです。

さらに、Paul R. がコメントで述べたように、計画は最初に 1 回だけ作成し、その後は何度も使用する必要があります。それははるかに高速になります。また、スレッド セーフティ ドキュメント ページのパラグラフ 3 によると、 への複数の同時呼び出しで同じプランを使用できますfftw_execute。したがって、変換が同じサイズの場合、すべてのスレッドに対して 1 つの計画のみが必要になります。

于 2013-01-14T14:36:25.160 に答える