我有一个非常复杂的程序,它使用内部 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。尝试了 2 种不同的编译器,g++ 4.1.1 和 icc 11.1。此外,核心文件文件没有任何意义:
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
。