从串行算法到并行算法
从串行算法到并行算法
- 从串行算法到并行算法
- 分解模式:任务分解,数据分解,数据流分解
- 任务分解
- 分治策略
- 几何分解模型
- 递归数据模式
- 流水线模式
- 数据分解
- 如何将数据分解成数据块?
分解模式:任务分解,数据分解,数据流分解
分解类型 | 设计 |
---|---|
任务 |
计算被分解为一组独立的任务,多个线程可以用任意顺序执行这些任务 将不同的行为分配给不同的线程 |
数据 |
程序需要处理一个大型数据集,并且可以对数据集中的每个元素进行独立计算 令多个线程对不同的数据集执行同样的操作 |
数据流 | 一个线程的输出是第二个线程的输入,需要特别关注消除开始和结束的延迟 |
任务分解:
园丁问题,让每个园丁负责不同的工作,共同经营同一块草地
数据分解:
生命游戏问题,将棋盘划分为多个区域(多个子棋盘),每一区域分配线程独立进行计算,最后再整合得到新棋盘
园丁问题,让每个园丁负责一小块草地
数据流分解:
由第一个任务引起的延迟为第二个任务产生一个暂停,在此之后两个任务才能并行运行。在计算机领域这样的模式经常发生。
生产者消费者模型
任务分解
核心:串行->并行
技巧:将计算密集的代码分解(计算量大或耗时多的代码)
任务并行的3个元素
任务和他们定义的方式()
任务间的依赖性
调度(任务怎样分配到执行单元)
- 静态调度(Static Scheduling)
- 计算开始时完成(提前人为定义好)
- 简单,开销小
- 动态调度(Dynamic Scheduling)
- 任务之间的计算量是可变的或者是不可预测的(例如:输入数据大小不确定)
- 随着计算的执行逐步把任务分配到各线程
- 共享容器(队列)方式(通过线程池管理)
- 静态调度(Static Scheduling)
任务的数据至少与执行单元的数目一样多,越多越好,确保调度时有很大灵活性
与各个任务相关联的计算量必须足够多,以此来抵消与任务管理和处理任何依赖性相关的开销(粒度)
分治策略
问题被划分为许多较小的子问题,独立求解每一个子问题,并将所有的子问题解决方案合并为整个问题的解决方案,从而求解整个问题
子问题可以直接求解,或者可以再使用相同的分治策略求解,产生一个整体的递归程序结构
几何分解模型
实际上就是数据的并行化
递归数据模式
问题涉及对递归的数据结构的操作(如:列表,树,图)
流水线模式
计算机不同粒度层次的流水线
- CPU中的指令流水线
- 向量处理(循环级流水线)
- 算法级流水线
- 信号处理
- 图
- shell程序
数据分解
问题中计算密集部分是围绕着一个大型数据结构的管理而组织的
相似的操作应用于数据结构的不同部分,这样可以相对的操作数据结构中的不同部分
如何将数据分解成数据块?
核心:结合数据块的形状与数据的交互方法进行设计
经验法则:体积与表面积比最大化
- 体积:计算的粒度(计算量)
- 表面积:需要交换数据的边界
a:粒度2*8=16,需要交换数据的边界为8,体积/表面积 = 2b:粒度4*4=16,需要交换数据的边界为4,体积/表面积 = 4则b比a更优
能否进行数据分解
- 基于数组的计算——>对数据进行划分
- 递归数据结构——>重建为树结构并计算
灵活性、效率、简单性讨论
从串行算法到并行算法相关推荐
- 基于串行并行ADMM算法的主从配电网分布式优化控制研究
基于串行并行ADMM算法的主从配电网分布式优化控制研究 关键词:ADMM 串行并行算法 主动配电网 无功优化 分布式优化 参考文档:非复现,仅参考部分模型: 1)<主动配电网分布式无功优化控制方 ...
- 北斗导航 | 北斗卫星导航信号串行捕获算法MATLAB仿真(附源代码)
================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...
- 用matlab仿真导航信号,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)[互联网+]...
<北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)[互联网+]>由会员分享,可在线阅读,更多相关<北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLA ...
- 用matlab仿真导航信号,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)...
<北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)>由会员分享,可在线阅读,更多相关<北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)(9 ...
- 卫星测控matlab程序,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序).docx...
PAGE 4 北斗卫星导航信号串行捕获算法MATLAB仿真报告 原理 卫星导航信号的串行捕获算法如图1所示. 图1 卫星导航信号的串行捕获算法 接收机始终在本地不停地产生对应某特定卫星的本地伪码,并且 ...
- 并行算法设计与性能优化 刘文志 第4章 串行代码性能优化
一方面,串行代码优化有时能获得成千上万倍的加速:另一方面因为单个并行控制流的内部依旧是串行的. 一般而言,不同算法上的优化是最有效的.假设你已经有了一个能得到正确结果的程序,需要在此基础上进行优化,本 ...
- 水平集图像分割并行加速算法设计与实现(串行、OpenMP、CUDA)——串行实现篇
本次水平集图像分割并行加速算法设计与实现包含:原理篇.串行实现篇.OpenMP并行实现篇与CUDA GPU并行实现篇四个部分.具体各篇章链接如下: 水平集图像分割并行加速算法设计与实现--原理篇 水平 ...
- 隐马尔科夫模型(HMM)的无监督学习算法java实现(baum-welch迭代求解),包括串行以及并行实现
HMM的原理就不说了,这里主要说算法的实现. 实际实现起来并不是很困难,前提是你仔细看过hmm的原理,然后很多实现就照着公式写出对应的代码,比如前向算法,后向算法,参数更新都是有明确的公式的,只需要对 ...
- 动态串行机制多元宇宙优化算法
文章目录 一.理论基础 1.多元宇宙优化算法 2.改进的多元宇宙优化算法 2.1 拉丁超立方种群初始化策略 2.2 黄金分割协作机制(SGF) 2.2.1 正余弦修正因子 2.2.2 高斯位移 2.2 ...
最新文章
- Java项目:花店商城系统(java+Springboot+Maven+mybatis+Vue+Mysql)
- 再谈RPC--长长的手,抓住了离去的你
- Visual Paradigm 教程[UML]:如何使用刻板印象和标记值?(上)
- javascript图书
- Java学习、简单代码编译
- shiro学习(4):shiro认证流程
- 离线安装 Android 4.0 SDK
- 计算机共享文件怎样添加,怎么添加另一台电脑的共享文件夹
- 分享17个网页设计中字体排版的优秀示例
- 用Prettier和ESlint来统一提交代码
- 学习完windows网络编程第一章后做的UDPTest程序
- Exchange 2013 创建发送连接器
- 毫米波雷达,超声波雷达,激光雷达,摄像雷达比较
- c语言达内月考试题,达内C培训第一次月考〔附答案〕.doc
- 全局序列比对 c语言实现,序列比对(一)——全局比对Needleman-Wunsch算法
- 变分法:在图像处理中的应用(一)
- 输入一个数字n输出n以内的素数
- Python筛选某列满足条件的值(isin用法)
- 霍尼韦尔启动在武汉的新兴市场中国总部;红牛商标所有者​天丝集团扩建在华生产基地 | 美通企业日报...
- 关于pdfobject.js在不同浏览器显示问题
热门文章
- [安卓开发板]迅为IMX6 四核Android开发板
- 袪除疾病的心法(十五)儿女教育篇
- ormlite android,如何使用ormLite在android中的现有实体中添加新字段?
- C语言实现PTA6-3 求集合数据的均方差
- 小明有N(4≤N≤60)个玻璃球,他想将N个玻璃球拆分成若干份(份数≥2,且每份中的数量互不相等),从而使拆分后的每份玻璃球数量的乘积最大。请你编写程序帮助小明计算出最大乘积是多少...
- observe数据代理
- html中单选按钮居中代码,Html单选按钮自定义样式(示例代码)
- 接入HMS Core应用内支付服务过程中一些常见问题总结
- Arduino-中断函数介绍和使用
- CCF CTO Club 16期活动记事——走进腾讯,实现连接