处理器结构--PipeLine&SuperScalar

时间:2022-06-13
本文章向大家介绍处理器结构--PipeLine&SuperScalar,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

PipeLine由来

最初开始,指令一条一条顺序执行,后来当工艺进步了,CPU中的元件越来越多,而在原来的顺序执行的过程中,只有一条指令的某一个阶段在执行,如取指,取数据等等,其他元件都处于等待的状态,于是为了提高CPU吞吐量,以及指令并行的效率,于是PipeLine应运而生

5级PipeLine

PipeLine原理

PipeLine是指将计算机指令处理过程拆分为多个步骤,并通过多个硬件处理单元并行执行来加快指令执行速度。其具体执行过程类似工厂中的流水线,并因此得名。

  • 把一个重复的过程分解为若干子过程
  • 每个子过程可以与其它子过程并行进行
  • 将每个指令分解成取指,译码,执行,写回等阶段
  • 将分解的每个阶段交给不同的元件进行处理

虽然分解完后,每个指令需要多个cycle后才能完成,但是通过多个指令的并行运算每个讯号内一个指令可以完成,因此通过这个方法整个速度可以提高

PipeLine

PipeLine的风险与问题(Harzard)

假如,一个指令在执行的时候,需要等待流水线上前一个指令先执行完毕的话,那么这两个指令相互之间彼此有依赖关系。这可能导致流水线冲突的现象发生。以下三种冲突情况可能出现:

  • 资源冲突:流水线上的一个指令需要使用已经被另一个指令占据的资源,多条指令同时访问同一个硬件单元,目前L1缓存已经被分为指令缓存和数据缓存,所以原来有的结构冲突也就没有了
  • 数据冲突:
    • 指令层的数据冲突:指令需要的数据还没有计算出来,如下指令,R1中的值还未写回寄存器,下条指令就需要使用
// 前后指令间存在数据相关性,由于流水线导致read before write
// 上条指令还没将结果写回reg,后面的指令就错误操作了reg中之前的数据
add R1,R2,R3;
add R4,R1,R5;
  • 传输层的数据冲突:指令需要的暂存器(register)内容还没有被存入暂存器
  • 控制流冲突:流水线必须等待一个有条件Goto指令是否会被执行。

这些冲突导致相对应的指令,必须在流水线的开始处等候,这会在流水线上导致空缺。这样的话流水线就不能顺利运行,处理速度便开始下降。因此要尽量避免这样的冲突。

PipeLine的解决方案

  • 资源冲突 通过增加功能单位可以解决资源冲突,通常CPU中有很多通用寄存器,x86有8个通用寄存器,Arm有16个,但是RISC处理器通常会内置32或者64个寄存器堆(Register File)以供使用。通过把流水线后面的计算结果立刻向前传可以避免许多数据冲突。通过RAT(Register Alias Table)将指令中寄存器进行重命名,以达到寄存器的充分利用以及数据计算的分离。
  • 数据冲突 使用out-of-order(ROB,RRF)执行;在冲突指令间插入不相关指令;Forwarding,上条指令的数据有效后就直接送个下条指令而不是先写回存储器;插入Nop空指令(软件解决,但是不好)等。

Forwading

  • 控制流冲突 通过分支预测器(BTB,Static Predictor)可以减少控制冲突。在这里处理器预测性地继续运算,直到正式预测是正确为止。假如预测错误的话那么在其中已经执行的指令要被推翻。尤其流水线非常长的处理器(比如英特尔的奔腾4或者IBM的PowerPC在这种情况下要浪费许多时间。因此这些处理器拥有非常高级的分支预测技术,只有百分之一的分支预测会发生错误,其流水线需要清除。

控制流冲突

超标量(SuperScalar)的概念

处理器的内核中一般有多个执行单元(或称功能单元),如算术逻辑单元、位移单元、乘法器等等。未实现超标量体系结构时,CPU在每个时钟周期仅执行单条指令,因此仅有一个执行单元在工作,其它执行单元空闲。超标量体系结构的CPU在一个时钟周期可以同时分派(dispatching)多条指令在不同的执行单元中被执行,这就实现了指令级的并行。

超标量流水线

超标量实现原理

标量流水线在运行的过程中,每一个Cycle只取一条指令,发射的时候也只发射一条指令。 而超标量流水线是指在取指的时候,某一时刻读取N条指令(X86 Nehalem每次读4条指令共16bytes),然后将N条指令同时解码(4个解码器),并且解码完毕后将解码完毕的Micro Ops交付给ALU执行,最后在一个cycle内将执行结果分发。就称为这样的流水线为N级发射超标量流水线。

即:在同一时刻,有多条指令被读取,译码,执行,存储,写回。

ARM Cortex-A9超标量流水线

X86 Nehalem4发射16级超标量流水线

ARM与X86比较

参考资料

http://www-inst.eecs.berkeley.edu/~cs61c/sp15/lec/13/2015Sp-CS61C-L13-kavs-Pipelining-1up.pdf https://compas.cs.stonybrook.edu/~nhonarmand/courses/sp16/cse502/slides/06-pipelining.pdf https://www.zhihu.com/question/35024996/answer/62322067 https://www.coursera.org/learn/jisuanji-zucheng/lecture/dL6g2/604-liu-shui-xian-de-mou-xian