[并行与分布式程序设计] Flynn分类法 和 并行算法的评价指标

Flynn’s taxonomy

根据指令和数据能否同时执行, 将计算机系统分为四类:

  1. SISD (Single Instruction Single Data): 单指令, 单数据
  2. SIMD (Single Instruction Multiple Data): 单指令, 多数据
  3. MISD (Multiple Instruction Single Data): 多指令, 单数据
  4. MIMD (Multiple Instruction Multiple Data): 多指令, 多数据

SISD

  • 在单一的数据流上, 指令被顺序的执行.
  • 运行在这类计算机上的算法是完全串行的, 不存在任何并行.
  • 传统的冯诺依曼体系结构的计算机就是SISD系统

SIMD

  • 在个条数据流上执行同一个指令, 数据层面的并行.

  • 将多个数据流分配给多个运算单元, 所有运算单元同时处理每一步, 执行相同的命令(被同一个控制单元控制)

    • 没有被分配任务的运算单元空闲等待
    • 提前执行完的元算单元也需要等待
    • 运算单元没有指令的存储功能, 一次只能执行当时被分配的一个指令
      在这里插入图片描述
  • SIMD系统的一个典型应用是向量计算, 向量中的所有数同时进行相同的算术运算

  • 支持向量计算的处理器叫做向量处理器, 与传统只支持标量计算的处理不同, 向量处理器有以下特点:

    • 向量寄存器: 能够存储有多个操作数组成的向量
    • 向量化的功能单元: 同一个操作可以被应用到向量的每一个元素上
    • 向量化的指令: 用来计算向量的运算方法

MISD

  • 多个处理器由不同的控制单元控制, 在同一个数据流上分别执行不同的操作. 指令层面的并行

MIMD

  • 包含多个完整独立的处理单元, 每个处理单元都有自己的控制单元和运算单元, 可以针对分配到的数据执行不同的任务
  • 与SIMD的所有运算单元统一执行不同, MIMD的所有处理器没有统一的时钟, 每个处理器可以按照自己的节奏执行, 互不影响.
  • 根据处理器和内存之间的访问关系, MIMD分为两类
    • 共享内存系统
      • 所有处理器通过一个互联网络和内存系统相连
      • 每个处理器可以访问每一块内存
      • 处理器之间不是直接通信, 而是通过共享数据进行隐式通信
      • 通常包含一个或多个多核处理器
      • 共享内存系统分为两类
        • 一致存访问系统: 一般意义上的共享内存系统
          在这里插入图片描述
        • 非一致内存访问系统: 每个多核处理器单独与一块内存相连, 访问其余内存块时, 需要通过其余多核处理器, 访问速度较慢.
          在这里插入图片描述
    • 分布式内存系统
      • 最常见的类型就是集群: 多个服务器互相连接形成
      • 严格意义上来讲集群是一个混合系统, 每一个节点是一个共享内存系统, 多个节点相互连接形成分布式内存系统
        在这里插入图片描述
  • SPMD (SIngle Program Multiple Data): SIMD中的一种分类
    • 多线程控制, 但是每个处理器上拥有的都是相同的程序指令.
    • 只有一份可执行代码, 通过条件转移等语句, 让该代码表现得好像在不同处理器上执行不同程序(实际上不同程序执行的都是同一个程序).

并行算法性能的评价指标

加速比

  • 用来衡量使用并行方式解决问题所带来的性能提升. 加速比越大, 说明性能提升越多.
  • 假设使用单个处理单元解决问题的时间是Ts(也就是最快的串行算法时间), 使用p个相同的处理单元解决这个问题的时间是Tp(并行算法的时间), 那么加速比S= T s T p \frac{Ts}{Tp} TpTs
    • S=p : 线性加速比, 执行速度随着处理器数量的提升而加快, 也是理想加速比.
    • S<p: 现实中常见的加速比
    • S>p: 超线性加速比 (现实中存在)
  • 如果一个问题的解决有多个不同的串行算法, Ts指的是其中最快的那一个. 比如串行冒泡排序150s, 快排30s, 并行冒泡40s, 加速比S=30/40.

Amdahl’s Law

除非一个串行程序的执行几乎全部都并行化, 否则不论多少可利用的核, 通过并行化产生的加速比都会是受限的.

  • Amdahl 定律的推导
    • 理想化条件
      • 可并行部分为理想加速比
      • 算法的时间只包括程序的运行时间不包括调度通信等额外开销
    • 程序的串行算法时间Ts, 可并行化部分为 α \alpha α
      • 并行化程序时间Tp=Ts * (1- α \alpha α) + Ts * α \alpha α / p
      • 化简以后得S= T s T p \frac{Ts}{Tp} TpTs= 1 a p + 1 − a \frac{1}{\frac{a}{p}+1-a}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值