如何在MATLAB中进行线程编程?

4

如何在MATLAB中进行线程处理?我想同时运行一个函数在两个变量上,应该怎么做?


3
@hai: 请不要重复发布问题。如果您之前的问题([admin: 现在这个问题])没有得到您满意的答案,那么您应该编辑它以使您的问题更清晰明确。 - gnovice
3个回答

7

并行工具箱有一些工具可能会对您有所帮助。以下是从Matlab帮助中复制的一些示例:

matlabpool    % Use default parallel configuration
spmd          % By default uses all labs in the pool
    INP = load(['somedatafile' num2str(labindex) '.mat']);
    RES = somefun(INP);
end

然后,实验室中RES的值可以从客户端访问,例如从实验室1访问为RES{1},从实验室2访问为RES{2},以此类推。

您还可以查看parfor作为for的简单并行替代。希望这能帮到您,即使它不完全是您想要的。


在Matlab R2015a中,matlabpool函数已被移除,您需要改为调用parpool函数。 - hmfarimani

1

我不相信MATLAB有任何内置的多线程支持。这来自我最近与同事的一次对话以及快速谷歌搜索

希望这可以帮到你。


1
是的,这是使用Matlab制作生产应用程序时遇到的问题之一。 - mmr
1
随着每个新版本的发布,越来越多的Matlab本地函数都是多线程的,以利用多核CPU。但是像Matlab这样的工具的整个哲学都反对让用户亲手操作线程等。 - High Performance Mark
2
从Matlab帮助中得知:有“隐式多进程”可以利用内置的多线程函数,或者使用并行计算工具箱进行“显式多进程”。 - Adrien

0

您可以使用MEX文件和std::thread来完成(请参见此处)。

我尚未尝试从MEX文件调用mexEvalString,很可能会导致运行时错误或在执行期间冻结MATLAB。但是,如果您可以在C++中编写该特定代码片段,则可能是您要寻找的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接