matlab并行计算 parfor

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

CoreNum=6; %设定机器CPU核心数量
parpool(CoreNum);
Starting parallel pool (parpool) using the 'local' profile ... connected to 6 workers.

测试:竟然快了接近20倍!!!

tic
parfor i=1:3, c(:,i) = eig(rand(1000)); end
toc

tic
for i=1:3, c(:,i) = eig(rand(1000)); end
toc
Starting parallel pool (parpool) using the 'local' profile ... connected to 6 workers.
时间已过 20.193056 秒。
时间已过 1.230642 秒。

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

poolobj = gcp('nocreate');
if isempty(poolobj) % If no pool,  create new one.
    poolsize = 0;
    CoreNum=6; %设定机器CPU核心数量
    parpool(CoreNum);
else
    poolsize = poolobj.NumWorkers;
    disp('Already initialized'); %说明并行环境已经启动
end

parfor i=1:100
function1;
end

···

parfor i=1:100
function2;
end

通常将parfor放到最外层的循环, 也不是一定要放在最外面,如果里面那层运算量很大,外面那层基本没什么运算,放在里面也可以的,总之哪里运算量大并且可以不交叠地的分开,就在哪里用

parfor将循环迭代分组,那么每个worker执行迭代的一部分。当迭代耗时很长的时候parfor循环也是有用的,因为workers可以同时执行迭代,但是当你的CPU的利用率如果已经达到了100%,此时你这种并行是没有意义的,速度不会加快的。另外这个博客上指出了Matlab的parfor的使用条件即:

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

应该是一个项目中只用一个parfor,一般是最外面那个,子函数里面的循环千万不要也写parfor哦,不然会报错,并行计算的原理是循环之间是没有任何重叠的,,没有数据传递和交叠。所以本质上是把parfor end之间的所有代码打包成了一个没有返回值的函数!!
在这里插入图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab中,parfor语句可以用于并行计算for循环。它可以在多个处理器核心上同时执行循环语句,从而提高程序的运行效率。parfor语句在数值计算和科学计算领域有广泛的应用,例如求解线性方程组、图像处理、数值积分、矩阵乘法和求解偏微分方程等。使用parfor语句可以大幅度提高程序的运行效率,减少计算时间和计算资源的消耗。 当使用parfor语句时,需要注意几个事项。首先,循环变量在parfor语句中有一些限制和使用方法,例如循环变量不能被修改并且不能作为索引使用。其次,在并行处理中,循环变量的值不是按顺序执行的,所以在编写程序时要考虑到这一点。最后,如果程序在并行处理过程中出现问题导致中断,重新运行程序可能会很麻烦,因为已经计算过的部分可能需要重新计算。因此,在使用parfor语句时,需要考虑到这些注意事项。 总之,parfor语句是Matlab中用于并行计算for循环的重要功能,通过并行处理可以提高程序的运行效率,特别是在处理大规模问题时。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [基于parfor的matlab并行处理机制学习和研究](https://blog.csdn.net/Simuworld/article/details/131465885)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [matlab并行parfor 宏观串行](https://download.csdn.net/download/xiaoxiaolishan/7992859)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值