CUFFT provides cufftPlanMany to do 1D Fourier transform along the arbitrary axis, but now it doesn’t support the setting-up of non-contiguous input data. I want to transform a 2D matrix data[ny][ix] or *data (the matrix assembled in a C-style format) along the y-axis, if I don’t want to do so in a loop way, how can I program it by CUFFT or there is an alternative software to turn to which is compatible with FFTW?

I think that you can transpose your matrix first, call CUFFT, then transpose back.

Transpose operation is memory-bound and you can find a good solution in SDK.

You are right, actually I have done it in my program. But this method is hard to extend to 3D.

you can transpose any two dimensions in 3-D data, the same idea as transpose example in SDK.

suppose you have a 3-D array A[y][z] where x, y, z are nothing but index,

FFT on z is good,

FFT on y, you need to transpose (x,y,z) --> (x,z,y)

FFT on x, you need to transpose (x,y,z) --> (z,y,x)

both transpose operations have the same performance.