优化时频分布 - OpenCL。小FFT的序列

时间:2014-11-26 12:42:09

标签: time opencl fft frequency analysis

目前我正在尝试在ATI GPU设备上实施时频分析。基本上,我需要的是在通过初始数组移动的小(256-ish)窗口内运行FFT,并将每个计算的结果存储在矩阵[window_size,analysis_size]中。

我正在使用clFFT库,具有以下缓冲结构:

data_buffer ~ complex<float>[analysis_size]

out_buffer ~ complex<float>[window_size * (analysis_size-window_size)]

in_buffers ~ overlapped window_size subbuffers within data_buffer, for each calculation

out_buffers ~ window_size subbuffers within out_buffer, for each calculation. No overlapping.

在向in_buffer写入数据(clEnqueueWriteBuffer)之后(当所有in_buffers都应该被填充时)我只需用in_buffers [i],out_buffers [i]作为参数在循环中运行所需数量的clfftEnqueueTransforms。之后,我使用单个clEnqueueReadBuffer读取out_buffer中的所有内容。

所有困扰子缓冲区的都应该减少数据传输开销,但仍然......

IPP的FFT实现使同样的事情快两倍,这有点令人困惑。我究竟做错了什么?有没有可能的优化,或者可能是根本性的错误?谢谢你的帮助。

我的代码可通过that链接获取。

0 个答案:

没有答案