为什么将数据从 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 是具有矩阵 onetwothreefive 和 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。