I have a 4D array of dimensions (N, 128, 128, 4)
and I want to perform a 2D FFT for the two middle dimensions. My question: is it possible to do this with the xxxPlanMany()
function from FFTW/cuFFT/hipFFT as a single call?
As a simpler example, if I have 3D an array of size (128, 128, 4)
, I can construct an FFT plan in the following way using HIP (whether this is FFTW/cuFFT/hipFFT doesn't matter, these all share the same interface):
hipfftHandle plan {};
int rank[] {128, 128};
hipfftPlanMany(
&plan, 2, rank,
rank, 4, 1,
rank, 4, 1,
HIPFFT_Z2Z, 4
);
This will perform 4, 2D transformations of size 128 x 128. However, for the larger 4D array of size (N, 128, 128, 4)
, I would need to call this plan N
times if I were to use this plan.
Is there a way to construct a plan which does the full 4 * N
FFTs without looping?