本文讲一下matlab中的并行方法与技巧,这里我们不涉及GPU加速,主要考虑for循环并行和数据并行。分为以下几个板块:

怎么并行?

parfor vs. SPMD

注意事项及经验总结

如何并行?

Request a number of workers;

Issue the normal command to run the program. The client program will call on the workers as needed;

Release the workers;

具体到代码:

matlabpool local 2;

%parallel program

matlabpool close

其中2是core数目,注意2是core数。你的电脑如果是双核四线程的,那么只能申两个(而非4个)matlab local pool。

具体实现parallel program呢,主要是通过parfor(parallel for)和SPMD(single program, multiple data)完成的。

parfor vs. SPMD

2.1 什么时候用parfor

parfor只用于matlab并行循环。当你需要简单计算的多次循环迭代时,例如蒙特卡洛(Monte Carlo)模拟,parfor循环就很有用。parfor将循环迭代分组,那么每个worker执行迭代的一部分。当迭代耗时很长的时候parfor循环也是有用的,因为workers可以同时执行迭代。

注意当循环中有迭代依赖其他迭代的结果时不应该使用parfor循环。每个迭代都必须不依赖其他迭代。由于parfor循环内有通信消耗,当只有小数量的简单计算时使用parfor可能得不到什么好处。

c = 1:10;

a = ones(10,1);

tic

parfor i = 1:length©

a(i)= a(i)+ c(i);

end

toc

fprintf(’%d\n’,a);

2.2 什么时候用SPMD(Single Program/Multiple Data)单程序多任务进行任务并行

Spmd中的“Single program”方面指的是同一段代码运行在不同的多个lab上。你在一个Matlab客户端上运行一个程序,被标志为spmd模块的其他部分运行在其他lab上。当这些块运行完毕后,你的程序继续在客户端运行。 “Multiple data”方面指的是虽然spmd语句在所有的lab上运行相同的代码,但每一个lab可以有不同的,独有的数据。所以多数据集可以在多个lab上同时被容纳。一下是我总结的SPMD使用的两个场景:

The “single program” aspect of spmd means that the identical code runs on multiple labs. 就是说同一段程序应用于不同的样本(数据),所以一般针对随机抽样的并行,如

%% SPMD

%example 1

spmd

A = rand(3,2); %generate a matrix A for each lab(worker)

end

for i = 1:length(A)

figure; imagesc(A{i});

end

%example 2

a = 3;

b = 4;

spmd

c = labindex();

d = c+a;

end

c{2} = 5;

spmd

f = c*b;

end

for i = 1:length(f)

fprintf(’%d\t’,f{i});%access the value of each lab

end

另外,SPMD也可以用于可替代parfor的块并行,在不同lab(worker)上对相同或不同的数据执行不同的并行操作,说起来有些拗口,具体看一下例子就明白了,下面我写的example3,4分别针对在不同lab上对相同数据和不同数据执行不同操作。它们都可以用parfor代替,对吧,这里我就不写了,相信大家的能力。。

%example3 - deal with same Data by different parameters

%add different values to same array Data

Data = 1:100;

spmd

switch labindex

case 1

Data = Data+1;

case 2

Data = Data+2;

end

end

% print Data{1} & Data{2} for checking

%example4

%add different values for different parts of array Data

% [1:50]+1

% [51:100]+2

spmd

if labindex == 1

Data(1:50) = Data(1:50)+1;

else

Data(51:100) = Data(51:100)+2;

end

end

以上是我对spmd和parfor的理解,欢迎补充指正,其他关于spmd vs. parfor的可以参考这个帖子。

2.3 Composite类型

spmd中每个lab返回值以composite存储,如上面[code]example 1中的f就是以composite的形式展现。f{i}为第i个lab的返回值。最开始我们也可以创建Composite对象并进行初始化赋值。

f = Composite(2);

注意事项及经验总结

注意事项:

parfor中慎用(最好勿用)eval幅值。

一个程序并行时要共享内存,而eval语句可能使程序进入错误的workspace,因此不要用eval,改用不同index赋值。

matlabpool local 2;

c = 1:5;

parfor i = 1:length©

a(i) = c(i);

end

parfor循环不能很好利用所有处理器怎么办?

是这样,

parfor i = 1:4

end

就只能用4个处理器,而如果不加这个parfor可能matlab自身的负载均衡能够更好地利用CPU。这里我是开起来3个matlab,比如服务器上有12个核。我就给每个matlab分配4个core(>>matlabpool local 4),每个程序里有一个parfor i = 1:4. 这样就可以用起来12个核。我知道这样好暴力……囧,有人知道正解的话指条明路吧。。

parfor,spmd不可以相互或者自身嵌套。

parfor使用有很多约束,比如for循环内的表达式需要显式表达(透明性),不依赖前项。如

parfor i = 3:10

f(i) = f(i-1)+f(i-2);

end

是不行滴。。

欢迎留言其他并行技巧和方法,谢谢!

Reference:

MATLAB官网——Parallel Computing Toolbox

详细讲解并行用法(貌似阿拉伯人写的……o(╯□╰)o)

详细并行代码

多核计算平台中MATLAB并行计算

Parallel Computing Toolbox User’s Guide

如何并行?

Request a number of workers;

Issue the normal command to run the program. The client program will call on the workers as needed;

Release the workers;

具体到代码:

matlabpool local 2;

%parallel program

matlabpool close

其中2是core数目,注意2是core数。你的电脑如果是双核四线程的,那么只能申两个(而非4个)matlab local pool。

具体实现parallel program呢,主要是通过parfor(parallel for)和SPMD(single program, multiple data)完成的。

parfor vs. SPMD

2.1 什么时候用parfor

parfor只用于matlab并行循环。当你需要简单计算的多次循环迭代时,例如蒙特卡洛(Monte Carlo)模拟,parfor循环就很有用。parfor将循环迭代分组,那么每个worker执行迭代的一部分。当迭代耗时很长的时候parfor循环也是有用的,因为workers可以同时执行迭代。

注意当循环中有迭代依赖其他迭代的结果时不应该使用parfor循环。每个迭代都必须不依赖其他迭代。由于parfor循环内有通信消耗,当只有小数量的简单计算时使用parfor可能得不到什么好处。

c = 1:10;

a = ones(10,1);

tic

parfor i = 1:length©

a(i)= a(i)+ c(i);

end

toc

fprintf(’%d\n’,a);

2.2 什么时候用SPMD(Single Program/Multiple Data)单程序多任务进行任务并行

Spmd中的“Single program”方面指的是同一段代码运行在不同的多个lab上。你在一个Matlab客户端上运行一个程序,被标志为spmd模块的其他部分运行在其他lab上。当这些块运行完毕后,你的程序继续在客户端运行。 “Multiple data”方面指的是虽然spmd语句在所有的lab上运行相同的代码,但每一个lab可以有不同的,独有的数据。所以多数据集可以在多个lab上同时被容纳。一下是我总结的SPMD使用的两个场景:

The “single program” aspect of spmd means that the identical code runs on multiple labs. 就是说同一段程序应用于不同的样本(数据),所以一般针对随机抽样的并行,如

%% SPMD

%example 1

spmd

A = rand(3,2); %generate a matrix A for each lab(worker)

end

for i = 1:length(A)

figure; imagesc(A{i});

end

%example 2

a = 3;

b = 4;

spmd

c = labindex();

d = c+a;

end

c{2} = 5;

spmd

f = c*b;

end

for i = 1:length(f)

fprintf(’%d\t’,f{i});%access the value of each lab

end

另外,SPMD也可以用于可替代parfor的块并行,在不同lab(worker)上对相同或不同的数据执行不同的并行操作,说起来有些拗口,具体看一下例子就明白了,下面我写的example3,4分别针对在不同lab上对相同数据和不同数据执行不同操作。它们都可以用parfor代替,对吧,这里我就不写了,相信大家的能力。。

%example3 - deal with same Data by different parameters

%add different values to same array Data

Data = 1:100;

spmd

switch labindex

case 1

Data = Data+1;

case 2

Data = Data+2;

end

end

% print Data{1} & Data{2} for checking

%example4

%add different values for different parts of array Data

% [1:50]+1

% [51:100]+2

spmd

if labindex == 1

Data(1:50) = Data(1:50)+1;

else

Data(51:100) = Data(51:100)+2;

end

end

以上是我对spmd和parfor的理解,欢迎补充指正,其他关于spmd vs. parfor的可以参考这个帖子。

2.3 Composite类型

spmd中每个lab返回值以composite存储,如上面[code]example 1中的f就是以composite的形式展现。f{i}为第i个lab的返回值。最开始我们也可以创建Composite对象并进行初始化赋值。

f = Composite(2);

注意事项及经验总结

注意事项:

parfor中慎用(最好勿用)eval幅值。

一个程序并行时要共享内存,而eval语句可能使程序进入错误的workspace,因此不要用eval,改用不同index赋值。

matlabpool local 2;

c = 1:5;

parfor i = 1:length©

a(i) = c(i);

end

parfor循环不能很好利用所有处理器怎么办?

是这样,

parfor i = 1:4

end

就只能用4个处理器,而如果不加这个parfor可能matlab自身的负载均衡能够更好地利用CPU。这里我是开起来3个matlab,比如服务器上有12个核。我就给每个matlab分配4个core(>>matlabpool local 4),每个程序里有一个parfor i = 1:4. 这样就可以用起来12个核。我知道这样好暴力……囧,有人知道正解的话指条明路吧。。

parfor,spmd不可以相互或者自身嵌套。

parfor使用有很多约束,比如for循环内的表达式需要显式表达(透明性),不依赖前项。如

parfor i = 3:10

f(i) = f(i-1)+f(i-2);

end

是不行滴。。

欢迎留言其他并行技巧和方法,谢谢!

Reference:

MATLAB官网——Parallel Computing Toolbox

详细讲解并行用法(貌似阿拉伯人写的……o(╯□╰)o)

详细并行代码

多核计算平台中MATLAB并行计算

Parallel Computing Toolbox User’s Guide

matlab算例并行教程,Matlab并行编程方法相关推荐

  1. matlab中右三角形方向,《有限元基础教程》_【MATLAB算例】4.7.1(2) 基于3节点三角形单元的矩形薄板分析(Triangle2D3Node)...

    [MATLAB 算例]4.7.1(2) 基于3节点三角形单元的矩形薄板分析(T riangle2D3Node) 如图4-20所示为一矩形薄平板,在右端部受集中力100 000F N =作用,材料常数为 ...

  2. matlab patch 六面体,《有限元基础教程》_【MATLAB算例】4.8.2(1) 基于8节点六面体单元的空间块体分析(Hexahedral3D8Node)...

    [MATLAB 算例]4.8.2(1) 基于8节点六面体单元的空间块体分析(Hexahedral3D8Node) 如图4-23所示的一个空间块体,在右端部受两个集中力F 作用,其中的参数为: 1051 ...

  3. 五杆桁架matlab有限元分析,《有限元基础教程》_【MATLAB算例】3.2.5(2)__四杆桁架结构的有限元分析(Bar2D2Node)...

    [MATLAB算例]3.2.5(2)四杆桁架结构的有限元分析(Bar2D2Node) 如图3-8所示的结构,各个杆的弹性模量和横截面积都为42 E N mm =?, 29.510/ 2 =.试基于MA ...

  4. matlab 高斯迭代法求解,高斯迭代法matlab算例

    Matlab 线性方程组的迭代解法 Gauss-Seidel 迭代法 Matlab 线性方程组的迭代解法 Gauss-Seidel 迭代法实验报告 1.熟悉 Gauss-Seidel 迭代法,并编写 ...

  5. 模糊控制matlab算例,matlab模糊逻辑工具箱

    基本FIS编辑器(MATLAB模糊逻辑工具箱函数)_IT/计算机_专业资料.基本FIS编辑器 MATLAB模糊逻辑工具箱函数 基本FIS 编辑器函数 fuzzy 格式 fuzzy %弹出未定义的基本 ...

  6. matlab基础与实例教程,MATLAB基础与实例教程

    系统全面,实例丰富 考虑到Matlab进行仿真和运算分析时的基础知识和实践操作,讲解从基础的变量.函数.数据类型等入手,涉及到数学分析.图形可视化.Simulink仿真.文件读写等,全面地介绍了Mat ...

  7. Bootstrap方法(参数和非参数Bootstrap方法)、Matlab算例

    非参数Bootstrap方法 设总体的分布FFF未知,但按放回抽样的方法抽取了一个容量为nnn的样本,称为Bootstrap样本或称为自助样本.独立地取多个Bootstrap样本,利用这些样本信息对总 ...

  8. 【机会约束、鲁棒优化】具有排放感知型经济调度中机会约束和鲁棒优化研究【IEEE6节点、IEEE118节点算例】(Matlab代码实现)

  9. matlab求函数极值教程,MATLAB程序设计教程(7)—MATLAB解方程与函数极值

    MATLAB程序设计教程(7)--MATLAB解方程与函数极值 第7章MATLAB解方程与函数极值 7.1  线性方程组求解 7.2  非线性方程数值求解 7.3  常微分方程初值问题的数值解法 7. ...

最新文章

  1. AI 一分钟 | 谷歌发布72量子比特处理器,或将为机器学习应用提供加速;百度已经发起对景驰撤诉,但不会对王劲撤诉
  2. 9月,最值得看的30篇肠道健康文献!
  3. Openstack Nova 源码分析 — RPC 远程调用过程
  4. 寻找数组中的最大值和最小值
  5. 几个必知的python小知识
  6. 域名到期续费删除的相关规则
  7. python vtk_VTK在python环境下的安装和调用
  8. sqoop从HDFS导出数据到Mysql,卡在Running job: job_1571036741208_0010不动了,或者map 100% reduce 0%不动了
  9. hadoop学习笔记-目录
  10. java emf 转jpg_java – emf到jpg的转换
  11. DBnet检测知识蒸馏+tensorrt推理(文字检测+条形码检测)
  12. #436. 子串的最大差(单调栈)
  13. idea环境下lombok插件的安装和使用
  14. ASO优化方法有哪些_五大ASO优化方法
  15. cisco思科模拟器中断translating域名翻译快捷键
  16. 【JAVASCRIPT】-【AES加密解密】01、前端AES加密解密的方式
  17. excel自动翻译-excel一键自动翻译免费
  18. php 自定义生成短链工具
  19. AE自带抠像插件解释
  20. SpringBoot 快速集成 JWT 实现用户登录认证

热门文章

  1. 程序员为何秃顶之数据结构-线性表-初识线性表
  2. 反射框架Reflections
  3. rockpi4b 烧写固件到SD卡
  4. Ctfmon.exe 文件
  5. RS485接口modbus协议RTU方式
  6. 第二章 2.3 一阶逻辑等值式与前束范式
  7. 房地产销售转行学习Python的小哥哥入职起薪9K!
  8. 10件小事让你幸福至极
  9. 计算机联锁设备的日常维护,双捷站计算机联锁设备维护作业标准.docx
  10. 成佩涛-两张图给你看看两大搜索引擎的区别