2013-06-18 3 views
2

FFTW 라이브러리를 사용하여 자기 상관을 계산하고 싶습니다. 입력 내용이 ~ 1800ml 개가 넘는 경우 계획을 세울 수 없습니다. 예 :FFTW - 입력이 매우 큰 경우 FFT 계획을 만들지 못합니다.

// my input 
size_t size = 1024UL * 1024 * 1024 * 2; 
float * in = (float *) malloc(sizeof(float) * (size + 2)); 
assert(in); 

// insert values in input... in[0] to in[size -1] 

// I want to perform an inplace FFT (this should explains the "+2" in prev malloc) 
fftwf_complex * out = (fftwf_complex *) in; 

// create a real to complex FFT plan 
p = fftwf_plan_dft_r2c_1d(size, in, out, FFTW_ESTIMATE); 

// this assertion fails... 
assert(p); 

일부 정보 : ~ 1800mln 요소 앞의 코드 작품과

    64기가바이트 실제 RAM + 64 기가 바이트 스왑
  • FFTW 3.3.3 --enable-플로트와
  • 리눅스 64 비트
  • 약 10-12GB의 RAM이 계산 중에 사용됩니다 (입력 + 일부 FFTW 임시 데이터 ???)
  • FFT에서 복잡한 작업을 시도했습니다.
  • sizeof (size_t) == 8, sizeof (float) == 4, sizeof (fftwf_complex) == 8

내 코드에 어떤 문제가 있습니까? FFTW를 사용할 때 입력 크기에 상한선이 있습니까?

답변

4

fftw_plan fftw_plan_dft_r2c_1d(int n0, 
           double *in, fftw_complex *out, 
           unsigned flags); 

http://www.fftw.org/doc/Real_002ddata-DFTs.html

에서이 fftw_plan_dft_r2c_1d의 첫 번째 매개 변수의 유형이 int 아닌 size_t 것 같다. size 값이 크고 INT_MAX보다 커서 보이는 경우 함수에 음수 값을 전달할 가능성이 큽니다.

+1

당신 말이 맞습니다. 고맙습니다. INT_MAX 이상의 원소를 가진 입력에 FFTW를 사용할 방법이 있습니까? – ercoppa

+0

나는 같은 보트에있어 해결책을 찾았습니까? – Valmond

관련 문제