1.指令集体系

  • 内存:概念上来说是一个很大的字节数组,保存程序和数据
  • 虚拟内存:引用内存位置,硬件和操作系统软件联合将虚拟地址翻译成实际或物理地址
  • 程序码:指示程序执行的总体状态
  • 指令集:每一个不同类型的指令都有着不一样的起始字节,根据类型的不同编码的长度和格式也不一样,表达不同的含义,每个字节编码必须有唯一的解释

2.指令顺序实现

指令实现阶段:取值、译码、执行、访存、写回、更新

  • 取值:从内容中读取指令字节,地址为程序计数器的值
  • 译码:从寄存器文件中读入最多两个操作数
  • 执行:算术/逻辑达摩院执行指令操作,计算内容引用有效地址;增加或减少栈指针

检验条件码和传送条件,条件成立则更新目标寄存器,决定分支

  • 访存:数据写入内存,内存读出数据
  • 写回:最多将两个结果写回到寄存器文件
  • 更新:将PC设置为下一条指令地址

HardwareWork

3.流水线原理

单独的处理每一个指令周期效率很低,所以需要以流水线的方式来进行设计。流水线的每一部分可以处理一个阶段的操作,这样可以同时运行多条指令。

作用

会导致延迟加大,但吞吐量大大提升

局限性

  1. 各单元阶段划分不一致
  2. 流水线阶段划分过多降低性能

分支预测

利用分支预测提前预测选择分支,加速运行

流水线冒险

相邻指令之间存在相关时会出现问题,分为数据冒险与控制冒险

  • 数据冒险: 下一条指令会用到这一条指令计算结果
  1. 用暂停避免数据冒险:直到指令计算结果写回再进行下一条指令
  2. 用转发避免数据冒险:把指令结果直接从一个流水线阶段传到较早阶段
  3. 加载/使用数据冒险:暂停+转发
  • 控制冒险: 一条指令需确定下一条指令位置
  1. 取消预测错误指令