我想为clFFT创建一个批次,以计算长度为256的3个FFT,其中FFT输入值重叠(FFT重叠处理(
- 输入:276个复数的1D数组
- 任务:计算[0.255]、[10.265]、[20..275]的FFT
- 输出:3x 256 FFT=768个值
如果我在哪里写一个循环,它看起来像这样:
std::complex<float> *input;
for (int i=0; i<3; ++i) {
calcFFT(input, input+256);
input += 10;
}
IOW:fft计算256个输入值,然后推进10个值并计算接下来的256个值。
如何设置clFFT计划,以便在一次调用中发生这种情况?
clfftStPlanIn/OutStride指定了各个值之间的距离,因此这是错误的参数。
看起来clfftStPlanDistance可能正是我所需要的。医生说:
CLFFTAPI clfftStatus clfftStPlanDistance(clfftPlanHandleplHandle,size_t iDist,size_t oDist(;
间距是FFT阵列中每个离散阵列对象之间的距离。这只是使用*对于clfftDim中的"array"维度;参见clfftStPlanDimension(单位为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;
其中CCD_ 2是要计算的FFT的批号。