【问题标题】:Why is passing data from MATLAB to mex so slow?为什么将数据从 MATLAB 传递到 mex 这么慢?
【发布时间】:2017-12-19 06:38:51
【问题描述】:

我创建了这个 MEX 函数,它接受如下参数:

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

其中model 是一个 MATLAB struct,其中包含矩阵 onetwothreefive,以及一个具有三个矩阵的 1x3 单元格 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 需要很长时间?我做错了什么?

【问题讨论】:

    标签: c++ matlab matrix mex


    【解决方案1】:

    这可能是您的计算需要时间,而您没有快速看到打印语句的原因是由于缓冲区没有被强制刷新(即实际写入屏幕)。请参阅this question and answers 了解更多信息。

    简而言之,如果您添加:

    mexEvalString("drawnow;")
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      相关资源
      最近更新 更多