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时可能会启动并行工具箱,这会耽误一定时间)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

30-k8s集群的七层代理-ingress资源(进阶知识)

一、ingress概述 1,引发问题 目前使用svc资源做网络暴露,使用nodeport类型,一个业务对应一个宿主机端口,那么如果业务多了,所占用的宿主机端口也就多了,虽然说宿主机端口一般情况下都是够用的,…

python自动化管理和zabbix监控网络设备(有线网络和路由配置部分)

目录 目录 一、拓扑图 二、core-sw1 三、core-sw2 四、sum-sw1 五、sum-sw2 六、FW1 七、DMZ-SW1 结语 一、拓扑图 二、core-sw1 sys sysname core-sw1 vlan batch 10 20 30 40 50 60 100 vlan batch 200 210 220 230 240 250 stp region-configuration region-name…

【Java设计模式】一、工厂模式、建造者模式、原型设计模式

文章目录 1、简单工厂模式2、工厂方法模式3、抽象工厂模式4、建造者模式5、原型设计模式 设计模式即总结出来的一些最佳实现。23种设计模式可分为三大类: 创建型模式:隐藏了创建对象的过程,通过逻辑方法进行创建对象,而不是直接n…

贝叶斯核机器回归拓展R包:bkmrhat

1.摘要 bkmrhat包是用于扩展bkmr包的贝叶斯核机器回归(Bayesian Kernel Machine Regression, BKMR)分析工具,支持多链推断和诊断。该包利用future, rstan, 和coda包的功能,提供了在贝叶斯半参数广义线性模型下进行identity链接和 …

CUDA编程 - 用向量化访存优化 - Cuda elementwise - Add(逐点相加)- 学习记录

Cuda elementwise - Add 一、简介1.1、ElementWise Add1.2、 float4 - 向量化访存 二、实践2.1、如何使用向量化访存2.1、简单的逐点相加核函数2.2、ElementWise Add float4(向量化访存)2.3、完整代码 一、简介 1.1、ElementWise Add Element-wise 操作…

替代 Intercom 和 Zendesk: 开源的客户互动套件 | 开源日报 No.183

chatwoot/chatwoot Stars: 17.8k License: NOASSERTION chatwoot 是一个开源的客户互动套件,是 Intercom、Zendesk、Salesforce Service Cloud 等的替代品。 该项目主要功能、关键特性和核心优势包括: 支持多种对话渠道,如网站、Facebook、…

2024022601-数据库语言SQL

数据库语言SQL SQL的发展 1974年,由Boyce和Chamberlin提出 1975~1979,IBM San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言 SQL-86是第一个SQL标准 SQL-89、SQL-92(SQL2)、SQL-99(SQL3) 非过程化语言 SQL语言进行数据库操作…

【 C++ 】闭散列哈希表的模拟实现

哈希节点状态 我们都很清楚数组里的每一个值无非三种状态: 如果某下标没有值,则代表空EMPTY。如果有值在代表存在EXIST。如果此位置的值被删掉了,则表示为DELETE。 而这三种状态我们可以借助enum枚举来帮助我们表示数组里每个位置的状态。…

亿道推出重磅加固平板!为行业发展注入新动力

随着科技生产力的不断发展,各行各业都得到质的飞跃。产品的迭代速度也大大加快,作为全球领先的加固行移动终端一站式提供商,亿道信息跟紧时代潮流,推出EM-I10J、EM-I20J两款均衡型加固平板,为行业发展注入新动力。 接地…

【Python笔记-设计模式】命令模式

一、说明 命令模式是一种行为设计模式,旨在对命令的封装,根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。 (一) 解决问题 将请求发送者和接受者解耦,请求发送者只需知道如何发送请求&#xff…

LVGL 环境搭建-基于WSL

背景说明 小白刚开始接触LVGL,前些日子狠心花198元入手了一块堪称LVGL 入门利器~HMI-Board 开发板,虽然有RT-Thread 集成好的LVGL 环境,只需要几个步骤就能成功把lvgl 的示例运行起来,对于爱折腾的我来说,过于简单也并…

Sora专辑|AI视频制作新时代的曙光:OpenAI Sora 模型启示录

本文深入剖析 OpenAI 最新发布的人工智能视频生成模型 Sora 的工作原理,并探讨它对电影制作行业的深远影响。Sora 利用海量数据和强大的计算能力,学习视频的"语法规则"即物理定律,从而生成逼真的视频画面。Sora 将从根本上改变电影制作的方式,降低制作成本、赋能…

vue2、vue3各自的响应式原理

查看本专栏目录 关于作者 还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas&#x…

助力智能化农田作物除草,基于DETR(DEtection TRansformer)模型开发构建农田作物场景下玉米苗、杂草检测识别分析系统

在我们前面的系列博文中,关于田间作物场景下的作物、杂草检测已经有过相关的开发实践了,结合智能化的设备可以实现只能除草等操作,玉米作物场景下的杂草检测我们则少有涉及,这里本文的主要目的就是想要基于DETR模型来开发构建玉米…

【春运抢票攻略浅析】

参考 最全12306放票规则,抢票策略,候补作用2023年12306抢票攻略(纯技巧) 研究放票规则,候补的时候车次进行一下挑选,能够买长乘短的尽量买长,不要候补一些区间票吧,这是一开始放票…

LeetCode刷题---确认率

解题思路: 将Signups和Confirmations进行左连接,连接的条件为Signups.user_idConfirmations.user_id 根据题中要求进行查询,这里使用AVG聚合函数来求解确认率 AVG(c.action‘confirmed’)表示对action列进行求平均,如果action‘confirmed’&a…

【题解】—— LeetCode一周小结8

【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结7 19.N 叉树的后序遍历 题目链接:590. N 叉树的后序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 后序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#x…

深度学习目标检测】二十、基于深度学习的雾天行人车辆检测系统-含数据集、GUI和源码(python,yolov8)

雾天车辆行人检测在多种场景中扮演着至关重要的角色。以下是其作用的几个主要方面: 安全性提升:雾天能见度低,视线受阻,这使得驾驶者和行人在道路上的感知能力大大降低。通过车辆行人检测技术,可以在雾天条件下及时发现…

【Linux】head命令使用

head命令 head是一个在 Unix 和 Unix-like 操作系统中常用的命令行工具,用于输出文件的前 n 行。默认为 10,即显示 10 行的内容。 语法 head [options] [file(s)] head命令 -Linux手册页 选项及作用 执行令 : head --help 执行命令结果…

k8s二进制部署的搭建

1.1 常见k8s安装部署方式 ●Minikube Minikube是一个工具,可以在本地快速运行一个单节点微型K8S,仅用于学习、预览K8S的一些特性使用。 部署地址:Install Tools | Kubernetes ●Kubeadm Kubeadm也是一个工具,提供kubeadm init…