MATLAB练习题:并行计算的parfor循环

 ​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​

MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili


在MATLAB中,'parfor'(Parallel for)是一种并行编程工具,它允许在多个处理核心上同时执行循环迭代。这种方法与常规的for循环类似,但能够在多个工作进程上并行执行循环迭代,从而加快代码运行速度。这对于需要进行重复计算或处理大型数据集的任务尤为有效。请在MATLAB官方网站上搜索关于'parfor'的相关信息,并尝试将之前代码中的for循环替换为parfor循环。测试代码是否能够正常运行,并比较for循环和parfor循环的执行时间。
参考:
(1)https://ww2.mathworks.cn/help/parallel-computing/parfor.html
(2)https://ww2.mathworks.cn/help/coder/ug/acceleration-of-matlab-algorithms-using-parallel-for-loops-parfor.html

以下内容节选自MATLAB官网:
parfor 循环如何提高执行速度
parfor 循环可提供高于其同类 for 循环的执行速度,因为多个线程可以对同一循环以并发方式执行计算。  
parfor 循环体的每次执行称为一次迭代。这些线程以任意顺序执行迭代计算,且彼此独立。由于每次迭代都是独立的,因此它们不必同步。如果线程数等于循环迭代次数,则每个线程将执行一次循环迭代。如果迭代次数超过线程数,则某些线程将执行多次循环迭代。
例如,当包含 100 次迭代的循环在 20 个线程上运行时,每个线程将同时执行五次循环迭代。如果循环因包含大量迭代或单个迭代过长而需要很长时间才能运行完毕,您可以使用多个线程来显著减少运行时间。不过,在此示例中,速度提升可能达不到 20 倍,因为存在并行化开销(如线程创建和删除)。
何时使用 parfor 循环
在下列情况下,请使用 parfor:

  1. 多次简单计算迭代。parfor 会将这些循环迭代分为若干组,以使每个线程执行一组迭代。
  2. 一次循环迭代需要很长时间才能执行完毕。parfor 可在不同线程上同时执行迭代。虽然这种同时执行不会减少单个迭代所花费的时间,但它可以大大减少整个循环所花费的总时间。

何时不使用 parfor 循环
在下列情况下,请不要使用 parfor:

  1. 循环的某次迭代依赖于其他迭代。并行运行迭代可能导致错误的结果。为了避免在循环的某次迭代依赖于其他迭代时使用 parfor,MATLAB Coder 指定了变量的刚性分类。有关详细信息,请参阅 Classification of Variables in parfor-Loops。如果 MATLAB Coder 检测到循环不符合 parfor 设定,将不会生成代码并且会产生错误。规则要求循环迭代必须是独立的,但归约是一个例外。归约变量会将依赖于所有迭代的值累加在一起,但与迭代顺序无关。有关详细信息,请参阅Reduction Variables。
  2. 只有几次执行一些简单计算的迭代。注意 对于少量循环迭代,由于存在并行化开销,可能并不能提升执行速度。此类开销包括线程创建、线程之间的数据同步以及线程删除所花费的时间。

有关详细信息,请参阅 parfor。parfor 限制

  • parfor 循环不支持以下语法:
  •        parfor (i=initVal:step:endVal) 
  •        parfor i=initVal:step:endVal
  • 不要在 parfor 循环体中使用以下构造:
  •  嵌套 parfor 循环
  •  break 和 return 语句
  •  全局变量
  •  对 MATLAB 类使用归约
  •  对 char 变量使用归约
  •  使用外部 C 代码的归约
  •  外部函数调用
  •  内联函数
  •  展开循环
  •  varargin/varargout

事实上大家要记住一点,parfor循环中的数据需要具有独立性:每次循环迭代必须是独立的,即每次迭代的结果不应该依赖于其他迭代的结果。
因此对于蒙特卡罗模拟的例子,是比较适合使用parfor循环的。


下面我们来看对比:
一只失明的小猫掉进山洞里,山洞有三个门,其中一个门进去后走2h后可以回到地面,第二个门进去后走4h又回到原始出发点,第三个门进去后走6h还是回到原始出发点。猫是随机选择的,求小猫走出山洞的期望时间?
(1)传统的循环语句

(2)并行循环(注意,首次使用parfor时可能会启动并行工具箱,这会耽误一定时间)

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值