Windows程序员需要掌握的计算机硬件知识——流水线

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下计算机中的流水线问题。

在说流水线之线,你必须知道一件事,计算机里不是只有流水这种执行指令的方式,执行指令的方式一共有顺序、重叠、流水三种方式。
(1)顺序方式:各机器指令之间顺序串行执行,执行完一条指令才能取下一条指令。这种方式控制简单,但是利用率低。
(2)重叠方式:执行第N条指令的时候,可以开始执行第N+1条指令。这种方式复杂性不高、处理速度较快;但容易发生冲突。重叠方式如下所示。任何时候,分析指令和执行指令,可以有相邻两条指令在执行。

  分析指令N           执行指令N
                            分析指令N+1       执行指令N+1
  
(3)流水方式:流水方式是扩展的“重叠”,重叠把指令分为两个子过程,而流水可以分为多个过程。


1.流水线
流水线技术将指令分解为多个小步骤,并让若干条不同指令的各个操作步骤重叠,从而实现这若干条指令的并行处理,达到程序加速运行的目的。实际中,计算机指令往往可以分解成取指令、分析、执行等多个小步骤。在CPU内部,取指令、分析和执行都是由不同的部件来完成的。

在理想的运行状态下,尽管单条指令的执行时间没有减少,但是由多个不同部件同时工作,同一时间执行指令的不同步骤,从而使总执行时间极大地减少,甚至可以少到等于这个过程中最慢的那个步骤的处理时间。

如果各个步骤的处理时间相同,则指令分解成多少个步骤,处理速度就能提高到标准执行速度的多少倍。

假设执行一条指令需要执行以下3个步骤:
(1)取指令:从内存中读取出指令。
(2)分析:翻译指令,指出具体要执行的动作。
(3)执行:将指令交给运算器运行出结果。

这3个步骤在CPU内部对应地需要3个执行部件,假设每个部件执行的时间均为T。在两种不同情况会是什么情况呢,我们一起来看一下:


(1)不采用流水线的指令处理。则执行一条指令需要依次执行这3个步骤,总的执行时间为3T。依此类推,要顺序执行N条指令,所需要的总时间就是3T*N。如果是这样,3个部件在3T时间内总是只有一个部件在运行,其余部件处于闲置状态。

(2)采用流水线的指令处理。如下所示,采用流水线执行方式,在第1个T时间内,第1条指令在取指令,其余两个部件空闲。在第2个T时间内,第1条指令完成取指令,直接交给第2个部件进行分析,同时取指令部件可以去取第2条指令。此时同时有两条指令在运行,只有执行部件空闲。在第3个T时间内,第1条指令可以直接进入热行部件执行,第2条指令直接进入分析部件分析,取指令部件可以去取第3条指令。此时3个部件都在工作,同时有3条指令在运行。

执行                           1     2     3     4     5     6     7      8       9      10

分析                    1     2     3     4     5     6     7     8      9      10

取指令          1     2     3     4     5     6     7     8     9     10

时间段T        1     2     3     4     5     6     7     8     9     10     11     12 

依此类推可得,第1条指令执行总时间是3T,之后每隔一个T时间就完成一条指令,执行n条指令的总时间是3T+(n-1)*T。


但问题是,现实中哪有这么好的事每一个步骤都是T,哪有这么简单的事。线性流水线中,执行时间最长的那段是整个流水线的瓶颈。一般来说,一条指令的开始到下一条指令的最晚开始时间称为计算机流水线周期。所以执行的总时间主要取决于流水操作步骤中最长时间的那段操作。

举例:若指令流水线把一条指令分为取指、分析和执行3部分,且3部分的时间分别是t取指=2ns,t分析=2ns,t执行=1ns,则100条指令全部执行完毕需多长时间?

可以看出,3个操作中,执行时间最长的操作时间是T=2ns,因此总时间为(2+2+1)+(100-1)*2=5+198=203ns。

2.流水线的性能指标
流水线处理指令的性能高低由吞吐率、加速比、效率3个参数决定。

(1)吞吐率。吞吐率指的是计算机的流水线在单位时间内可以处理的任务或执行指令的个数。

举例:上面举例中执行100条指令的吞吐率可以表示为TP=N/T=100/(203*(10的-9次方)),N表示指令的条数,T表示执行完N条指令的时间。

(2)加速比。加速比=采用串行模式的工作速度/采用流水线模式的工作速度。加速比数值越大,说明流水线的工作安排方式越好。

举例,若串行执行100条指令的时间是T1=5×100=500s,采用流水线工作方式的时间T2=203ns,则加速比R=T1/T2=500/203=2.463。

(3)效率。效率是指流水线中各个部件的利用率。由于流水线在开始工作时存在建立时间,在结束时存在排空时间,并且各个部件不可能一直工作,总有某个部件在某一个时间处于闲置状态。流水线工作效率公式如下:

流水线的工作效率=流水线各段处于工作时间的时空区/流水线中各段总的时空区

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值