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!
0 件のコメント
採用された回答
Edric Ellis
2021 年 10 月 7 日
Yes, complex mxGPUArray data is always stored in interleaved-complex format, see this doc page for details.
0 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で GPU CUDA and MEX Programming についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!