📜  计算机组织与架构|流水线|第一组(执行,阶段和吞吐量)

📅  最后修改于: 2021-06-28 09:33:34             🧑  作者: Mango

为了提高CPU的性能,我们有两种选择:
1)通过引入更快的电路来改善硬件。
2)安排硬件,以便可以同时执行多个操作。

由于硬件速度受到限制,更快的电路成本也很高,因此我们必须采用第二种选择。

流水线:流水线是CPU硬件元素的排列过程,可以提高其整体性能。在流水线处理器中同时执行多个指令。

让我们看一个实际的例子,该例子适用于流水线操作的概念。考虑一个水瓶包装厂。让瓶子经过三个阶段,分别是插入瓶子( I ),向瓶子中注水( F )和密封瓶子( S )。让我们将这些阶段分别视为第一阶段,第二阶段和第三阶段。让每个阶段花费1分钟以完成其操作。
现在,在非流水线操作中,首先将瓶子插入工厂,然后在1分钟后将瓶子移至第二阶段,在第二阶段中注满水。现在,在第一阶段,什么都没有发生。类似地,当瓶子移至阶段3时,阶段1和阶段2均处于闲置状态。但是在流水线操作中,当瓶子处于阶段2时,可以在阶段1装载另一个瓶子。类似地,当瓶子处于阶段3时,阶段1和阶段2可能每个都有一个瓶子。 ,我们在第3阶段结束时得到了一个新瓶子。因此,制造1个瓶子所需的平均时间为:

没有流水线= 9/3分钟= 3m

I F S | | | | | |
| | | I F S | | |
| | | | | | I F S (9 minutes)

流水线= 5/3分钟= 1.67m

I F S | |
| I F S |
| | I F S (5 minutes)

因此,流水线操作提高了系统的效率。

基本管道的设计

  • 在流水线处理器中,流水线具有两端,即输入端和输出端。在这些末端之间,存在多个级/段,使得一个级的输出连接到下一级的输入,并且每个级执行特定的操作。
  • 接口寄存器用于保存两级之间的中间输出。这些接口寄存器也称为锁存器或缓冲器。
  • 流水线中的所有阶段以及接口寄存器都由一个公共时钟控制。

在流水线处理器中执行
流水线处理器中的指令执行顺序可以使用时空图可视化。例如,考虑具有4个阶段的处理器,并让2条指令要执行。我们可以通过以下时空图可视化执行顺序:

非重叠执行:

Stage / Cycle 1 2 3 4 5 6 7 8
S1 I1 I2
S2 I1 I2
S3 I1 I2
S4 I1 I2

总时间= 8个周期

重叠执行:

Stage / Cycle 1 2 3 4 5
S1 I1 I2
S2 I1 I2
S3 I1 I2
S4 I1 I2

总时间= 5个周期

管道阶段

RISC处理器具有5级指令流水线,以执行RISC指令集中的所有指令。以下是RISC管道的5个阶段及其各自的操作:

  • 第一阶段(取指令)
    在此阶段,CPU从内存中的地址中读取指令,该值的值出现在程序计数器中。
  • 第二阶段(指令解码)
    在此阶段,对指令进行解码,并访问寄存器文件以从指令中使用的寄存器中获取值。
  • 第三阶段(指令执行)
    在此阶段,将执行ALU操作。
  • 阶段4(内存访问)
    在此阶段,从指令中存在的内存中读取和写入内存操作数。
  • 阶段5(回写)
    在此阶段,将计算/获取的值写回到指令中存在的寄存器中。

流水线处理器的性能
考虑一个时钟周期为“ Tp”的“ k”段流水线。让“ n”个任务在流水线处理器中完成。现在,第一条指令将花费“ k”个周期从流水线中退出,而其他“ n – 1”条指令将仅花费“ 1”个周期,即总共“ n – 1”个周期。因此,在流水线处理器中执行“ n”条指令所花费的时间:

ETpipeline = k + n – 1 cycles
                              = (k + n – 1) Tp

在相同情况下,对于非流水线处理器,“ n”条指令的执行时间为:

ETnon-pipeline = n * k * Tp

因此,当在同一处理器上执行“ n”个任务时,流水处理器比非流水处理器的加速(S)为:

S = Performance of pipelined processor /
        Performance of Non-pipelined processor

由于处理器的性能与执行时间成反比,因此,

S = ETnon-pipeline / ETpipeline
    => S =  [n * k * Tp] / [(k + n – 1) * Tp]
       S = [n * k] / [k + n – 1]

当任务’n’的数量明显大于k时,即n >> k

S = n * k / n
    S = k

其中“ k”是管道中的阶段数。

同样,效率=给定加速速度/最大加速速度= S / S max
我们知道,Smax = k

因此,效率= S / k

吞吐量=指令数/完成指令的总时间

因此,吞吐量= n /(k + n – 1)* Tp

注意:理想的流水线处理器的每条指令周期(CPI)值为1

请参阅第2组有关依存关系和数据危险,以及第3组有关管道和停顿的类型。

资料来源:goo.gl/J9KVNt
https://zh.wikipedia.org/wiki/危险区(计算机架构)
https://zh.wikipedia.org/wiki/数据依赖

本文由Saurabh Sharma提供。