Matlab并行计算parpool使用方法+代码

parfor 是并行循环计算多重循环的嵌套,只能在其中一层循环使用parfor并行计算,因为parfor就是让几个worker同时干活,比如一个循环中,i=1:30,那么一个worker做i=1:5,一个做i=6:10····不同的循环变量之间完全独立,所以当然可以一起干活,在里面在嵌套parfor,相当于把里面的工作还要分给6个人,很容易混乱不清,出现问题,如果再继续嵌套就更没法独立地界限清晰地并行工作了。

  1. 在命令行中输入ver查看是否有“并行计算工具包”,
    在这里插入图片描述
    里面有Parallel Computing Toolbox 这个包说明该matlab是可以进行并行计算的。

  2. 查看CPU核数,点开资源管理器,
    在这里插入图片描述
    可以看到我的电脑是4核8线程的。

  3. 知道内核数后就可以编写以下程序

CoreNum=6; %设定机器CPU核心数量
if isempty(gcp('nocreate')) %如果并行未开启
    parpool(CoreNum);
end

显示这样后说明成功了

Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 4).
  1. 测试
    1)测试串行
tic
for i=1:4, c(:,i) = eig(rand(1000)); end
toc

2)测试并行

CoreNum=4; %设定机器CPU核心数量
if isempty(gcp('nocreate'))
    parpool(CoreNum);
end
tic
parfor i=1:4
    c(:,i) = eig(rand(1000));
end
toc

5.结果
在这里插入图片描述
快了一丢丢

6.使用提示
通常将parfor放到最外层的循环, 也不是一定要放在最外面,如果里面那层运算量很大,外面那层基本没什么运算,放在里面也可以的,总之哪里运算量大并且可以不交叠地的分开,就在哪里用parfor将循环迭代分组,那么每个worker执行迭代的一部分。当迭代耗时很长的时候parfor循环也是有用的,因为workers可以同时执行迭代,但是当你的CPU的利用率如果已经达到了100%,此时你这种并行是没有意义的,速度不会加快的。另外这个博客上指出了Matlab的parfor的使用条件即:

1)大量的简单计算的循环。
2)大量或少量的复杂计算的循环
3)各个任务之间不会出现数据的依赖,比如说循环内部的变量之间不要存在数据传递等等。

应该是一个项目中只用一个parfor,一般是最外面那个,子函数里面的循环千万不要也写parfor哦,即parfor不可嵌套,不然会报错,并行计算的原理是循环之间是没有任何重叠的,,没有数据传递和交叠。所以本质上是把parfor end之间的所有代码打包成了一个没有返回值的函数。如果你想把在parfor中计算出来的变量继续在parfor外使用,则应采用sliced variable, 也就是用Var(index)或Var{index}来保存。但要切记,保存到的值只能在parfor外继续使用,如果尝试在parfor内继续使用的话,系统会报错。

parfor一般用在主函数中,用在类或者警告中会弹警告,并不会加快程序速度。

参考文献1
参考文献2

  • 20
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老实人小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值