【计算机组成原理·考研】指令流水线

1.概念

1.1 时间上的并行技术/流水线技术

将一个任务划分为几个不同的阶段,每个阶段在不同部件上并行执行,这样就可以在同一时刻中执行多个任务。

1.2 空间上的并行技术

在同一个处理机内,设置多个执行相同任务的功能部件,并让这些部件并行执行。这样的处理机也叫超标量处理机。

1.3 指令流水线

【计算机组成原理·考研】指令流水线_第1张图片
这里将指令划分为了五个子阶段:

  1. 取指(IF):从IR/Cache中取出指令。
  2. 译码/读寄存器(ID):操作控制器对指令进行译码,同时从寄存器堆中取操作数。
  3. 执行/计算地址(EX):执行运算操作或计算地址。
  4. 访存(MEM):对存储器进行读写操作。
  5. 写回(WB):将指令结果写回寄存器堆。

1.3.1 设计原则

以最复杂指令的所用的功能段个数作为指令流水线段个数,以最复杂的操作所需的时间作为流水段长度。

1.3.2 特征

  1. 指令长度一致,有助于简化取指和译码操作。
  2. 指令格式规整,尽量保证源寄存器相同,便于在不取指的情况下便可取到操作数。
  3. 只采用Load/Store指令来访问存储器,可将访存操作单独抽离到一个周期中,有利于简化操作步骤。
  4. 数据和指令对齐存放,有助于减少访存次数。

注意,流水线技术并不能缩短单指令的执行时间,但对于整个程序来说,效率得到了大幅度的提升。

1.3.3 表示方法

【计算机组成原理·考研】指令流水线_第2张图片


2.基本实现

2.1 数据通路

【计算机组成原理·考研】指令流水线_第3张图片

  • 每个流水段后面都需要加一个流水线寄存器,用于锁存本段处理完成的数据和控制信号,以保证本段的执行结果能够被下一流水段使用。
  • 各种寄存器和数据存储器均采用统一时钟控制,每发出一个CLK信号,就会有一条指令进入IF段。
  • 不同流水寄存器锁存的数据不同:IF-ID流水寄存器锁存的是指令字和PC+4的值;ID-EX流水寄存器锁存的是操作数、PC+4的值、写寄存器编号等后段可能会用到的数据;EX-MEM流水寄存器所存的是执行结果、待写入存储器的数据、写寄存器编号等数据;MEM-WB流水寄存器锁存的是ALU运算结果、存储器读出的数据、写寄存器编号。
  • 流水线寄存器锁存的信息包括:指令字、PC+“1”后的值、立即数、目的寄存器、ALU运算结果、标志信息等前段执行后得到的数据结果+控制信号。

2.2 控制信号

【计算机组成原理·考研】指令流水线_第4张图片

  • 控制信号的来源并不一致,大部分来源于ID段控制器译码后产生的控制信号。
  • 前段的控制信号可来自于后段。

2.3 执行过程

取指(IF)

通过取指部件以PC作为指令地址从指令寄存器中取出指令字,PC+“1“,在CLK信号到来时,将指令字和PC变化后的值通过RD输出端送入IF-ID流水寄存器中,同时本条指令进入ID段,IF段开始取下一条指令。

译码/读寄存器(ID)

由控制器根据IF-ID流水寄存器生成后续各段所需的控制信号。

执行/计算地址(EX)

EX段功能由具体指令决定,不同指令经ID段译码后得到的控制信号不同。

访存(MEM)

MEM段的功能也由具体指令决定。

写回(WB)

WB段的功能也由具体指令决定。

2.流水线的冒险与处理

2.1 结构冒险/资源冲突

2.1.1 说明

硬件资源竞争造成的冲突,即同一时刻有多条指令争用同一资源而形成的冲突。

2.1.2 解决

  1. 前一条指令访存时,后一条指令延后一个时钟周期。
  2. 单独设置数据存储器和指令存储器,使取数和取指在不同的存储器中进行。

现在计算机通过引入Cache机制,其中L1Cache就划分为数据Cache和指令Cache,从而避免了结构冒险这一问题。

2.2 数据冒险

2.2.1 说明

多条指令重叠处理同一数据产生的冲突。

2.2.2 分类

写后读(Read After Write,RAW)

只有当前指令将数据写入寄存器中后,下条指令才能够从该寄存器中读取。否则,先读后写,读到的是旧数据。

读后写(Write After Read,WAR)

只有当前指令读取出数据后,下条指令才能往寄存器中写数据。否则,先写后读,读到的是新数据。

写后写(Write After Write,WAW)

只有当前指令写入数据到寄存器后,下条指令才能写入该寄存器。否则,下条指令先于当前指令写,会使得当前指令写之前该寄存器的值不是真正的值。

2.2.3 解决

  1. 将涉嫌数据相关的指令全部延后一个或多个时钟周期,直至数据冒险的情况消失。有 硬件堵塞(stall)和软件插入NOP指令 两种方法。【计算机组成原理·考研】指令流水线_第5张图片【计算机组成原理·考研】指令流水线_第6张图片
  2. 设置相关专用通路(数据旁路技术)。不再读取寄存器组,也不再等待前一条指令计算完成后将结果写回寄存器组,而是直接把前一条指令的ALU计算结果作为下条指令的数据输入。【计算机组成原理·考研】指令流水线_第7张图片
  3. 通过编译器对数据相关的指令进行编译优化,调整指令顺序以解决数据冒险问题。

2.3 控制冒险

2.3.1 说明

通常情况下,程序是顺序执行的,但是遇到转移类指令时,会通过改变PC值使得流水线断流。

2.3.2 解决

  1. 对转移类指令进行分支预测,尽早生成转移目标地址。分支预测分为简单(静态)预测与动态预测。
    1. 静态预测总是认定转移条件不满足,继续执行分支指令的后续指令。
    2. 动态预测则根据程序历史执行情况,进行动态预测调整,有较高的预测准确率。
  2. 预取转移成功与转移不成功两个方向上的目标指令。
  3. 加快和提前形成条件码。
  4. 提高转移方向上的猜准率。。。

3.流水线的性能指标

3.1 吞吐率

3.1.1 说明

单位时间内流水线所完成的任务数量或输出的结果数量。

3.1.2 公式

基本公式:
image.png
其中,n为任务数,Tk是处理完n个任务所需的时间。

任务连续的情况下,流水线的吞吐率公式:
image.png
其中,k为流水线段数,Δt为时钟周期。
【计算机组成原理·考研】指令流水线_第8张图片

3.2 加速比

3.2.1 说明

不使用流水线与使用流水线所用的时间之比。

3.2.2 公式

基本公式:
image.png
其中,T0为不使用流水线的时间,Tk为使用流水线的时间。

任务连续的情况下,流水线的加速比公式:
image.png

其中,k为流水线段数。
【计算机组成原理·考研】指令流水线_第9张图片

3.高级流水线技术

3.1 超标量流水线技术

  • 通过配置多个同功能的部件,使得在每个时钟周期内可以并行执行多条独立指令。
  • 该技术下,CPI < 1。

【计算机组成原理·考研】指令流水线_第10张图片

3.2 超长指令字技术/静态多发射技术

  • 需要配置多个处理部件,通过编译程序挖出不同指令间潜在的并行性,从而将这些指令组合成一条具有多个操作码字段的超长指令字(可达几百位)。
  • 该技术下,CPI < 1。
  • 该技术成本更高,控制更复杂。

【计算机组成原理·考研】指令流水线_第11张图片

3.3 超流水线技术

  • 将流水线的功能段进一步划分,功能段划分得越多,时钟周期就越短,指令吞吐率也就越高。但是划分得太多的话,流水线寄存器的开销也就越大,因此并不是划分得越细越好。
  • 该技术下,CPI = 1。

【计算机组成原理·考研】指令流水线_第12张图片

Ps
单周期CPU下,指令周期 = 时钟周期,因此 CPI = 1。
多周期CPU下,指令的执行过程被划分为多个阶段执行,每个阶段耗费一个时钟周期,因此,CPI > 1。
基本流水线中,每个时钟周期执行一条指令,因此,CPI = 1。

你可能感兴趣的:(考研,计算机组成原理,考研,计算机外设,汇编)