11-指令流水

发布时间 2023-06-14 19:43:46作者: Oh,mydream!

三、指令周期

一、如何提高机器速度

  1. 提高访存速度
    高速芯片 Cache 多体并行
  2. 提高I/O和主机之间的传送速度
    中断 DMA 通道 I/O处理机 多总线
  3. 提高运算速度
    高速芯片 改进算法 快速进位链
  4. 提高整机处理能力
    高速器件 改进系统结构,开发系统的并行性

二、系统的并行性

  1. 并行的概念
    并行:
    • 并发:两个或两个以上时间再同一时间段发生
    • 同时:两个或两个以上时间再同一时刻发生
  2. 并行性的等级
    过程级(程序、进程) 粗粒度 软件实现
    指令集(指令之间、指令内部)细粒度 硬件实现

三、指令流水原理

  1. 指令的串行执行
    取指令 取指令部件 完成
    执行指令 执行指令部件 完成

    如果采用执行的串行执行,则取指令阶段 执行指令部件空闲;执行指令阶段取指令部件空闲

  2. 指令的二级流水
    第一条指令在执行指令的时候,第二条指令开始取指令操作
    若取指和执行阶段时间上完全重叠,指令周期减半 速度提高1倍

  3. 影响指令流水效率加倍的因素
    1) 执行时间>取指时间 可以在取指令部件和执行指令部件中间加一个指令部件缓冲区,如果指令指令部件还没有让出,就先将指令放在指令部件缓冲区中
    2) 条件转移指令 对指令流水的影响:必须等上条指令执行结束,才能确定下条指令的地址 造成时间损失 可以进行指令预测

  4. 指令的六级流水

四、影响指令流水线性能的因素

  1. 结构相关 不同指令争用同一功能部件产生资源冲突
    解决办法:

    • 停顿
    • 指令存储器和数据存储器分开
    • 指令预取技术(适用于访存周期短的情况)
  2. 数据相关 不同指令因重叠操作,可能改变操作数的 读/写 访问顺序
    写后读相关(RAW)
    读后写相关(WAR)
    写后写相关(WAW)
    解决办法:

    • 后推法:推后读,在上一条指令结束后,再执行下一条指令
    • 采用旁路技术 在上一条指令运算器有结果输出后,直接给到下一个运算器的输入端来节省时间
  3. 控制相关 由转移指令引发 转移指令只有在上一条指令结束后,才知道下一条指令是哪一条,就造成了时间的浪费

  4. 流水线性能
    1)吞吐率 单位时间内流水线所完成指令或输出结果的数量 设m段的流水线各段时间为△t

    • 最大吞吐率$T_pmax=1/△t$
    • 实际吞吐率 连续处理n条指令的吞吐率为$T_p=n/(m*△t+(n-1)△t)$
      2)加速比 m段的流水线速度与等功能的非流水线速度之比 设m段的流水线各段时间为△t
    • 完成n调指令在m段流水线上共需$T=m△t+(n-1)△t$
    • 完成n调指令在等效的非流水线上共需$T'=nm△t$
      加速比 $S_p=nm/(m+n-1)$
      3)效率 流水线中各功能段的利用率
      由于流水线有建立时间和排空时间 因此各功能段的设备不可能一直处于工作状态
      效率=流水线各段处于工作时间的时空区/流水线中各段总的时空区=mn△t/m(m+n-1)△t

五、流水线的多发技术

  1. 超标量技术
    • 每个时钟周期内可并发多条独立指令
      配置多个功能部件
    • 不能调整指令的执行顺序
      通过编译优化技术,把可并行执行的指令搭配起来
  2. 超流水线技术(使用广泛)
    • 在一个时钟周期内再分段(3段)
      在一个时钟周期内一个功能部件使用多次(3次)
    • 不能调整指令的执行顺序
      靠编译程序解决优化问题
      流水线速度最大可达到原来的3倍
  3. 超长指令字技术
    • 由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条,具有多个操作码字段的超长指令字(可达几百位)
    • 采用多个处理部件

六、流水线结构

  1. 指令流水线结构
    完成一条指令分6段,每段需一个时钟周期(不同cpu不一样)
    取指令部件->指令译码部件->地址形成部件->取操作数部件->操作执行部件->回写结果部件
    若流水线不出现断流 1个时钟周期出1个结果
    不采用流水线技术 6个始终周期出一个结果
    理想情况下,6级流水的速度是不采用流水技术的6倍
    每个部件都需要锁存
  2. 运算流水线
    完成浮点加减运算 可分 对阶、尾数求和、规格化三段
    每一段后面都要加锁存器
    分段原则 每段操作时间尽量一直