Я работаю над проектом на Matlab, где мы должны оптимизировать производительность, и я думал о распараллеливании пары вызовов функций, которые были сделаны из файла .m.
Идея была проста: из файла Matlab (.m) вызвать файл C, скомпилированный как MEX, и из этого файла 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?