在大文件上执行FFT的最快方法是什么?

时间:2018-08-08 05:44:58

标签: c++ fft large-data intel-mkl

我正在从事一个C ++项目,该项目需要对大型2D栅格数据(10至100 GB)执行FFT。尤其是,对每列应用FFT时,性能会很差,因为每列的元素在内存中都不连续(以数据宽度的跨度放置)。

目前,我正在这样做。由于数据无法容纳在内存中,因此我将几列(即n列)读入内存,其方向已换位(以便文件中的一列成为内存中的一行),并使用外部库(MKL)。我读了(freadn像素,移至下一行({fseek多达width - n),读了n像素,跳至下一个排等等。当对列块执行操作(FFT)时,我以相同的方式将其写回到文件中。我写n像素,跳到下一行,依此类推。这种读写文件的方式花费了太多时间,所以我想找到一种增强方式。

我已经考虑过预先转置整个文件,但是整个过程包括行主要和列主要的FFT操作,转置不会带来好处。

我想听听有关对大数据进行这种列主要操作的任何经验或想法。任何与FFT或MKL相关的建议也将有所帮助。

2 个答案:

答案 0 :(得分:0)

为什么不同时处理转置数据和未转置数据?这将增加内存需求x2,但这可能是值得的。

答案 1 :(得分:0)

考虑切换到Hadamard转换。作为完整的IPS,该变换不提供乘法运算,因为变换中的所有系数均为正或负1。如果需要在傅立叶基础上进行结果转换,则矩阵乘法将更改基数。