我想使用 FFTW 库计算自相关。当我的输入包含超过 18 亿个元素时,我无法创建计划。例如:
// 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);
一些信息:
- Linux 64 位,64GB 物理内存 + 64GB 交换
- FFTW 3.3.3 --enable-float
- 使用约 18 亿个元素,之前的代码有效,并且在计算过程中使用了大约 10-12GB 的 RAM(输入 + 一些 FFTW 临时数据???)
- 我也尝试过不合适或复杂到复杂的 FFT
- sizeof(size_t) == 8, sizeof(float) == 4, sizeof(fftwf_complex) == 8
我的代码有什么问题?使用 FFTW 时输入大小是否有上限?