微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 使用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块,以便同时运行.

原文地址:https://www.jb51.cc/c/111694.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐