我正在研究Matlab上的一个项目,我们必须优化性能,我正在考虑并行化一些由.m文件生成的函数调用.
这个想法很简单,从Matlab文件(.m)调用编译为MEX的C文件,并从该C文件创建几个线程并从每个线程回调matlab函数.
理论上有效,我可以创建线程,我也可以调用matlab函数,问题是我不能从线程中调用matlab函数:
//Global variables
mxArray **g_plhs;
mxArray **g_prhs;
int g_nlhs;
int g_nrhs;
//Thread function
DWORD WINAPI my_function( LPVOID lpParam )
{
mexCallMATLAB(g_nlhs,g_plhs,g_nrhs,g_prhs,"matlab_function");
return 0;
}
//Main function
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]) {
DWORD dwThreadIdArray[MAX_THREADS];
HANDLE hThreadArray[MAX_THREADS];
g_plhs = plhs;
g_prhs = prhs;
g_nlhs = nlhs;
g_nrhs = nrhs;
hThreadArray[0] = CreateThread(
NULL,my_function,NULL,&dwThreadIdArray[0]);
WaitForMultipleObjects(MAX_THREADS,hThreadArray,TRUE,INFINITE);
for(i=0; i
{
CloseHandle(hThreadArray[i]);
}
}
使用matlab时,我们对该选项有任何限制吗?
有人试过这样的事吗?
编辑:有没有不需要Parallel ToolBox的选项?