clFFT:计算重叠的 FFT

clFFT: Calculating overlapped FFTs

我想为 clFFT 创建批处理以计算 3 个长度为 256 的 FFT,其中 FFT 输入值重叠(FFT 重叠处理)

如果我在哪里写一个循环,它看起来像这样:

std::complex<float> *input;

for (int i=0; i<3; ++i) {
   calcFFT(input, input+256);
   input += 10;
}

IOW:fft 计算 256 个输入值,然后前进 10 个值并计算接下来的 256 个值。

如何设置 clFFT 计划,以便在一次通话中完成?

clfftSetPlanIn/OutStride 指定了各个值之间的距离,因此这是错误的参数。

看起来 clfftSetPlanDistance 可能是我需要的。医生说:

CLFFTAPI clfftStatus clfftSetPlanDistance( clfftPlanHandle plHandle, size_t iDist, size_t oDist );

Pitch is the distance between each discrete array object in an FFT array. This is only used * for 'array' dimensions in clfftDim; see clfftSetPlanDimension (units are in terms of clfftPrecision)

我觉得很困惑。

是的,clfftSetPlanDistance是正确的API使用。在示例中,我将不得不使用

cllSetPlanDistance(plan, 10, 256);

计算步长为 10 的 FFT。

这将生成 OpenCL 代码,其中第一个 FFT 索引的全局偏移计算如下:

// Inside the generated   fft_fwd   OpenCL function
    iOffset = (batch/32)*10 + (batch%32)*8;

其中 batch 是要计算的 FFT 的批号。