У меня есть довольно интересная программа, которая использует собственный алгоритм БПФ. Недавно я решил попробовать использовать 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
.
fftwf_plan_dft_1d
, отладчик внезапно останавливается без ошибок или статуса, и если я просматриваю основной файл, он ничего не показывает. - person steveo225   schedule 27.09.2011fftwf_plan_dft_1d()
и первые строки его реализации. - person wallyk   schedule 27.09.2011i
являетсяsize_t
,-i
не даст вам ожидаемого результата. И посмотрев на шапкуfftw3.h
, вижу, что ожидают комплекс С99, чего-то с такой же компоновкой. Вы уверены, что std::complex имеет такой же макет/совместим? - person paercebal   schedule 27.09.2011type(C_PTR) function fftwf_plan_dft_1d(n,in,out,sign,flags) bind(c,name='fftwf_plan_dft_1d') import integer(C_INT), value :: n complex(C_FLOAT_COMPLEX), dimensions(*), intent(out) :: in
и т. д. Хотите еще? - person steveo225   schedule 27.09.2011float[2]
иstruct { float re, im; }
- person steveo225   schedule 27.09.2011ulimit -c(or -a?)
? Иногда, если размер файла дампа равен нулю, файл дампа не выгружается. - person Sriram   schedule 28.09.2011cd
в извлеченную папку и введитеCFLAGS='-g -O0' FFLAGS='-g -O0' ./configure
- person Daniel Trebbien   schedule 28.09.2011valgrind
приложением, и это не помогло, но я жаловался на те же области в FFTW. - person steveo225   schedule 28.09.2011