Skip to content

Ch4.DLP

SISD: 单指令单数据 单个处理器 可以利用指令级并行提高 SIMD: 一条指令多数据流 SIMD三种变体:Vector,向量处理,以vector为基本粒度;SIMD,AVX指令集,支持多数据并行处理;GPU, SIMT异构体系。 MIMD: 多个处理器之间实现的 每个处理器做的是不同任务

这一章讲SIMD

  • 不会考array processor
  • 重点考vector processor

SIMD: vector

读题, 根据题目分析

处理方式

Example

D=A(B+C)

  • Horizontal processing

    d[i]=a[i]*(b[i]+c[i]);
    d[i+1]=a[i+1]*(b[i+1]+c[i+1]);
    

  • Vertical processing

    K=B+C
    D=A*K
    

  • 但是vertical要求每个向量不能太大。分组 组内纵向,组间横向

冲突

  • Vi conflict: 向量寄存器有依赖关系。指令2必须等指令1 向量的 第一个 元素计算完,才开始计算
  • Functional conflict: 结构冲突 两个都是乘法,用到同一个功能部件,无法并行执行。 指令2必须等指令1的 所有元素 计算完才能开始。

周期数计算

注意向量功能内部也是流水线。操作数一个一个进来

Example

load/store 6 加法6 乘法7
这里假设把数据从寄存器送到功能部件需要一拍,功能部件的结果写回到寄存器也需要一拍。把数据从内存送到 fetch function unit 需要一拍。

V3 <- A
V2 <- V0+V1
V4 <- V2+v3
  1. serial: 前一个指令全部元素执行完 再执行下一个: V0,V1第一个元素到V2 需要1+6+1 接下来还有N-1个元素 所以要(8+N-1)+(8+N-1)+(9+N-1)=3N+22
  2. 前两个并行,第三个串行
  3. link: 相当于把3个指令的流水线连起来,看成一整条流水线 V4的第一个结果需要max(1+6+1,1+6+1)+1+7+1=17 17+N-1=N+16

LLP

怎么消除数据依赖

Comments