如何使用Mexcallmatlab调用用户定义的函数?

时间:2015-06-12 13:55:50

标签: matlab mex

我试图在mex文件中使用OpenMP并行化我的一部分Matlab代码。我要并行化的Matlab代码中的部分是:

表示i = 1:n

    D(:, i) = CALC(A, B(:,i), C(i));

end

我写这篇文章是为了并行化:

 void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
size_t r,n,i,G;
double *A, *B, *C, *D;
int nthreads;
nthreads = 4;
A = mxGetPr(prhs[0]); /* first input matrix */
B = mxGetPr(prhs[1]); /* second input matrix */
C = mxGetPr(prhs[2]);/* third input matrix */
/* dimensions of input matrices */
r = mxGetN(prhs[0]);
n = mxGetN(prhs[1]);
plhs[0] = mxCreateDoubleMatrix(r,n, mxREAL);
D = mxGetPr(plhs[0]);
G=n/nthreads;
omp_set_num_threads(nthreads);
#pragma omp parallel for schedule (dynamic, G)
  {
   for i = 1 : n
        D(:, i) = CALC(A, B(:,i), C(i));
  }
 }

CALC是我写过的Matlab函数。我的挑战是如何使用Mexcallmatlab将CALC函数调用到mex文件中,以便它可以在我的mex文件中并行执行它,并将D的每一列的元素(即D(:,i))返回给我Matlab代码。

抱歉这个长长的问题。我能得到的任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

您需要使用多个MATLAB进程才能并行运行多个调用。最简单的方法是使用并行计算工具箱并使用parfor而不是for循环。