clFFT:计算重叠的 FFT
clFFT: Calculating overlapped FFTs
我想为 clFFT 创建批处理以计算 3 个长度为 256 的 FFT,其中 FFT 输入值重叠(FFT 重叠处理)
- 输入:276 个复数的一维数组
- 任务:计算 [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 计划,以便在一次通话中完成?
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 的批号。
我想为 clFFT 创建批处理以计算 3 个长度为 256 的 FFT,其中 FFT 输入值重叠(FFT 重叠处理)
- 输入:276 个复数的一维数组
- 任务:计算 [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 计划,以便在一次通话中完成?
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 的批号。