Cufft idist and odist not working as expected


I have a ragged array with multiple shaped 1D sequences

I am looking to make a batched 1D FFT on two 1D sequence that are contiguous but not adjacent.

        int rank = 1;         // 1D FFT
        int batch_size = 2;   // Number of rings to transform
        int n[] = {size};     // Size of each FFT
        int *inembed = NULL;  // Stride of input data
        int istride = 1;      // Distance between consecutive elements in the same batch
        int idist = 188;  // Distance between the starting points of two consecutive batches
        int *onembed = NULL;            // Stride of output data
        int ostride = 1;                // Distance between consecutive elements in the same batch
        int odist = 188;

        std::cout << "For ring " << i << " size is " << size << " dist is " << dist << std::endl;
        CUFFT_CALL(cufftMakePlanMany(plan, rank, n, inembed, istride, idist, onembed, ostride, odist,
                                     CUFFT_C2C, batch_size, &polar_worksize));

The size if 4 and the idist = odist is 188
Yet when I execute the plan, the first 8 elements are transformed, instead of the first 4 and the last 4 of my array.

Anyone have an idea how can I use this from the documentation :


input[ b * idist + x * istride ]

output[ b * odist + x * ostride ]

Thank you

The solution is to set inembed and onembed to anything which is a bit counter intuitive for a 1D transform

You might get better help with a short, complete example. You may wish to review the advanced data layout section of the cufft docs. which states:

Passing inembed or onembed set to NULL is a special case and is equivalent to passing n for each. This is same as the basic data layout and other advanced parameters such as istride are ignored.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.