Tôi đang làm việc trên một dự án trên Matlab, nơi chúng tôi phải tối ưu hóa hiệu suất và tôi đã suy nghĩ về việc song song một vài cuộc gọi hàm được tạo từ tệp .m. Ý tưởng rất đơn giản, từ một tệp Matlab (.m) gọi một tệp C được biên dịch là MEX và từ tệp C đó, tạo một vài luồng và gọi lại các hàm matlab từ mỗi luồng.Đa luồng với Matlab
Lý thuyết hoạt động, tôi có thể tạo ra các chủ đề, và tôi cũng có thể gọi hàm matlab, vấn đề là tôi không thể gọi hàm MATLAB từ thread:
//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]);
}
}
Liệu chúng ta có bất kỳ hạn chế về tùy chọn đó khi làm việc với MATLAB? Có ai đó đã thử một cái gì đó như thế này?
Chỉnh sửa: Có tùy chọn nào không yêu cầu Hộp công cụ song song không?
Bạn đang cố gắng song song mã MATLAB nào? – You
@rlbisbe: API MEX không an toàn cho luồng: http://www.mathworks.com/support/solutions/en/data/1-V3B5T/index.html?solution = 1-V3B5T – Amro