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://xiahunao.cn/news/2812099.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Centos配置SSH并禁止密码登录

CentOS8 配置SSH使用密钥登录并禁止密码登录 一、概念 SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。 SSH提供两个级别的认证: 基于口令的认证 基于密钥的认证 基本使…

【大厂AI课学习笔记NO.55】2.3深度学习开发任务实例(8)模型训练

作者简介:giszz,腾讯云人工智能从业者TCA认证,信息系统项目管理师。 博客地址:https://giszz.blog.csdn.net 声明:本学习笔记来自腾讯云人工智能课程,叠加作者查阅的背景资料、延伸阅读信息,及学…

LockBit官宣复活,表示将更多针对政府部门

仅仅在11国联合执法行动宣布成功查封LockBit基础设施服务器不到一周后,2月24日,LockBit 宣布将恢复勒索软件业务,并威胁会将更多的攻击集中在政府部门。 在一个新上线的数据泄露网站上,LockBit仍然使用其3.0 版本的名称&#xff…

【iOS ARKit】ARWorldMap

ARWorldMap 用于存储 ARSession 检测扫描到的空间信息数据,包括地标(Landmark)、特征点(Feature Point)、平面(Plane)等,以及使用者的操作信息,如使用者添加的 ARAnchor …

Wget: 如何批量下载风云卫星和NASA数据?

01 批量下载风云数据 首先进入风云卫星服务官网: https://satellite.nsmc.org.cn/portalsite/default.aspx 假定我们下载火点数据,如下先找到下载界面: 接着依据数据所对应卫星\传感器\产品名称进行检索: 选定需要的数据加入到购物车中: 接着提交订单等待所有数据回调完成就…

TensorFlow2.x 精选笔记(2)自动求导与概率

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

python爬虫实战:获取电子邮件和联系人信息

引言 在数字时代,电子邮件和联系人信息成为了许多企业和个人重要的资源,在本文中,我们将探讨如何使用Python爬虫从网页中提取电子邮件和联系人信息,并附上示例代码。 目录 引言 二、准备工作 你可以使用以下命令来安装这些库&a…

记录一下 Unity团结引擎开发OpenHarmony Next 应用 环境搭建流程

原视频链接 记录环境搭建过程~,本文是图文版本 一、打开团结引擎官网下载对应的 团结引擎版本 官网地址:https://unity.cn/tuanjie/releases 根据各自的开发环境下载对应的软件版本,我是 windwos 环境,我就下载 windows 环境 …

【学习笔记】Vue3源码解析:第二部分-实现响应式(2)

课程地址:【已完结】全网最详细Vue3源码解析!(一行行带你手写Vue3源码) 第二部分-实现响应式(2):(对应课程的第6-9节) 第6节:《实现proxy代理以及解决重复代…

GDB之(1)入门指令参数介绍

GDB之(1)基础入门指令参数介绍 Author:Once Day Date: 2022年7月29日/2024年2月26日 漫漫长路,才刚刚开始… 全系列文章请查看专栏: Linux实践记录_Once-Day的博客-CSDN博客 推荐参考文档: GDB: The GNU Project Debugger (sourceware.o…

32单片机基础:TIM定时中断

STM32中功能最强大,结构最复杂的一个外设——定时器 因为定时器的内容很多,所以本大节总共分为4个部分,8小节。 第一部分:主要讲定时器基本的定时功能,也就是定一个时间,然后让定时器每隔这个时间产生一个中断&#…

C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径

C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 参考博文: 1.C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 2.Linux笔记之LD_LIBRARY_PATH详解 3.qt-C++笔记之使用QProcess去执行一个可执行文件时指定动态库所存放的文件夹lib的路径 c…

适合新手博主站长使用的免费响应式WordPress博客主题JianYue

这款JianYue主题之所以命名为 JianYue,意思就是简单而不简约的。是根据Blogs主题优化而成,剔除了一些不必要的功能及排版,仅保留一种博客布局,让新手站长能够快速手上WordPress。可以说这款主题比较适合新手博主站长使用&#xff…

GDB动态调试学习-2-【断点 观察点】

文章目录 在程序地址上打断点在程序入口处打断点获取程序入口地址 在命名空间设置断点命名空间给命名空间的函数下断电 在文件行号上打断点保存已经设置的断点设置临时断点设置条件断点忽略断点 在程序地址上打断点 当调试汇编程序,或者没有调试信息的程序时&#…

【Rust】简介、安装和编译

文章目录 一、Rust简介二、Rust 安装三、Rust 程序结构3.1 模块(Modules):3.2 函数(Functions):3.3 变量(Variables):3.4 控制流(Control Flow)&a…

Verilog中向量的位截取、拼接

1、位截取: 当索引均为常数 例如:men[4:1]men[4-:4] men[1:4] 索引是变量 语法为:men[base:width] or men[base-:width] 例如:if cnt8, men[cnt:4] 等于 men[11:8]; men[cnt-:4] 等于men[8:5]. 其中,base可变&am…

el-table样式问题:如何修改element-ui表格中按钮悬浮显示但是被el-table溢出隐藏的问题?

最近在写elment-ui样式表格中遇到了溢出隐藏的问题 修改前 修改后 是由于el-table__body-wrapper为 overflow:hidden导致的 解决方式: .el-table__body-wrapper {overflow: visible !important; } //或者 /deep/.el-table__body-wrapper {overflow: v…

ONLYOFFICE 桌面编辑器 v8.0 更新内容详细攻略

文章目录 引言PDF 表单RTL 支持电子表格中的新增功能Moodle 集成用密码保护 PDF 文件从“开始”菜单快速创建文档本地界面主题下载安装桌面编辑工具总结 引言 官网链接: ONLYOFFICE 官方网址 ONLYOFFICE 桌面编辑器是一款免费的文档处理软件,适用于 Li…

主机字节序与网络字节序

大端序和小端序 大端序(Big Endian)和小端序(Little Endian)是两种计算机存储数据的方式。 大端序指的是将数据的高位字节存储在内存的低地址处,而将低位字节存储在内存的高地址处。这类似于我们阅读多位数时从左往右…

【电子书】研发管理

资料 wx:1945423050 整理了一些互联网电子书,推荐给大家 研发管理 ABAQUS 6.14中文版有限元分析与实例详解.epubAkka入门与实践.epubAltium Designer 16电路设计与仿真从入门到精通.epubAltium Designer17电子设计速成实战宝典.epubApache Kafka源码剖…