Matlab 多线程与并行计算

首先要区分一下并行计算与多线程的区别。并行计算是指 开启多核来进行同一个任务的计算。多线程是指调用资源来分别执行多个不同的任务。
Matlab 并行计算是在2012版本之后就从 matlabpool 命令改成了 parpool命令,网上有关并行计算的的资料还是挺多的。这里就不再说了。
Matlab在多线程方面用的就不多了。这里仅仅提供一个小的例子,一些更多的细节还是要去看官方文档的。

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

  • job : 即Matlab待完成的任务,job由一组 task(作业)组成。
  • task : 并行计算的基本单元,分配到Matlab worker执行
  • scheduler :负责管理Matlab 提交的job, 分配 task 到每一个 worker
  • worker: 是指工作单元,数目一般小于等于 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));
    end
    fclose(file_id);
    state = 1;
end

myplot.m

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

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

clc
clear
A = [1:10];
clust = parcluster('local');
job1 = createJob(clust); %开启一个job
createTask(job1,@myplot,1,{{1:10,10:10:100},{1:10,10:10:100},{1:10,10:10:100}});%给job1分配三个‘myplot’的task
createTask(job1,@mytxt,1,{A});%再给job1分配一个‘mytxt’的task
get(job1,'Tasks')
submit(job1);
wait(job1);
result_1 = job1.fetchOutputs;
result_1
delete(job1);

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

  • 2
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值