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