How to create interleaved complex from real gpuArray in mex?

2 visualizaciones (últimos 30 días)
Hello, I'm using cufft to program a real-to-complex fft, but I'm not getting the correct result.
Here's my method:
The input is a real gpuArray, and I hope to use cufftExecC2C to obtain a complex gpuArray.
cufftExecC2C requires interleaved complex representation (real-imag-real-imag), and I'm using this function to obtain a complex gpuArray from two real gpuArrays. A_r is a 3-D single precision mxGPUArray.
A_r = mxGPUCreateFromMxArray(prhs[0]);
mxGPUArray * A_i = mxGPUCreateGPUArray(mxGPUGetNumberOfDimensions(A_r),
mxGPUGetDimensions(A_r),
mxGPUGetClassID(A_r),
mxREAL,
MX_GPU_INITIALIZE_VALUES);
mxGPUArray * C = mxGPUCreateComplexGPUArray(A_r, A_i);
My problem is that, is mxGPUCreateGPUArray generating an interleaved complex array?
( I'm aware that cufftExecR2C would be easier for this case, but it omits half of the matrix for hermitian symmetry, and I assume it's slower to recover the original matrix.)
Thanks for any advice!

Respuesta aceptada

Edric Ellis
Edric Ellis el 7 de Oct. de 2021
Yes, complex mxGPUArray data is always stored in interleaved-complex format, see this doc page for details.

Más respuestas (0)

Categorías

Más información sobre GPU CUDA and MEX Programming en Help Center y File Exchange.

Productos


Versión

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by