在运行MATLAB程序的时候,当循环较多和计算量较大时,程序运行时间会非常长。经过查阅MATLAB文档发现,使用parfor循环,可以进行多线程并行运算,大大提高计算的速度,但是对该parfor循环的方式不是很清楚。经过查阅相关文献,发现该博主写的parfor比较详细,因此进行了转载,该文章是为了方便自己以后查阅。如需学习,请转到博主原文:

http://blog.sina.com.cn/s/blog_866e7fa70101cv08.html

提高matlab代码的执行效率,是很多码农们的迫切愿望和需求。最重要的当然是好的代码结构,向量化的语言的高效性是for循环拍马也赶不上的。但是,现实中很多时候我们是需要使用到for循环的,为此可以使用matlab的并行计算来提高代码执行效率。

并行计算的原理就是将代码分配到多个处理器中进行运算。例如8核的机器,就可以同时调动8个处理器来运算。不过为了在运算时你不至于太无聊,还是留下一个给自己做其他事情用吧。

1、启动和关闭并行计算功能

启动:

CoreNum=7; %调用的处理器个数

if matlabpool('size')<=0  %之前没有打开

matlabpool('open','local',CoreNum);

else  %之前已经打开

disp('matlab pool already started');

end

关闭:

matlabpool close

如果代码还在调试阶段,可以暂时不关闭matlabpool,反复开关浪费时间得很。另外,matlab关闭后,matlabpool也会自动关闭,所以如果不是海量代码,可以不用关闭的(个人意见,没有实测影响)。

2、parfor的使用

将传统的for循环改为parfor循环,就会将循环体作为整体分到到一个个处理器中,从而一次性进行多组运算。在使用parfor时,代码的编写有一些注意事项,最主要的是其中变量的处理。matlab的帮助文档中有详细的描述。

在此,我将摘取一部分重要的加以说明并举例。

在parfor中,变量不再是随心所欲的使用,有着其自己的分类。在parfor运行时,我们经常会遇到这样的错误“ Error: The variable xxx in a parfor cannot be classified.”说的就是变量xxx不能被正常划分到正确的类别中。


parfor变量一共分为5类,每一类的定义和用途就不说了,看一眼就明白。需要注意的是以下几点

(1)循环变量

循环变量在循环体中的使用一定要具有独立性,循环体之间不相关。例

a(i)=a(i-1)*temp;是不行的。

(2)sliced 变量(一般是数组,被各个处理器分割成一个个slice)

slice变量在一个循环体内只能出现一个slice,简单说就是一个循环体内只能出现slice数组的一个元素。例

a(i)=temp1;

a(i+1)=temp2;

是不行的。

另外,slice变量的下标一定要连续,例

a(2*i)=temp;

是不行的。

(3)临时变量

matlab使用变量的一个好处是不需要预定义。但是在使用parfor时,这会弄混sliced变量和临时变量。由于临时变量不需要有sliced变量的限制,使用更自由,因此一定要区分开。方法是在parfor中对临时变量进行预定义。例

parfor i=1:10

b=zeros(1,4);

for j=1:4

b(i)=i+1;

end

a(i)=b;  %a是sliced变量

end

基本上注意到这几个问题就能正常运行parfor了。

matlab并行计算之parfor相关推荐

  1. matlab 并行计算 parfor

    转自: http://www.xiongfuli.com/%E5%B9%B6%E8%A1%8C%E8%AE%A1%E7%AE%97/2016-05/Matlab-Parfor.html 在Matlab ...

  2. 23. matlab并行计算原理以及parpool函数

     声明: 因电脑问题, 只做记录,以后尝试. 出处: Matlab并行运算 - wenyusuran的专栏 - CSDN博客 https://blog.csdn.net/wenyusuran/arti ...

  3. Matlab并行计算(新手)

    Matlab并行计算 1 Matlab不会自动开启多核并行 2 Matlab并行过程--parpool 3 电脑核数与parpool的关系 4 说明--matlabpool与partool 5 并行实 ...

  4. matlab并行计算实例,Matlab并行计算示例(一)

    使用Matlab实现算法较为简单,但是涉及for循环时,效率比不上C++.对于一个多核处理器,不开多核并行计算,实在是对不住Matlab自带的并行计算功能.parfor循环较为简单,但是它对for循环 ...

  5. matlab spmd,matlab并行计算命令

    1. matlab仿真模型怎么并行计算 以单台双核计算机为例. 首先打开MATLAB命令窗口,输入matlabpool open就OK了.这样,就相当于将一台计算机的两个核心,当做两台机器用啦. 接下 ...

  6. matlab 2017并行计算,Matlab并行计算

    1 MATLAB并行计算-从个人桌面到远程集群和云(陈伟/魏奋)视频摘录笔记 https://cn.mathworks.com/videos/parallel-computing-with-matla ...

  7. Matlab 并行计算学习初步

    Matlab 并行计算学习 1. 简介 高性能计算(High Performance Computing,HPC)是计算机科学的一个分支,研究并行算法和开发相关软件,致力于开发高性能计算机.可见并行计 ...

  8. matlab parpool 报错,Matlab并行计算1

    1 更高级的算法牵扯到更多重的循环和复杂的计算,尤其是现在人工智能的算法尤其如此.有些历史知识的人能够了解到,人工智能的很多基本算法其实近百年之前就有了,但是当时的计算机技术达不到去实现这些算法的要求 ...

  9. Matlab 并行计算(一)

    Matlab 并行计算在大数据时代必然成为发展趋势,本节给出入门级别的并行计算学习笔记: 使用并行计算前,首先需确认你的计算机,是可以多线程工作的,若是像笔者这种老爷机只有两个线程的话,那对不起,请升 ...

最新文章

  1. MATLAB实战系列(三十五)-MATLAB基于BP神经网络的光伏发电太阳辐照度预测
  2. 架构与设计 之一 C 嵌入式设计模式(Design Patterns for Embedded Systems in C)的学习记录
  3. python怎么在官网下载pygame_Python中pip以及Pygame的下载与安装
  4. 发现一个很不错的正则表达式生成器
  5. ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘
  6. 这样写代码,真是帅到没有朋友
  7. [FWT] UOJ #310. 【UNR #2】黎明前的巧克力
  8. SQL 基础之单行函数(七)
  9. thinkphp与传统php,老生常谈php中传统验证与thinkphp框架(必看篇)
  10. 【基础教程】免疫算法【006期】
  11. 旧版sai笔刷_sai笔刷包最新下载
  12. 怎么查微信公众号服务器,微信公众号查询数据库,微信公众号数据库怎么查询?...
  13. Unity3D 鼠标选择物体高光显示信息
  14. openstack-nova-api源码剖析1
  15. C++ INT_MAX、INT_MIN、0x80000000以及int中负数的存储
  16. 静态HTML网页设计作品 代码质量好-上海介绍(5页) HTML+CSS+JavaScript(含源码)
  17. SQL把一个表中数据更新到另一个表的多种方法
  18. XDOC的使用和一些问题总结
  19. 内网穿透远程群晖NAS——上篇(7.X版)
  20. 10大免费FLV播放器下载(转)

热门文章

  1. 光电编码器的特性及应用
  2. Matlab求解非线性规划,fmincon函数的用法总结
  3. Python中计算程序的运行时间——timeit模块
  4. 虚拟机无法Ping主机,防火墙被McAfee管理了。
  5. 深圳云计算培训:学云计算与大数据前景如何?就业又该何去何从?
  6. H5 微信 APP之间的区别
  7. 规格化浮点数尾数的补码最高有效位与符号位相反
  8. yolov5 老友记
  9. 【VTK+增材CAM】3D打印模型切片
  10. 谱聚类算法原理(二)python实现