所以我将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);
我的输出是:
5 0 6 2
如果我将P设为img_size [3]我得到0,img_size [0到3] = 5,0,6,0
即使维度数量依据:
mxGPUGetNumberOfDimensions (A);
是
2
The documentation没有提及此事。为什么是这样? mwsize实际上与size_t不相同吗?它是指内存音调吗?我实际上是使用扁平4D阵列吗?
答案 0 :(得分:1)
好的,所以我添加了
-largeArrayDims
切换,现在值正确,即
img_size[0]
和
img_size[1]
对应正确的值。
答案 1 :(得分:1)
我必须先说明我之前从不使用Matlab mex界面,但是......
显而易见的是,mxGPUGetDimensions
返回的内容与代码用于mwSize
的内容之间的大小不匹配。如果返回值是64位整数(例如64位平台上的size_t)而不是32位,则得到[5,0,6,0]的结果实际为[5,6]。 mwSize
的{{3}}说明如下:
默认情况下,mwSize相当于C中的int。使用mex时 -largeArrayDims开关,mwSize等于C中的size_t。
因为我对Matlab一无所知,所以我不能告诉你如何解决这个问题(a)确保你的编译器/工具链正在构建64位代码,并且(b)尝试使用{{1}选项。
如果这些都不起作用,我建议您联系Mathworks支持。在构建环境或Matlab本身中,某些东西显然已被破坏。