从串行算法到并行算法

  • 从串行算法到并行算法
    • 分解模式:任务分解,数据分解,数据流分解
    • 任务分解
      • 分治策略
      • 几何分解模型
      • 递归数据模式
      • 流水线模式
    • 数据分解
      • 如何将数据分解成数据块?

分解模式:任务分解,数据分解,数据流分解

分解类型 设计
任务 计算被分解为一组独立的任务,多个线程可以用任意顺序执行这些任务
将不同的行为分配给不同的线程
数据 程序需要处理一个大型数据集,并且可以对数据集中的每个元素进行独立计算
令多个线程对不同的数据集执行同样的操作
数据流 一个线程的输出是第二个线程的输入,需要特别关注消除开始和结束的延迟
  • 任务分解:

    园丁问题,让每个园丁负责不同的工作,共同经营同一块草地

  • 数据分解:

    生命游戏问题,将棋盘划分为多个区域(多个子棋盘),每一区域分配线程独立进行计算,最后再整合得到新棋盘

    园丁问题,让每个园丁负责一小块草地

  • 数据流分解:

    由第一个任务引起的延迟为第二个任务产生一个暂停,在此之后两个任务才能并行运行。在计算机领域这样的模式经常发生。

    生产者消费者模型

任务分解

核心:串行->并行

技巧:将计算密集的代码分解(计算量大或耗时多的代码)

任务并行的3个元素

  • 任务和他们定义的方式()

  • 任务间的依赖性

  • 调度(任务怎样分配到执行单元)

    • 静态调度(Static Scheduling)

      • 计算开始时完成(提前人为定义好)
      • 简单,开销小
    • 动态调度(Dynamic Scheduling)
      • 任务之间的计算量是可变的或者是不可预测的(例如:输入数据大小不确定)
      • 随着计算的执行逐步把任务分配到各线程
      • 共享容器(队列)方式(通过线程池管理)

任务的数据至少与执行单元的数目一样多,越多越好,确保调度时有很大灵活性
与各个任务相关联的计算量必须足够多,以此来抵消与任务管理和处理任何依赖性相关的开销(粒度)

分治策略

  • 问题被划分为许多较小的子问题,独立求解每一个子问题,并将所有的子问题解决方案合并为整个问题的解决方案,从而求解整个问题

  • 子问题可以直接求解,或者可以再使用相同的分治策略求解,产生一个整体的递归程序结构

几何分解模型

实际上就是数据的并行化

递归数据模式

问题涉及对递归的数据结构的操作(如:列表,树,图)

流水线模式

  • 计算机不同粒度层次的流水线

    • CPU中的指令流水线
    • 向量处理(循环级流水线)
    • 算法级流水线
    • 信号处理
    • shell程序

数据分解

  • 问题中计算密集部分是围绕着一个大型数据结构的管理而组织的

  • 相似的操作应用于数据结构的不同部分,这样可以相对的操作数据结构中的不同部分

如何将数据分解成数据块?

核心:结合数据块的形状与数据的交互方法进行设计

  • 经验法则:体积与表面积比最大化

    • 体积:计算的粒度(计算量)
    • 表面积:需要交换数据的边界

a:粒度2*8=16,需要交换数据的边界为8,体积/表面积 = 2b:粒度4*4=16,需要交换数据的边界为4,体积/表面积 = 4则b比a更优
  • 能否进行数据分解

    • 基于数组的计算——>对数据进行划分
    • 递归数据结构——>重建为树结构并计算
  • 灵活性、效率、简单性讨论

从串行算法到并行算法相关推荐

  1. 基于串行并行ADMM算法的主从配电网分布式优化控制研究

    基于串行并行ADMM算法的主从配电网分布式优化控制研究 关键词:ADMM 串行并行算法 主动配电网 无功优化 分布式优化 参考文档:非复现,仅参考部分模型: 1)<主动配电网分布式无功优化控制方 ...

  2. 北斗导航 | 北斗卫星导航信号串行捕获算法MATLAB仿真(附源代码)

    ================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...

  3. 用matlab仿真导航信号,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)[互联网+]...

    <北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)[互联网+]>由会员分享,可在线阅读,更多相关<北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLA ...

  4. 用matlab仿真导航信号,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)...

    <北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)>由会员分享,可在线阅读,更多相关<北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)(9 ...

  5. 卫星测控matlab程序,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序).docx...

    PAGE 4 北斗卫星导航信号串行捕获算法MATLAB仿真报告 原理 卫星导航信号的串行捕获算法如图1所示. 图1 卫星导航信号的串行捕获算法 接收机始终在本地不停地产生对应某特定卫星的本地伪码,并且 ...

  6. 并行算法设计与性能优化 刘文志 第4章 串行代码性能优化

    一方面,串行代码优化有时能获得成千上万倍的加速:另一方面因为单个并行控制流的内部依旧是串行的. 一般而言,不同算法上的优化是最有效的.假设你已经有了一个能得到正确结果的程序,需要在此基础上进行优化,本 ...

  7. 水平集图像分割并行加速算法设计与实现(串行、OpenMP、CUDA)——串行实现篇

    本次水平集图像分割并行加速算法设计与实现包含:原理篇.串行实现篇.OpenMP并行实现篇与CUDA GPU并行实现篇四个部分.具体各篇章链接如下: 水平集图像分割并行加速算法设计与实现--原理篇 水平 ...

  8. 隐马尔科夫模型(HMM)的无监督学习算法java实现(baum-welch迭代求解),包括串行以及并行实现

    HMM的原理就不说了,这里主要说算法的实现. 实际实现起来并不是很困难,前提是你仔细看过hmm的原理,然后很多实现就照着公式写出对应的代码,比如前向算法,后向算法,参数更新都是有明确的公式的,只需要对 ...

  9. 动态串行机制多元宇宙优化算法

    文章目录 一.理论基础 1.多元宇宙优化算法 2.改进的多元宇宙优化算法 2.1 拉丁超立方种群初始化策略 2.2 黄金分割协作机制(SGF) 2.2.1 正余弦修正因子 2.2.2 高斯位移 2.2 ...

最新文章

  1. Java项目:花店商城系统(java+Springboot+Maven+mybatis+Vue+Mysql)
  2. 再谈RPC--长长的手,抓住了离去的你
  3. Visual Paradigm 教程[UML]:如何使用刻板印象和标记值?(上)
  4. javascript图书
  5. Java学习、简单代码编译
  6. shiro学习(4):shiro认证流程
  7. 离线安装 Android 4.0 SDK
  8. 计算机共享文件怎样添加,怎么添加另一台电脑的共享文件夹
  9. 分享17个网页设计中字体排版的优秀示例
  10. 用Prettier和ESlint来统一提交代码
  11. 学习完windows网络编程第一章后做的UDPTest程序
  12. Exchange 2013 创建发送连接器
  13. 毫米波雷达,超声波雷达,激光雷达,摄像雷达比较
  14. c语言达内月考试题,达内C培训第一次月考〔附答案〕.doc
  15. 全局序列比对 c语言实现,序列比对(一)——全局比对Needleman-Wunsch算法
  16. 变分法:在图像处理中的应用(一)
  17. 输入一个数字n输出n以内的素数
  18. Python筛选某列满足条件的值(isin用法)
  19. 霍尼韦尔启动在武汉的新兴市场中国总部;红牛商标所有者​天丝集团扩建在华生产基地 | 美通企业日报...
  20. 关于pdfobject.js在不同浏览器显示问题

热门文章

  1. [安卓开发板]迅为IMX6 四核Android开发板
  2. 袪除疾病的心法(十五)儿女教育篇
  3. ormlite android,如何使用ormLite在android中的现有实体中添加新字段?
  4. C语言实现PTA6-3 求集合数据的均方差
  5. 小明有N(4≤N≤60)个玻璃球,他想将N个玻璃球拆分成若干份(份数≥2,且每份中的数量互不相等),从而使拆分后的每份玻璃球数量的乘积最大。请你编写程序帮助小明计算出最大乘积是多少...
  6. observe数据代理
  7. html中单选按钮居中代码,Html单选按钮自定义样式(示例代码)
  8. 接入HMS Core应用内支付服务过程中一些常见问题总结
  9. Arduino-中断函数介绍和使用
  10. CCF CTO Club 16期活动记事——走进腾讯,实现连接