深入理解计算机系统学习笔记

1.流水线的通用原理

1.1 计算流水线

下图a是一个很简单的非流水线化的硬件系统例子。它是由一些执行计算的逻辑以及一个保存计算结果的寄存器组成的。时钟信号控制在每个特定的时间间隔加载寄存器。CD播放器中的译码器就是这样的一个系统。输入信号是从CD表面读出 的位,逻辑电路对这些位进行译码,产生音频信号。图中的计算块是用组合逻辑来实现的,意味着信号会穿过一系列逻辑门,在一定时间的延迟之后,输出就成为了输人的某个函数。

在现代逻辑设计中,电路延迟以微微秒或皮秒(picosecond, 简写成 “ps”),也就是 1*10的-12次方秒为单位来计算。

图中b表示了一种时序图,称为流水线图(pipeline diagram)。在图中,时间从左向右流动。实心的长方形表示这些指令执行的时间。这个实现中,在开始下一条指令之前必须完成前一个。因此,这些方框在垂直方向上并没有相互重叠。

1.2 流水线操作的详细说明

流水线阶段之间的指令转移是由时钟信号来控制的。每隔120ps, 信号从0上升至1,开始下一组流水线阶段的计算。

从这个对流水线操作详细的描述中,我们可以看到减缓时钟不会影响流水线的行为。 信号传播到流水线寄存器的输入,但是直到时钟上升时才会改变寄存器的状态。另一方 面,如果时钟运行得太快,就会有灾难性的后果。值可能会来不及通过组合逻辑,因此当 时钟上升时,寄存器的输人还不是合法的值。

根据对SEQ处理器时序的讨论,我们看到这种在组合逻辑块之间采用时钟寄存器的简单机制,足够控制流水线中的指令流。随着时钟周而复始地上升和下降,不同的指令就会通过流水线的各个阶段,不会相互干扰。

1.3 流水线的局限性

下图的是一个理想的流水线化的系统,在这个系统中,我们可以将计算分成三个相互独立的阶段,每个阶段需要的时间是原来逻辑需要时间的三分之一。

1. 不一致的划分

对硬件设计者来说,将系统计算设计划分成一组具有相同延迟的阶段是一个严峻的挑战。 通常,处理器中的某些硬件单元,如ALU和内存,是不能被划分成多个延迟较小的单元的。 这就使得创建一组平衡的阶段非常困难。

2. 流水线过深,收益反而下降

下图说明了流水线技术的另一个局限性。

虽然着种设计将每个计算时钟的时间缩短了两倍,但是由于通过流水线寄存器的延迟,吞吐量并没有加倍。这个延迟成了流水线吞吐量的一个制约因素。

为了提高时钟频率,现代处理器采用了很深的(15或更多的阶段)流水线。处理器架构师将指令的执行划分成很多非常简单的步骤,这样一来每个阶段的延迟就很小。电路设计者小心地设计流水线寄存器,使其延迟尽可能得小。芯片设计者也必须小心地设计时钟传播网络,以保证时钟在整个芯片上同时改变。所有这些都是设计高速微处理器面临的挑战。

1.4 带反馈的流水线系统

之前的讨论的系统是相互都是完全独立的。但是,对于像 x86-64 或 Y86-64 这样执行机器程序的系统来说,相邻指令之间很可能是相关的。

例如下面这个指令

在这三条指令的序列中,每对相邻的指令之间都有数据相关。irmovq指令(第1行)将它的结果存 放在%rax 中,然后 addq指令(第2行)要读这个值;而 addq指令将它的结果存放在%rbx 中,mrmovq指令(第 3 行)要读这个值。

2. Y86-64 的流水线实现

2. 1 SEQ+: 重新安排计算阶段

下图给出了SEQ和SEQ+在PC计算上的不同之处。

在SEQ中,PC计 算发生在时钟周期结束的时候,根据当前时钟周期内计算出的信号值来计算PC寄存器的新值。在SEQ+中, 我们创建状态寄存器来保存在一条指令执行过程中计算出 来的信号。然后,当一个新的时钟周期开始时,这些信号值通过同样的逻辑来计算当前指令的PC。

2.2 插入流水线寄存器

在创建一个流水线化的Y86-64处理器的最初尝试中,我们要在SEQ+的各个阶段之间插人流水线寄存器,并对信号重新排列,得到PIPE— 处理器。

PIPE—使用了与顺序设计SEQ几乎一样的硬件单元,但是有流水线寄存器分隔开这些阶段。

各个阶段说明:

1.保存程序计数器的预测值。

2.位于取指和译码阶段之间。它保存关于最新取出的指令的信息,即将由译码阶段进行处理。

3.位于译码和执行阶段之间。它保存关于最新译码的指令和从寄存器文件读出的值 的信息,即将由执行阶段进行处理。

4.位于执行和访存阶段之间。它保存最新执行的指令的结果,即将由访存阶段进行处理。它还保存关于用于处理条件转移的分支条件和分支目标的信息。

5.位于访存阶段和反馈路径之间,反馈路径将计算出来的值提供给寄存器文件写, 而当完成ret指令时,它还要向PC选择逻辑提供返回地址。

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值