【发布时间】:2011-10-09 04:49:17
【问题描述】:
我正在 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,
0,
my_function,
NULL,
0,
&dwThreadIdArray[0]);
WaitForMultipleObjects(MAX_THREADS, hThreadArray, TRUE, INFINITE);
for(i=0; i<MAX_THREADS; i++)
{
CloseHandle(hThreadArray[i]);
}
}
在使用 matlab 时,我们对该选项有任何限制吗? 有人试过这样的吗?
编辑:有没有不需要 Parallel Toolbox 的选项?
【问题讨论】:
-
您要并行化哪些 MATLAB 代码?
-
@rlbisbe:MEX API 不是线程安全的:mathworks.com/support/solutions/en/data/1-V3B5T/…
标签: c multithreading matlab mex