笔者:YY同学
基本概念
- CPI:Cycle Per Instruction,单位指令时钟周期数
- Cycle Time:周期时间,处理器完成一个周期所需的时间,需要在出厂时设定,属于物理极限
- 执行时间 = 指令数目 x CPI x Cycle Time
- 性能 = 1 / 执行时间
单周期处理器
- CPI = 1
- 以指令为单位,对于每条指令而言,都需要耗费 1 个时钟周期
- 在物理设计上,cycle time 必须统一标准,因此 cycle time 一般取决于耗时最长的指令 lw(lw需要干的事情最多),当指令中只有少数 lw 指令时,就会产生时间上的浪费
- 单位指令执行时间 = 1 * T(T 为耗时最长指令的 cycle time)
多周期处理器
- 提出划分阶段的思想,将每一条指令拆分为 5 个阶段:IF(Instruction Fetch,指令获取),ID(Instruction Decode,指令解码),EX(Execution,指令执行),MEM(Memory Access,内存读写)和 WB(Write Back to Register,写回寄存器)
- CPI 一般为 N( N 代表阶段数目,一般情况下 N = 5 )
- 依然以指令为单位,只不过一条指令被分为更细的几个阶段来执行,这样可以减少阶段数不同引起的单位指令执行时间的误差。例如 lw 指令需要经历全部的 5 个阶段,但是 sw 指令则只需要经历 4 个阶段(没有 WB),因此当一定数量的等量 lw 和 sw 指令连续出现的时候,平均阶段数会趋近于 4.5,而在单周期处理器中则是 5(为了考虑 lw),很明显后者的误差会更大一些
- cycle time 取决于耗时最长的阶段(一般是 MEM)
- 单位指令执行时间 = N * ( T / N )(取平均值,CPI * 平均 cycle time,平均 cycle time 近似为总时长的 1/N)
流水线处理器
- 在多周期处理器的基础上进一步优化
- 平均 CPI 为 1(当指令数量很大 > 10000 时,最开始 4 个 cycle 的指令填充和 最后 4 个 cycle 的指令排空可以忽略不计,可以近似认为执行 m 条指令消耗 m( m >> 8 )个时钟周期,因此平均 CPI = 1)
- 不再以指令为单位。与多周期不同,流水线以每个阶段为单位,一个阶段内可能有多条指令在同时执行(并行)。例如当一条指令在 EX 阶段时,它的上一条指令可能在 MEM 阶段,而下一条指令可能在 ID 阶段,理论上它们是同时执行的
- cycle time 取决于耗时最长的阶段(一般是 MEM)
- 单位指令执行时间 = 1 * ( T / N )
- 可能存在三类冒险问题:结构冒险( Structural Hazard )、数据冒险( Data Hazard )以及控制冒险( Control Hazard )