社内の FFT アルゴリズムを使用するかなり複雑なプログラムがあります。私は最近、パフォーマンスを向上させるために FFTW を使用することにしました。FFTW がリンクして実行されることを確認するための簡単なテストとして、次のコードをアプリケーションの先頭に追加しましたが、実行すると、fftwf_plan
.
const size_t size = 1024;
vector<complex<float> > data(size);
for(size_t i = 0; i < size; ++i) data[i] = complex<float>(i, -i);
fftwf_plan plan =
fftwf_plan_dft_1d(size,
(fftwf_complex*)&data[0],
(fftwf_complex*)&data[0],
FFTW_FORWARD,
FFTW_ESTIMATE);
// ^ seg faults here ^
fftwf_execute(plan);
fftwf_destroy_plan(plan);
これを引き起こしているアイデアはありますか?
FFTW 3.3 を使用。g++ 4.1.1 と icc 11.1 の 2 つの異なるコンパイラを試しました。また、コア ファイル file は、重要なことを何も示していません。
Thread 1.1: Error at 0x00000000
Stack Trace: PC: 000000, FP=Hex Address
編集
次のコマンドを使用して、FFTW を再構成してデバッグを追加しました。
setenv CFLAGS "-fPIC -g -O0"
configure --enabled-shared --enable-float --enable-debug
make
make install
プログラムにセグメンテーション違反がある場合、それはメソッド内のランダムな場所にありfftwf_plan_dft_1d()
ますが、スタック トレースは、search
によって呼び出される関数内またはその下にあることを常に示していmkplan
ます。