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 多线程与并行计算_第1张图片
    Matlab 多线程与并行计算_第2张图片
    因此,我们如果想要执行不同的程序或代码,方法有:
  • 开多个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 在运行。一般情况下,计算量非常大的时候才考虑开启并行,数据量比较小的时候,串行其实更省时间。
Matlab 多线程与并行计算_第3张图片
Matlab 多线程与并行计算_第4张图片

你可能感兴趣的:(笔记,matlab,多线程)