为什么将数据从 MATLAB 传递到 mex 如此缓慢?
Why is passing data from MATLAB to mex so slow?
我创建了这个接受如下参数的 MEX 函数:
toSolve(domain, model.one, model.two, model.three, model.four, bc, model.T, model.dt, [start model.five])
其中 model
是具有矩阵 one
、two
、three
、five
和 1x3 单元格的 MATLAB struct
four
具有三个矩阵。
每个矩阵都很大 (~500,000 x 3)。当我将数据传递到 mex 函数(即 toSolve
)时,它需要永远加载。在我的 mex 函数中,第一行是打印输出:
void
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
/* Start */
mexPrintf("\n About to start");
//CODE//
}
打印该行需要很长时间 About to start
。代码本身运行得非常快。我不确定为什么将数据传递到 mex 需要很长时间?我做错了什么?
可能是您的计算花费了时间,您没有快速看到打印语句的原因是缓冲区没有被强制刷新(即实际写入屏幕)。有关详细信息,请参阅 this question and answers。
简而言之,如果您添加:
mexEvalString("drawnow;")
在 mexPrintf
命令之后。如果您看到文本快速写入屏幕,这应该可以帮助您确认是不是计算需要时间,而不是将数据传递到 MEX。
我创建了这个接受如下参数的 MEX 函数:
toSolve(domain, model.one, model.two, model.three, model.four, bc, model.T, model.dt, [start model.five])
其中 model
是具有矩阵 one
、two
、three
、five
和 1x3 单元格的 MATLAB struct
four
具有三个矩阵。
每个矩阵都很大 (~500,000 x 3)。当我将数据传递到 mex 函数(即 toSolve
)时,它需要永远加载。在我的 mex 函数中,第一行是打印输出:
void
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
/* Start */
mexPrintf("\n About to start");
//CODE//
}
打印该行需要很长时间 About to start
。代码本身运行得非常快。我不确定为什么将数据传递到 mex 需要很长时间?我做错了什么?
可能是您的计算花费了时间,您没有快速看到打印语句的原因是缓冲区没有被强制刷新(即实际写入屏幕)。有关详细信息,请参阅 this question and answers。
简而言之,如果您添加:
mexEvalString("drawnow;")
在 mexPrintf
命令之后。如果您看到文本快速写入屏幕,这应该可以帮助您确认是不是计算需要时间,而不是将数据传递到 MEX。