CPU 和流水线

  • CPU 组成
    • 数据通路
      • 指令执行过程中,数据经过的所有部件。
      • 属于 CPU 的执行部件,包括运算器、寄存器等。
    • 控制器
      • 对指令译码,生成控制信号,控制数据通路的动作。
      • 具体组成部分:
        • 指令部件
        • 时序部件
        • 微操作信号发生器
          • 组合逻辑型
          • 存储逻辑型:常用方式
          • 组合逻辑和存储逻辑结合型
        • 中断控制逻辑
  • 时序系统
    • 周期
      • 指令周期
        • 一条指令完成取指、译码、执行等各个步骤的完整时间。
        • 不同的指令功能不同,指令周期也不同。
      • 机器周期/CPU 周期
        • 完成一条指令处理的其中一个步骤需要的时间,指令周期包括若干机器周期。
        • 机器周期的长度可能相同,可能不同,取决于节拍的实现。
      • 节拍
        • 完成一个机器周期中的微操作需要的时间,机器周期包括若干节拍。
        • 节拍一般长度相同,机器周期包括的节拍数量可能不同。
        • 节拍的分类:
          • 统一节拍法:按照最复杂的机器周期为基准,所有机器周期都用相同数量的节拍。有节拍浪费。
          • 分散节拍法:各种机器周期按需分配节拍,完全没有浪费。
          • 延长节拍法:设定基本节拍数量,大部分机器周期固定使用基本节拍,其他机器周期额外使用更多节拍。基本节拍的浪费比最长的要少。
      • 工作脉冲
        • 一个节拍尾部产生的若干脉冲,给一些触发器等部件提供同步信号。
        • 基本上被时钟周期代替,时钟周期的上升沿和下降沿也可以起到同步作用。
      • 时钟周期
        • 时钟产生的基本周期,时序的最基本单位。一个节拍包括时钟周期。
        • 时钟周期基本上可以代替节拍,作用上基本相同。
    • 控制方式
      • 同步控制方式
      • 异步控制方式
      • 联合控制方式
  • 执行过程
    • 取指
      • (PC) -> MAR
      • M(MAR) -> MDR -> IR
      • (PC) + 1 -> PC
    • 取数
      • 这里指从主存取数。对于寄存器取数,则无需这么复杂。
      • (R0) -> MAR,其中 R0 为主存地址。
      • M(MAR) -> MDR -> Y
    • 执行
      • 运算指令
        • (R1) + Y -> Z
        • (Z) -> MDR -> M(MAR)
      • 转移指令
        • (PC) + A -> Z
        • 如果满足条件 (Z) -> PC
  • 微程序
    • 定义
      • 微指令:多个微指令组成指令,指令即微程序。
        • 指令由硬件解释器执行,转换为顺序执行一系列为指令。
      • 微命令:多个微命令组成微指令。微命令对应一个微操作。
        • 微命令一般是对特定部件作用的,所以不同微命令可能可以并行执行。
        • 一条微指令的微操作码编码一次同时执行的所有的微命令,多个部分操作组成整体操作。
    • 微操作码编码
      • 直接控制法
        • 所有的微命令都对应一个二进制位,微指令可以任意选择微命令集合。
        • 优点:执行速度快,并行性强。
        • 缺点:微指令太长,可以编码互斥的微命令集合。
      • 最短编码法
        • 一个微指令只执行一个微命令,编码直接设计为微命令编号。
        • 优点:微指令长度短,控制字段只需要 log2N\lceil log_2 N \rceil 位。
      • 字段编码法
        • 把微命令按照互斥关系分组,互斥的微命令用一个字段译码选择,不互斥的微命令用不同字段表示。
        • 一个 nn 位的字段,用其中一个表示不操作,剩下 2n12^n - 1 表示各个互斥的微命令。
  • 流水线
    • 分类
      • 线性/非线性:
        • 线性流水线:每个段恰好流过一次,从前往后连接。
        • 非线性流水线:可以有前馈回路和反馈回路。
          • 图中的反馈回路默认回流一次,此后不回流。
      • 其他。
    • 指标
      • 吞吐率
        • 最大吞吐量:理论上无限运行情况下的吞吐率,取决于流水段的瓶颈。
          • TPmax=1ΔtmaxTP_{\max} = \dfrac{1}{\Delta t_{\max}}
        • 实际吞吐率:处理给定有限数量的任务的吞吐率。
          • TP=ni=1mΔti+(n1)ΔtmaxTP = \dfrac{n}{\sum_{i = 1}^m \Delta t_i + (n - 1) \Delta t_{\max}}
        • 提高吞吐量的方法:
          • 细分瓶颈段为更多更小的段。
          • 重复设置瓶颈段,轮流使用不同的段。
      • 加速比
        • Sp=TsequentialTpipelineS_p = \dfrac{T_{\text{sequential}}}{T_{\text{pipeline}}}
      • 效率
        • 效率为一段时间内各流水段的使用时间占比的平均值。
        • 对于一段时间 TT,效率为流水线时空图上 mm 段与 TT 的矩形面积,和段实际覆盖面积的比值。
    • 非线性流水线调度和预约表
      • 预约表表示一个部件的各个段的占用情况:
        • 横轴是时间段,一列表示当前时间段内的流水段占用。
        • 纵轴时流水段,一行表示此段在不同时间的占用。
      • 禁止向量 FF:表示会导致冲突的调度时间间隔。
        • 考虑每一行所有占用的位置,如果 i,ji, j 时间段被占用,则 jij - i 间隔会导致冲突。
        • 把每一行的所有冲突情况合并得到集合 FF,即禁止向量。
      • 初始冲突向量 CC:如果 iFi \in F,则禁止向量 CC 中从低位开始第 ii 位为 11,最低位为 11
      • 冲突向量状态转移:设当前状态为 CaC_aCaC_a 的第 ii 位为 00,则可以以 ii 为时间间隔调度下一个任务。
        • CaC_a 逻辑右移 ii 位得到向量 CaC_a',即 ii 时间间隔后、未调度新任务前的冲突情况。
        • CaC_a'CC 按位或得到 CbC_b,即 ii 时间间隔后、调度新任务后的冲突情况,是一个状态向量。
        • 所有的状态向量连接为状态图,边为间隔时间:
          • 平均启动距离:状态图上的路径的间隔时间平均值。
          • 最小启动循环:状态转移为从初始冲突向量开始的环,且平均启动距离最小。