У меня есть довольно привлекательная программа, которая использует внутренний алгоритм 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
EDIT
Я перенастроил FFTW для добавления отладки, используя следующие команды:
setenv CFLAGS "-fPIC -g -O0"
configure --enabled-shared --enable-float --enable-debug
make
make install
Когда программа имеет ошибку сегментации, она находится в случайном месте в методе fftwf_plan_dft_1d()
, однако трассировка стека всегда показывает, что находится внутри или ниже функции search
, которая вызывается mkplan
.