指令流水线

复习volatile关键字,由于volatile禁止指令重排序想到指令流水线,想当然的以为禁止指令重排序禁止的是CPU指令执行时的CPU时钟周期的延迟,后查阅相关资料发现指令重排序与此无关,便复习了一下指令流水线。

CPU指令执行过程

几乎所有的冯·诺依曼型计算机的CPU,其工作都可以划分为5个阶段:取指令指令译码执行指令访存取数结果写回

  • 取指令阶段是将内存中的指令读取到CPU中寄存器的过程,**程序计数器(PC)**用于存储下一条指令执行的地址。
  • 指令译码阶段,在取指令完成后,立马进入指令译码阶段,在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进行拆分解释,识别区分出不同的指令类别以及各种获取操作数的方法。
  • 执行指令阶段,译码完成后,就需要执行这一指令,此阶段的任务是完成指令所规定的的各种操作,具体实现指令的功能。
  • 访存取数阶段,根据指令的需要,有可能需要从内存中提取数据,此阶段的任务是根据指令地址码得到操作数在主存中的地址,并从主存中读取该操作数用来计算。
  • 结果写回阶段,作为最后一个阶段,结果写回阶段把执行指令阶段的运行结果写回到某种存储器中,结果数据经常被写回CPU的内部寄存器中,以便被后续的指令快速的存取。

指令流水线

定义:指令执行过程分为多个阶段,每个阶段需要的资源不一样,因此可以采用流水线技术,同时执行多条指令的不同阶段。

原理:将指令周期分为5个阶段,取指FI指令译码DI执行指令EI取操作数FO写操作数WO,可以实现指令的5级流水

指令流水线_第1张图片

影响流水线性能因素

  • 资源相关:不同指令争用同一部件产生资源冲突

  • 数据相关:不同指令重叠操作,可能改变对操作数的读写访问顺序,数据相关冲突有:写后读,读后写,写后写

    名称 代码示例 说明
    写后读 a = 1;b = a; 写一个变量之后,再读这个位置。
    写后写 a = 1;a = 2; 写一个变量之后,再写这个变量。
    读后写 a = b;b = 1; 读一个变量之后,再写这个变量。
  • 控制相关:由转移指令引起若是条件转移指令,则转移目标地址可能发生跳转,影响流水线效率

你可能感兴趣的:(计算机组成原理,cpu)