Имам доста ангажираща програма, която използва вътрешен 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
.
fftwf_plan_dft_1d
, дебъгерът спира внезапно без грешка или състояние и ако прегледам основен файл, той не показва нищо. - person steveo225   schedule 27.09.2011fftwf_plan_dft_1d()
и първите редове от нейното внедряване. - person wallyk   schedule 27.09.2011i
еsize_t
,-i
няма да ви даде резултата, който очаквате. И като гледам заглавкатаfftw3.h
, виждам, че очакват комплекс C99, от нещо със същото оформление. Сигурни ли сте, че 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