16. 流水线的基本原理

1. 举个例子

一个大厨做菜的例子,如下图所示,

大厨做菜的例子

用4个小厨师进行流水线的操作,如下图所示,

流水线做菜

每个小厨师负责一个环节,还有一个小厨师“吹号”,这样4分钟后,流水线填满,即每个环节都在工作了。最后一共需要7分钟完成4道菜,而一个大厨需要16分钟完成。

使用流水线,可以每分钟上一道菜,而不使用流水线,需要4分钟上一道菜,流水线提升了4倍的性能。这里需要注意,每道菜制作时间仍然是4分钟。

2. MIPS指令的执行步骤

MIPS执行需要5步,如下图所示,

MIPS指令执行步骤

从数据通路上来看,MIPS执行步骤如下图所示,

从数据通路上看MIPS指令执行的步骤

3. MIPS流水线

就像这篇笔记一开始举例那样,我们把数据通路也可以分成几个阶段,做成流水线的形式。那么就在各个阶段之间插入流水线寄存器,负责保存前一个阶段向后一个阶段需要传递的所有信息,如下图所示,

流水线形式的MIPS数据通路

假设这是一个被初始化后的流水线,里面什么都还没有,那么从IF开始分析,

<1> IF级,从指令存储器取出了PC0对应的指令,第t0时钟上升沿时,PC寄存器更新为PC1,且IF/ID流水线寄存器存储了PC0对应的指令,经过一段时间延迟后,该指令在IF/ID寄存器输出端上出现,被分解,寄存器堆同时读出了相应的数据Ra0和Rb0,该数据连接在了ID/EX流水线寄存器上;

<2> 第t1时钟上升沿,IF/ID寄存器存储了PC1指令,RegFile读取了Ra1和Rb1的数据,ID/EX存储器存入了Ra0和Rb0,经过一段时间寄存器输出延迟后,Ra0和Rb0输出到了EX级,ALU计算后,计算结果送到了EX/MEM流水线寄存器。

<3> ...

4. 流水线的性能

如果是单周期处理器,假设每个阶段需要200ps,那么每条指令需要1000ps执行完,才可以执行下一条指令,那么这个单周期处理器的时钟就是1000ps的,如下图所示,

单周期处理器的时钟周期计算

如果是流水线处理器,那么第1条指令完成IF后进入ID,同时第二条指令就可以IF了。每隔200ps就有一条指令进入流水线,且每隔200ps就有一条指令完成,那么时钟周期就是200ps。理想情况下,流水线处理器比单周期处理器性能提升有5倍。

流水线处理器的时钟周期计算

当然这是理想情况,因为每个流水线寄存器也会引入延迟,假设每个流水线寄存器引入延迟50ps,那么上图就变成了下面这个样子,

考虑流水线寄存器延迟的流水线处理器时钟周期的计算

如上图所示,考虑流水线寄存器延迟后,时钟周期变成了250ps,且完成一条指令需要1250ps,比单周期处理器还慢。

流水线的优势在于,流水线中每个部件并行工作,从而可使整个程序的执行时间缩短。但是流水线不会缩短单条指令的执行时间,相反会增加单条指令执行时间,流水线提高的是指令吞吐率。

你可能感兴趣的:(16. 流水线的基本原理)