c – 使用Matlab进行多线程处理
发布时间:2020-12-16 03:22:11 所属栏目:百科 来源:网络整理
导读:我正在研究Matlab上的一个项目,我们必须优化性能,我正在考虑并行化一些由.m文件生成的函数调用. 这个想法很简单,从Matlab文件(.m)调用编译为MEX的C文件,并从该C文件创建几个线程并从每个线程回调matlab函数. 理论上有效,我可以创建线程,我也可以调用matlab函
我正在研究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<MAX_THREADS; i++) { CloseHandle(hThreadArray[i]); } } 使用matlab时,我们对该选项有任何限制吗? 编辑:有没有不需要Parallel Toolbox的选项? 解决方法
您只能从MATLAB主线程调用mx *和mex *函数.您可以编写多线程MEX文件,这些文件可以在低于mx接口的级别上完成工作.如果您需要多个MATLAB解释器,则需要多个MATLAB过程.一种方法是通过@You指出的并行计算工具箱.这为您提供PARFOR循环和SPMD块,以便同时运行.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |