matlab并行计算之parfor
在运行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相关推荐
- matlab 并行计算 parfor
转自: http://www.xiongfuli.com/%E5%B9%B6%E8%A1%8C%E8%AE%A1%E7%AE%97/2016-05/Matlab-Parfor.html 在Matlab ...
- 23. matlab并行计算原理以及parpool函数
声明: 因电脑问题, 只做记录,以后尝试. 出处: Matlab并行运算 - wenyusuran的专栏 - CSDN博客 https://blog.csdn.net/wenyusuran/arti ...
- Matlab并行计算(新手)
Matlab并行计算 1 Matlab不会自动开启多核并行 2 Matlab并行过程--parpool 3 电脑核数与parpool的关系 4 说明--matlabpool与partool 5 并行实 ...
- matlab并行计算实例,Matlab并行计算示例(一)
使用Matlab实现算法较为简单,但是涉及for循环时,效率比不上C++.对于一个多核处理器,不开多核并行计算,实在是对不住Matlab自带的并行计算功能.parfor循环较为简单,但是它对for循环 ...
- matlab spmd,matlab并行计算命令
1. matlab仿真模型怎么并行计算 以单台双核计算机为例. 首先打开MATLAB命令窗口,输入matlabpool open就OK了.这样,就相当于将一台计算机的两个核心,当做两台机器用啦. 接下 ...
- matlab 2017并行计算,Matlab并行计算
1 MATLAB并行计算-从个人桌面到远程集群和云(陈伟/魏奋)视频摘录笔记 https://cn.mathworks.com/videos/parallel-computing-with-matla ...
- Matlab 并行计算学习初步
Matlab 并行计算学习 1. 简介 高性能计算(High Performance Computing,HPC)是计算机科学的一个分支,研究并行算法和开发相关软件,致力于开发高性能计算机.可见并行计 ...
- matlab parpool 报错,Matlab并行计算1
1 更高级的算法牵扯到更多重的循环和复杂的计算,尤其是现在人工智能的算法尤其如此.有些历史知识的人能够了解到,人工智能的很多基本算法其实近百年之前就有了,但是当时的计算机技术达不到去实现这些算法的要求 ...
- Matlab 并行计算(一)
Matlab 并行计算在大数据时代必然成为发展趋势,本节给出入门级别的并行计算学习笔记: 使用并行计算前,首先需确认你的计算机,是可以多线程工作的,若是像笔者这种老爷机只有两个线程的话,那对不起,请升 ...
最新文章
- MATLAB实战系列(三十五)-MATLAB基于BP神经网络的光伏发电太阳辐照度预测
- 架构与设计 之一 C 嵌入式设计模式(Design Patterns for Embedded Systems in C)的学习记录
- python怎么在官网下载pygame_Python中pip以及Pygame的下载与安装
- 发现一个很不错的正则表达式生成器
- ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘
- 这样写代码,真是帅到没有朋友
- [FWT] UOJ #310. 【UNR #2】黎明前的巧克力
- SQL 基础之单行函数(七)
- thinkphp与传统php,老生常谈php中传统验证与thinkphp框架(必看篇)
- 【基础教程】免疫算法【006期】
- 旧版sai笔刷_sai笔刷包最新下载
- 怎么查微信公众号服务器,微信公众号查询数据库,微信公众号数据库怎么查询?...
- Unity3D 鼠标选择物体高光显示信息
- openstack-nova-api源码剖析1
- C++ INT_MAX、INT_MIN、0x80000000以及int中负数的存储
- 静态HTML网页设计作品 代码质量好-上海介绍(5页) HTML+CSS+JavaScript(含源码)
- SQL把一个表中数据更新到另一个表的多种方法
- XDOC的使用和一些问题总结
- 内网穿透远程群晖NAS——上篇(7.X版)
- 10大免费FLV播放器下载(转)