matlab并行计算教程需要设置吗

使用MATLAB并行计算缩短程序运行时间的窍门
时间:日来源:百度
1、相信很多朋友在利用matlab进行计算时,会遇到循环次数过大,或者是单次计算量过大的问题,比如需要计算的数值阵列数据量过大,利用传统的编程方式,跑一次程序几个小时,都要等的急死了是不是呢?如果遇到这种情况,则可以尝试一下并行计算,传统的计算方式都是串行计算。并行计算之所以可行,取决于两方面因素:a)现在大家的计算机是多核的,至少也是双核了吧,有的可能8核都有,这是很重要的硬件基础。b)MATLAB本身提供了很好的并行计算函数,加上你的聪明智慧,设计合理的软件,这样就有了软件基础了。
2、并行计算的优势是什么?
以自己的经验来看,MATLAB并行计算真是很厉害的,通过对原始程序很简单的改动,就能节省很多时间。我给出一个很简单的例子,说明并行计算的优势所在。例如一个遗传算法的MATLAB程序,通常的计算运行方式需要2个小时得到结果,那如果用一台双核的机器并行计算呢?理论上1个小时就可以跑完。那如果是用一台8核的计算机,就只是一刻钟(15分钟)了。而且并行计算可以配合分布式计算服务,同时调动若干台计算机同时工作,把刚才的程序计算时间缩短到分分钟绝对不是难事啊。
3、如何启动MATLAB并行计算?
以单台双核计算机为例。首先打开MATLAB命令窗口,输入matlabpool open就OK了。如图所示:
这样,就相当于将一台计算机的两个核心,当做两台机器用啦。接下来是编程序实现的方法。
4、MATLAB并行计算的模式有几种?
主要是两种:parfor模式和spmd模式。两种模式的应用都很简单。第一个中,parfor其实就是parallel+for简化而来,顾名思义啊,就是把原来程序中的for循环中的关键字forg改为parfor就OK啦。不过这是很初步的介绍,限于篇幅不能详细展开了,详细的可以用输入命令help parfor查看,如图:
5、同样地,可以适用于spmd模式。
6、程序举例:例如很简单的一个程序:
%传统方式计算
for i = 1:500
c1 = c1+max(eig(rand(i,i)));
%parfor并行方式计算
parfor ii = 1:500
c2 = c2+max(eig(rand(ii,ii)));
display(strcat('parfor并行计算时间:',num2str(t2),'秒'));
display(strcat('客户端串行计算时间:',num2str(t1),'秒'));
分别用传统方式算和parfor算,时间区别如下图所示:
这只是用双核计算的效果,如果是4核心8核心,效果要好的多啦,需要用MATLAB的童鞋不妨试试看咯。
7、关闭并行计算模式。
不想用了?送一个命令进去就关了,估计你已经猜到那即是:matlabpool close.如图所示:
早日学会哦!
Matlab是一款最专业最活跃的科学仿真计算软件,其最大的强项就是拥有强大的矩阵计算以及仿真能力,可用于概念设计,算法开发,建…
页面地址:/xiazai/Matlab.html
看过这篇文章的人还看过推荐这篇日记的豆列
······
&(3人关注)温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(14865)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_080',
blogTitle:'Matlab并行运算',
blogAbstract:'目前,新购置的电脑大部分都是多核的了,使用Matlab进行大量计算时如何有效利用多核呢?Matlab目前版本已经比较好的支持多核并行运算了。\r\n我是用的Matlab版本是R2007b。电脑是双核的。\r\n\r\n\r\n\r\n\r\n先简单试试:\r\n&& matlabpool local 2Submitted parallel job to the scheduler, waiting for it to start.Connected to a matlabpool session with 2 labs.\r\n显示正在进行多核配置,然后,提示连接到2个“实验室”(labs)。我这也理解的:本',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:5,
publishTime:7,
permalink:'blog/static/',
commentCount:10,
mainCommentCount:5,
recommendCount:2,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Matlab并行计算示例(一)
Matlab并行计算示例(一)
& & & & 使用Matlab实现算法较为简单,但是涉及for循环时,效率比不上C++。对于一个多核处理器,不开多核并行计算,实在是对不住Matlab自带的并行计算功能。parfor循环较为简单,但是它对for循环中的变量要求比较严格,稍有不慎就会出错(我深受其害)。使用Matlab Toolbox中的createJob/createTask可以实现多线程的并行计算,其功能与C++中CreateThread类似。这样的并行计算对函数中的变量要求就没有那么严格。
& & & & Matlab 的调用函数略有差异,下面列出分别列出一个示例。
& & & & 1、Matlab 2010
slave_num = 2;
jm = findR
jm.DataLocation = './cache';
if ~isempty(jm.jobs)
destroy(jm.jobs)
if ~exist(jm.DataLocation, 'file')
mkdir(jm.DataLocation)
sub_list = cell(2, 1);
sub_list{1} = [2, 1];
sub_list{2} = [3, 4];
job = createJob(jm, 'PathDependencies', {jm.DataLocation});
for i = 1:slave_num
createTask(job, @min, 1, {sub_list(i)});
submit(job);
waitForState(job, 'finished');
destroy(job);
& & & & 2、Matlab 2014
clear all,
close all,
slave_num = 2;
c = parcluster(); % Create cluster object
job = createJob(c);
sub_list = cell(2, 1);
sub_list{1} = [2, 1];
sub_list{2} = [3, 4];
for i = 1:slave_num
createTask(job, @min, 1, {sub_list(i)});
submit(job);
wait(job);
out = fetchOutputs(job);
& & & & 上面两个示例实现的是同一个功能,即并行计算两个向量的最小元素。开头和最后的对象声明和结果提取使用的函数不同,中间创建任务的函数基本相同。对较少的任务,并不能节省很多时间,有时反而会增加时间开销;但是当任务较多时,并行计算就会体现出它的优势,充分利用多核CPU。
& & & & Matlab 博大精深,createJob/createTask只是Matlab并行计算中很小的一部分,还有诸如:parfor, batch,&spmd, 这些还没有仔细研究过,有时间需要进一步深入学习。
【参考文献】:
官方文档:
我的热门文章
即使是一小步也想与你分享

我要回帖

更多关于 matlab gpu并行计算 的文章

 

随机推荐