Estoy trabajando en un proyecto en Matlab donde tenemos que optimizar el rendimiento, y estaba pensando en paralelizar un par de llamadas a funciones que se hicieron desde un archivo .m.Multithreading con Matlab
La idea era simple, desde un archivo de Matlab (.m) llamar a un archivo compilado en C como MEX, ya partir de ese archivo C, cree un par de hilos y vuelva a llamar las funciones Matlab de cada hilo.
funciona La teoría, puedo crear los hilos, y también puedo llamar a la función de Matlab, el problema es que no puedo llamar a la función Matlab de la rosca:
//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]);
}
}
No tenemos ninguna restricción en esa opción cuando se trabaja con matlab? ¿Alguien ha intentado algo como esto?
Editar: ¿Hay alguna opción que no requiera Parallel Toolbox?
¿Qué código de MATLAB está tratando de paralelizar? – You
@rlbisbe: La API MEX no es segura para subprocesos: http://www.mathworks.com/support/solutions/en/data/1-V3B5T/index.html?solution = 1-V3B5T – Amro