How to create interleaved complex from real gpuArray in mex?

2 次查看(过去 30 天)
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!

采纳的回答

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

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 GPU CUDA and MEX Programming 的更多信息

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by