[并行计算]Matlab并行计算工具箱(Parallel Computing Toolbox)官方文档教程中文版(1)

2023-05-16

Arranged By Zhonglihao @ 2018

**请确认Matlab安装时点选了并行计算工具箱

第一章:parfor循环并行计算

parfor循环介绍

parfor循环是Matlab并行计算工具箱用于并行计算单循环的工具,并行度与CPU所具备的核心数有关,一般来说,经过处理的for循环都能够改为parfor循环以提高并行处理速度。Matlab中的CPU并行处理功能如下图所示进行开启,开启后也可以查看您的计算机具备多少个物理核心数(不支持超线程逻辑内核处理):

 

图1-1 点击Matlab软件左下角中图标

按”Start parallel pool”开启CPU多核并行计算

 

图1-2 图标显示蓝色条纹代表

处理器多核并行计算已启用

 

哪些场合适合和不适合开启并行计算:

·某些子循环所需要的计算量与其他子循环的计算量并不很相近,造成处理器需要等待最慢的一个自循环完成以继续同步物理核心,这种情况下使用并行没有很大的意义;

·一些简单的子循环例如蒙特卡洛仿真或参数扫描,这种情况下,多个核分配到的子任务稍短且时间消耗较为一致,此时使用并行计算是具有意义的;

·对于频繁读写内存的算法,开启并行计算并不是一个好的方案因为数据同步的时间消耗远超过计算的时间,此时并行的效率并不高,相反,如果一个算法较多的时间消耗在计算上而不是读写数据上,则使用并行计算会有较大的提升;

 

下面通过一个简单的例子说明如何把for循环改装为parfor循环:

Code #1-1
1.tic  
2.n = 200;  
3.A = 500;  
4.a = zeros(n);  
5.for i = 1:n  
6.a(i) = max(abs(eig(rand(A))));  
7.end  
8.toc  

如代码片1-1所示,该实例通过计算一个随机矩阵A的算法并把结果赋值到数组a中存储,循环内容之间计算是相互独立的,附加一个matlab的tic-toc语句来测量整片代码的计算时间,结果如下图所示:

 

作者使用的是笔记本处理器型号为i5-7200u,有2个物理内核,没经过并行计算优化时,代码的计算时间消耗为25.69秒左右。下面为经过parfor并行处理的代码片#1-2:

Code #1-2
1.tic  
2.ticBytes(gcp);  
3.n = 200;  
4.A = 500;  
5.a = zeros(n);  
6.parfor i = 1:n  
7.a(i) = max(abs(eig(rand(A))));  
8.end  
9.tocBytes(gcp)  
10.toc  

输出的结果为:

从上图中可以看到,在双核并行处理的作用下,处理时间从26秒提高到了16.8秒,理想时间应该为没有使用并行计算时间的二分之一,但其中的延迟包含了核心之间的同步和读写数据的延迟。

 

下面举一个使用parfor时效率并不高的例子

以下的代码片#1-3为通过循环产生一段正弦波信号数据:

Code #1-3
1.tic  
2.n = 1024;  
3.A = zeros(n);  
4.for i = 1:n  
5.A(i,:) = (1:n) .* sin(i*2*pi/1024);  
6.end  
7.toc  

改写为并行计算parfor:

Code #1-4
1.tic  
2.ticBytes(gcp);  
3.n = 1024;  
4.A = zeros(n);  
5.parfor (i = 1:n)  
6.A(i,:) = (1:n) .* sin(i*2*pi/1024);  
7.end  
8.tocBytes(gcp)  
9.toc  

从结果观察可以发现,代码改写为并行后速度并没有提升,反而比单核计算时要慢得多,是因为该代码片的数据传输量较大,导致多核处理时无法展现出优势。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[并行计算]Matlab并行计算工具箱(Parallel Computing Toolbox)官方文档教程中文版(1) 的相关文章

  • java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big解决方法

    1 报错如下 Exception in thread 34 main 34 java io IOException DerInputStream getLength lengthTag 61 111 too big at sun secur
  • POSIX 文件能力:分配根用户的能力

    Linux 多年来都使用能力 xff08 capability xff09 的概念 xff0c 但是最近实现了 POSIX 文件能力 POSIX 文件能力将根用户的权力划分成更小的特权 xff0c 比如读取文件或跟踪另一个用户拥有的进程 通
  • 解决 413 Request Entity Too Large(请求实体太大)

    今天做上传视频 xff0c 报错413 Request Entity Too Large 我们可以看到请求的body的大小 xff0c 在Content Length后显示 xff0c Nginx默认的request body为1M xff
  • Netty本身的编码解码的机制和问题分析

  • Protobuf基本介绍和使用

  • TCP粘包和拆包基本介绍

  • 我的大一学习生活总结

    今天最后的一科英语考完了 xff0c 但此刻的我并不觉的轻松 xff0c 我知道从现在开始就标志着我的大一已经结束了 xff0c 在大学仅有的四年时光就过去了四分之一 回想起大一这一年 xff0c 自问一下我到底学到了什么 xff1f 我发
  • 一个程序员的一生

    一个程序员的一生 作者 佚名 我在程序员的时候 xff0c 我一开始追逐这个API怎么用 xff0c 数据库SQL怎么写更优化 xff0c Dcom技术的细节 xff0c 然后我发现我写出来的产品为了符合客户 需求必须要大量修改 xff0c
  • E: Package ‘cmake‘ has no installation candidate

    在ubuntu中使用 sudo apt get install cmake 报错 xff1a E Package 39 cmake 39 has no installation candidate 解决方法 xff1a sudo apt g
  • 函数程序设计实验五:打印购物小票

    module HaskellStore where import Text Printf type Items 61 Item type Item 61 Name Amount Price type Name 61 String type
  • CSS实战——百度搜索首页

    成果 支持搜索内容 步骤 一般来说 xff1a 使用css 43 div进行页面的布局 xff0c css一般是用外联进行开发使用html进行每一个页面的填充 注意事项 id的命名规范 xff1a 父标签id 自己的idcss一般一个选择器
  • UNIX环境高级编程

    环境配置 1 下载apue 3e文件夹 xff0c 可以通过http www apuebook com code3e html现在源码 2 解压后执行进入apue 3e中执行make指令 如果出现 96 96 96 collect2 err
  • 常见的亮灭屏流程分析

    一 亮屏主要关键log 驱动按键时间 lt 3 gt 14082 058160 0 70 pmic thread kpd Power Key generate pressed 61 1 上层按键时间 09 25 15 13 07 19666
  • 冒烟测试和回归测试的区别

    每次新的版本出来的时候 xff0c 老大就让我们 冒烟 虽然不知道冒烟测试的含义 xff0c 但由于没有给用例 xff0c 我就随便跑跑 跑完冒烟后 xff0c 老大就让做 回归测试 xff0c 把bug回归掉 但是其实对2个概念还是不太理
  • 老旧电脑在虚拟机安装ubuntu运行环境的步骤及注意事项

    花了一天的时间在我的老电脑上用虚拟机装上了ubuntu xff0c 多灾多难 xff0c 记录一下问题和注意事项 老电脑的配置 xff1a cpu xff1a Intel Core TM 2 Duo CPU E7500 64 2 93GHz
  • x11vnc

    x11vnc display 0 auth guess rfbport 5900 forever shared noxdamage noncache repeat amp auth 关窗口退出 auth guess 关窗口不退出 用户注销退
  • 多个生产者和消费者线程

    span class token comment 作者 xff1a kuma 版本 xff1a v1 0 span span class token keyword public span span class token keyword
  • C/C++ 开源库及示例代码

    C C 43 43 开源库及示例代码 说明 本页面汇总俺收集的各种 C 和 C 43 43 的开源代码库 xff0c 不定期更新 如果你发现本页面的开源库有错漏之处 xff0c 非常欢迎给俺提供反馈 有 GitHub 帐号的同学 xff0c
  • UEFI分区的重建办法,不需要额外软件

    如果你的EFI分区还在 只是被破坏需要修复的话 xff0c 执行 bcdboot c windows l cn zh 即可 xff0c c是Windows安装的盘符 xff0c 如果是装机工具启动可能window的分区不是显示的c 如果连E
  • powershell 设置环境变量

    cmd 是用set 导出变量 xff0c 到了powershell中不好使了 xff0c 下面介绍下导出变量的方法 xff0c 比如想设置 ETCDCTL API 61 3 在powershell中执行下面命令就可以了 Env ETCDCT

随机推荐