所以我把一个5乘6的矩阵传递给我的mex函数。(部分)我的代码:
const mxGPUArray* A;
A=mxGPUCreateFromMxArray(prhs[0]);
const mwSize* img_size = mxGPUGetDimensions(A);
const int M=img_size[0];
const int N=img_size[1];
const int O=img_size[2];
const int P=mxGPUGetNumberOfDimensions (A);
mexPrintf("\n %i %i %i %i \n",M,N,O,P);
我的输出是:
五零六二
如果把P设为img_size[3],我得到0,img_size[0到3]=5,0,6,0
即使尺寸的数量根据:
mxGPUGetNumberOfDimensions (A);
是
2
The documentation没有提到这件事。这是为什么?mwsize实际上不等同于size_t或其他东西吗?是指记忆音高吗?我真的在用一个4D平面阵列吗?
最佳答案
首先我要说的是,我从未使用过Matlab mex接口,然而。。。。
很明显,在mxGPUGetDimensions
返回的内容和您为mwSize
编写的代码之间存在大小不匹配的问题。如果返回值是64位整数(例如64位平台上的大小),而不是32位,则得到的结果实际上是[5,0,6,0]。mwSize
的Matlab documentation表示如下:
默认情况下,mwSize相当于C中的int
-大口径开关,mwSize等于C中的size_t。
因为我对Matlab一无所知,所以除了(a)确保编译器/工具链正在构建64位代码,以及(b)尝试使用largeArrayDims
选项之外,我无法告诉您如何解决这个问题。
如果这些都不起作用,我建议联系Mathworks支持部门。无论是在您的构建环境中,还是在Matlab本身中,都有明显的缺陷。
关于c - mxGPU GetDimensions返回一个在尺寸大小之间为零的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23115174/