Matlab并行编程方法1
相信很多朋友在利用matlab进行计算时,会遇到循环次数过大,或者是单次计算量过大的问题,比如需要计算的数值阵列数据量过大,利用传统的编程方式,跑一次程序几个小时,都要等的急死了是不是呢?如果遇到这种情况,则可以尝试一下MATLAB并行计算,传统的计算方式都是串行计算。并行计算之所以可行,取决于两方面因素:a)现在大家的计算机是多核的,至少也是双核了吧,有的可能8核都有,这是很重要的硬件基础。b)MATLAB本身提供了很好的并行计算函数,加上你的聪明智慧,设计合理的软件,这样就有了软件基础了。
并行计算的优势是什么?
以自己的经验来看,MATLAB并行计算真是很厉害的,通过对原始程序很简单的改动,就能节省很多时间。我给出一个很简单的例子,说明并行计算的优势所在。例如一个遗传算法的MATLAB程序,通常的计算运行方式需要2个小时得到结果,那如果用一台双核的机器并行计算呢?理论上1个小时就可以跑完。那如果是用一台8核的计算机,就只是一刻钟(15分钟)了。而且并行计算可以配合分布式计算服务,同时调动若干台计算机同时工作,把刚才的程序计算时间缩短到分分钟绝对不是难事啊。
如何启动MATLAB并行计算?
以单台双核计算机为例。首先打开MATLAB命令窗口,输入matlabpool open就OK了。如图所示:
这样,就相当于将一台计算机的两个核心,当做两台机器用啦。接下来是编程序实现的方法。
MATLAB并行计算的模式有几种?
主要是两种:parfor模式和spmd模式。两种模式的应用都很简单。第一个中,parfor其实就是parallel+for简化而来,顾名思义啊,就是把原来程序中的for循环中的关键字forg改为parfor就OK啦。不过这是很初步的介绍,限于篇幅不能详细展开了,详细的可以用输入命令help parfor查看,如图:
同样地,可以适用于spmd模式。
程序举例:例如很简单的一个程序:
tic
%传统方式计算
c1=1;
for i = 1:500
c1 = c1+max(eig(rand(i,i)));
end
t1 = toc;
matlabpool open;
%parfor并行方式计算
tic
c2=1;
parfor ii = 1:500
c2 = c2+max(eig(rand(ii,ii)));
end
t2 = toc;
matlabpool close;
display(strcat('parfor并行计算时间:',num2str(t2),'秒'));
display(strcat('客户端串行计算时间:',num2str(t1),'秒'));
分别用传统方式算和parfor算,时间区别如下图所示:
这只是用双核计算的效果,如果是4核心8核心,效果要好的多啦,需要用MATLAB的童鞋不妨试试看咯。
关闭并行计算模式。
不想用了?送一个命令进去就关了,估计你已经猜到那即是:matlabpool close.如图所示:
早日学会哦!
Matlab并行编程方法1的更多相关文章
- 【并行计算-CUDA开发】GPU并行编程方法
转载自:http://blog.sina.com.cn/s/blog_a43b3cf2010157ph.html 编写利用GPU加速的并行程序有多种方法,归纳起来有三种: 1. 利用现有的G ...
- 【并行计算】基于OpenMP的并行编程
我们目前的计算机都是基于冯偌伊曼结构的,在MIMD作为主要研究对象的系统中,分为两种类型:共享内存系统和分布式内存系统,之前我们介绍的基于MPI方式的并行计算编程是属于分布式内存系统的方式,现在我们研 ...
- Java:并行编程及同步使用方法
知道java可以使用java.util.concurrent包下的 CountDownLatch ExecutorService Future Callable 实现并行编程,并在并行线程同步时,用起 ...
- Matlab的parfor并行编程
Matlab的parfor并行编程 通常消耗最多计算资源的程序往往是循环. 把循环并行化.或者优化循环体中的代码是最经常使用的加快程序执行速度的思路. Matlab提供了parforkeyword,能 ...
- 第九节:深究并行编程Parallel类中的三大方法 (For、ForEach、Invoke)和几大编程模型(SPM、APM、EAP、TAP)
一. 并行编程 1. 区分串行编程和串行编程 ①. 串行编程:所谓的串行编程就是单线程的作用下,按顺序执行.(典型代表for循环 下面例子从1-100按顺序执行) ②. 并行编程:充分利用多核cpu的 ...
- 第二章 Matlab面向对象编程基础
DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...
- Parallel并行编程初步
Parallel并行编程可以让我们使用极致的使用CPU.并行编程与多线程编程不同,多线程编程无论怎样开启线程,也是在同一个CPU上切换时间片.而并行编程则是多CPU核心同时工作.耗时的CPU计算操作选 ...
- .Net中的并行编程-2.ConcurrentStack的实现与分析
在上篇文章<.net中的并行编程-1.基础知识>中列出了在.net进行多核或并行编程中需要的基础知识,今天就来分析在基础知识树中一个比较简单常用的并发数据结构--.net类库中无锁栈的实现 ...
- .Net中的并行编程-3.ConcurrentQueue实现与分析
在上文<.Net中的并行编程-2.ConcurrentQueue的实现与分析> 中解释了无锁的相关概念,无独有偶BCL提供的ConcurrentQueue也是基于原子操作实现, 由于Con ...
随机推荐
- SQl查询基础
SQL语言是一门简单易学却又功能强大的语言,他让你快速上手并写出比较复杂的查询语句,但对于大多数开发者来书,使用SQL查询数据库并没有一个抽象的过程和一个合理的步骤,这很可能会是在写一些特定的查询语句 ...
- Yum 命令语法
一.Yum 命令格式: yum <options> <command><package...> 二.参数说明 1.options: 1)-y:如果在工作过程中如要使 ...
- js轮训
Later.js,一个独立的JavaScript类库,提供了循环事件触发的高级应用,可以为项目替换以上两种方法. 通常,我们要完成复杂的时间预定,需要大量的if...else语句.Later.js提供 ...
- composer出现Invalid credentials for ‘https://packagist.phpcomposer.com/packages.json’的错误
composer出现Invalid credentials for ‘https://packagist.phpcomposer.com/packages.json’的错误 一.总结 一句话总结:出现 ...
- 动态链接库(dll)文件的动态调用(使用动态链接库,解析Wis文件--测井数据文件的一种)
在画出井眼轨迹后,老师又给了三口井的数据,不过这次给的数据是WIS格式的,可以使用一个动态链接库进行解析,解析结束后会生成一个固定格式的txt文件,然后再读取txt文件,画井眼轨迹. 学长给了一个可以 ...
- 【R】数据导入读取read.table函数详解,如何读取不规则的数据(fill=T)
函数 read.table 是读取矩形格子状数据最为便利的方式.因为实际可能遇到的情况比较多,所以预设了一些函数.这些函数调用了 read.table 但改变了它的一些默认参数. 注意,read.t ...
- 2017-02-23 错误信息:未在本地计算机上注册“Microsoft.ACE.oledb.12.0”提供程序。
问题如题,解决办法:去 http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/Access ...
- Red hat linux 下配置Java环境(jdk)
1.把jdk-6u25-linux-i586-rpm.bin 复制到redhat linux中,放到/usr/java 目录下,该目录是mkdir 的,并chmod 755 jdk-6u25-li ...
- PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
向mysql 插入数据时,很多时候我们想知道刚刚插入数据的id,这对我们很有用.下面这篇文章就详细给大家介绍了利用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID,有需要的朋友 ...
- centos 6 简单安装mysql
yum list installed | grep mysql yum -y remove mysql-libs.i686 yum list installed | grep mysql wget d ...