Matlab并行计算方法(上)

       Matlab是被广泛使用的商业编程软件,对应的M语言也是公认的简单易上手的好语言,其数组运算能力十分强大,天生就适合科学计算,不过它有一个天生的问题,就是,运行相同代码的速度,通常都比CC++等语言慢上许多,不过根据我自己的编程经验,Matlab的运行速度并不比Python慢,有时候甚至会反超(LinuxMatlab的运行速度要比Windows下快上许多),这样一来,有时候我们需要进行一些反复的操作(比如参数扫描)的时候,用单核运算的速度就相对较慢了,优化代码确实可以提速;不过这里不谈代码如何优化,而是另一种加速方法:并行计算。

       并行计算道理很简单,就是说:你有一个任务,现在要把这个任务反复做10遍,你一个人做,只能一遍一遍的来;但是,要是有10个人一起做,那就只需要做一遍的时间,这就是并行计算。

       科研中经常遇到需要并行计算的程序,如何编写程序?下面介绍两种方法:


       注意:以下的并行计算方法都需要安装工具包Parallel Computing Toolbox,据我所知,这个工具包破解版的Matlab都是有的;至于正版的Matlab,如果以前没有安装,那么可以打开Matlab,在“主页---附加功能---获取附加功能”中搜寻安装。

       打开matlab,如果在窗口左下角出现这个四个竖杠的图标,就说明安装成功:

并行池

1、parfor并行

       第一种方式是比较方便快捷的parfor并行方式,代码框架如下:

 %% 准备工作
 % 指定你要开启的线程数量,开启进程池
 core = 5
 p = parpool(core)
 % 自行设定程序最大运行时间
 p.IdleTimeout = 100;
 ​
 %% 实际并行计算
 ​
 % 一个用来记录数据的数组
 data = zeros(1,5)

 % 并行循环
 parfor i = 1:5
  % 调用你自己编写的某个函数testFunction并返回了某个结果a
  a = testFunction(i)
  data(i) = a
 end
 ​
 % 关闭进程池
 delete(p)

%% 自定义的函数:输入值为i;输出值为a
function a = testFunction(i)
***
***
a = your_answer;
end



简单来说,就是:


  • 开启进程池,指定核心数、运行时间等参数

  • 设定接受结果的矩阵

  • parfor并行运算

  • 结束后关闭进程池


       需要注意的是,在使用parfor并行计算时,很容易就会提示错误编写,这是因为每个核(好像线程更加准确些)在运行时都应该是独立在运行自己的程序,也就是说你的并行运算程序不能相互有数据传递操作。要是你想传递数据,那我也不会,因为我从来都不这样编程。

       parfor并行运算非常的优雅且实用,适用范围是在你自己的台式机或者笔记本上,parpool()开启之后的worker数是默认的机器线程数量,如下图所示:

并行计算属性

       这里的几个性质可以自行改动,由于我的电脑比较老,所以只有4个线程。

       这种并行计算的好处是简单易学、也不用去管核与核之间的消息分发和回收,因此本人强烈推荐!

       另外,通过点击那个左下角的竖线图标也是打开进程池的,不过用程序控制还是能动性更大些。

       还有问题的朋友,可以参考:matlab并行计算,这个写的比较详细,推荐大家看看。

2、集群并行计算

       每次跑并行我都会想,4核?8核?这怎么够?!我有几百个参数要扫描!这怎么办?

       那答案很简单啊,当然是上刚刚发布的第三代线程撕裂者3960X套装啦!

第三代线程撕裂者

       24核48线程,TDP280W,zen2架构,超频上5G,秒飞Intel全家!

       如果觉得这么贵的东西并不适合我们,那么3950x还是可以考虑的,毕竟也有16个核心在那里摆着......

       开个玩笑,这种堆料堆钱没有啥意思,要谨记:

买前生产力,买后打游戏

       你要打游戏,买3600就可以了,6核12线程,这价位,还要什么自行车。


       话说回来,在服务器上进行Matlab并行计算要复杂一些,有关此内容,我会在下节再讲,等不及的朋友,直接去MathWorks官网上查询parclustercreateTaskcreateJobsubmit等等几个关键函数,相信看完之后,应该会有所收获。

       谢谢各位的阅读!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272