我想在mex文件中使用OpenMP並行化我的Matlab代碼的一部分。我想並行在theMatlab代碼的段是:如何使用Mexcallmatlab調用用戶定義的函數?
對於i = 1:
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:N
D(:, i) = CALC(A, B(:,i), C(i));
end
我以並行它寫這函數我寫了。我的挑戰是如何使用Mexcallmatlab調用mex文件的CALC函數,以便它可以在mex文件中並行執行它,並將D中每列的元素(即D(:,i))返回給我Matlab代碼。
對不起,lenghty問題。任何幫助我能在此將得到高度讚賞。
我不會建議在循環中調用'mexCallMATLAB',更不用說試圖用OpenMP來實現了。使用MEX的好處是如果您重新實現'CALC '本身。 – chappjc
好的。讓我試着去實現它。謝謝@chappjc – Amanda