计算机组成原理 笔记6


Pipeline

Overview

  • IF 阶段与 MEM 阶段, 一个周期内无法完成访存, 需要将其他部件全部卡住.
  • 单周期比多周期 CPI 低, 但是多周期可以提高时钟频率, 在性能上更好.
  • 流水线过长, 一定程度能够均分各阶段延迟, 但会引入流水线寄存器带来的固定延迟.
  • 如何清空流水线? 插入气泡, 拒绝写寄存器、写内存等时序逻辑.
  • 为什么加速比 < 流水段数?
    • 流水段执行时间不等, 部分流水段时间过长;
    • 流水线寄存器延迟;
    • 插入气泡废弃指令.
  • 组合逻辑: 进入 ID 阶段即完成译码, 进入 EXE 阶段即完成执行.
  • 时序逻辑: 进入 IF\MEM 阶段, 等待访存; 进入 WB 阶段, 下一周期写入完成.
  • 从后向前生成控制信号, 避免信号生成遗漏.

Conflicts

  • 由 Von-Neumann 体系结构中指令的执行过程决定.
  • 结构冲突: 硬件资源不足.
    • 当 load 指令在 MEM 阶段和任意指令在 IF 阶段同时访存, 用 stall 信号卡住 MEM 阶段及以前的指令, 用 bubble 信号排空 WB 阶段的指令.
    • 当 load 指令在 WB 阶段和其他指令在 ID 阶段同时读写寄存器, 增设读写端口避免冲突. 寄存器读是组合逻辑, 寄存器写是时序逻辑.
    • 通过设置 I-cache 和 D-cache 增加资源.
  • 数据冲突: 读后写冲突, 指令依赖于前面指令的结果数据.
    • 当读写寄存器次序冲突, 用 stall 信号卡住 ID 阶段的指令, 用 bubble 信号排空 EXE 阶段的指令.
    • 当读写寄存器次序冲突, 使用数据旁路将 EXE 阶段的数据前传至 ID 阶段; 若为 load use 冲突, 只能使用 stall-bubble 方法, 并在 WB 阶段前传.
  • 控制冲突: 执行分支转移类指令.
    • 暂停流水线: 发现分支指令, 暂停流水线, 判断是否分支.
    • 预测分支不成功: IF 阶段直接取后续指令, ID\EXE 阶段判断是否分支.
    • 预测分支成功: ID 阶段计算分支地址并转移, ID\EXE 阶段判断是否分支.
    • 动态预测: 使用 BTB 表, 用 inst[11:2] 作为索引存储分支指令 inst[31:12] 和分支目标的映射. IF 阶段读取 BTB, ID\EXE 阶段计算分支目标地址和分支结果, 并填入 BTB.
  • 卡住+气泡的延迟方法是万能的, 相当于将流水线处理器退化为多周期处理器.

文章作者: Chengsx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Chengsx !
  目录