为什么将数据从MATLAB传递到mex如此之慢?

时间:2017-12-19 06:38:51

标签: c++ matlab matrix mex

我创建了这个MEX函数,它接受这样的参数:

toSolve(domain, model.one, model.two, model.three, model.four, bc, model.T, model.dt, [start model.five])

model是一个MATLAB struct,其中包含矩阵onetwothreefive和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需要永远?我做错了什么?

1 个答案:

答案 0 :(得分:3)

它可能是你花费时间的计算,而你没有快速看到print语句的原因是缓冲区没有被强制刷新(即实际写入屏幕)。有关详细信息,请参阅this question and answers

简而言之,如果你添加:

mexEvalString("drawnow;")

mexPrintf命令之后。如果您看到快速写入屏幕的文本,那么应该可以帮助您确认计算是否花费时间而不是将数据传递到MEX。