900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Matlab 多线程与并行计算

Matlab 多线程与并行计算

时间:2019-07-25 01:17:34

相关推荐

Matlab 多线程与并行计算

首先要区分一下并行计算与多线程的区别。并行计算是指 开启多核来进行同一个任务的计算。多线程是指调用资源来分别执行多个不同的任务。

Matlab 并行计算是在版本之后就从matlabpool 命令改成了 parpool命令,网上有关并行计算的的资料还是挺多的。这里就不再说了。

Matlab在多线程方面用的就不多了。这里仅仅提供一个小的例子,一些更多的细节还是要去看官方文档的。

利用 Matlab 进行并行计算时,还需要说明几个概念:

job : 即Matlab待完成的任务,job由一组 task(作业)组成。task : 并行计算的基本单元,分配到Matlab worker执行scheduler :负责管理Matlab 提交的job, 分配 task 到每一个 workerworker: 是指工作单元,数目一般小于等于 CPU的核数。lab是特殊的一个worker,lab之间可以进行数据通信。

因此,我们如果想要执行不同的程序或代码,方法有:开多个Matlab(最直接)把不同的程序写成 function ,分配给不同的task.

这里就试验一下第二个方法,就是同时进行画图与存数两个功能。由于下面的createTask函数的第二个参数只能是function,不支持脚本,所以有写了两个function(mytxt, myplot)。

mytxt.m

function state = mytxt(A)filename = 'C:\Users\Administrator\Desktop\haha.txt';%文件路径 + 文件名file_id = fopen(filename,'a+');for jj = 1:length(A)fprintf(file_id,'%.4f\r\n',A(jj));endfclose(file_id);state = 1;end

myplot.m

function state = myplot(x,y)plot(x,y)state = 1;end

主程序:给job1分配三个‘myplot’的task,一个‘mytxt’的task

clcclearA = [1:10];clust = parcluster('local');job1 = createJob(clust); %开启一个jobcreateTask(job1,@myplot,1,{{1:10,10:10:100},{1:10,10:10:100},{1:10,10:10:100}});%给job1分配三个‘myplot’的taskcreateTask(job1,@mytxt,1,{A});%再给job1分配一个‘mytxt’的taskget(job1,'Tasks')submit(job1);wait(job1);result_1 = job1.fetchOutputs;result_1delete(job1);

然后我们可以观察到后台运行程序,由五个 MATLAB.exe,就说明由 四个task和 一个 client 在运行。一般情况下,计算量非常大的时候才考虑开启并行,数据量比较小的时候,串行其实更省时间。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。