流水线:
流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均执行速度。概念我们说那么多,我们现在深入去理解,光有概念都是一些比较抽象的东西,我们看图:我们有三个步骤。
然后我们来看一下一般情况下我们的指令是一条一条的来处理,第一条指令处理完,再处理第二条,再处理第三条,这种顺序来处理机器里边的设备的利用情况是怎样的呢?我们来看这图:
若我们每个指令的执行时间是1ms,
那么三条指令执行完需要9ms的时间,我们还可以看得出来的是:取值这个设备只有在1ms,4ms,7ms的时候工作,第一条指令只有三分之一的时间进行工作,别的时间就空闲了,对于这样子中间就产生了很多设备的空闲。所以我们引入了流水线。
用流水线所用的时间:
取值设备只要完成第一条指令的取值,就立即进入第二条指令的取值,第二条指令完成之后,就马上执行第三条;分析这个操作也是一样,我们看的出来,在5ms的时间就完成了。
当然我们也能观察的出,单个指令的运行时间都是3ms。所以流水线对单条指令的执行是无效的。
流水线除了指令流水线,还有一种就是运算操作流水线,运算操作流水线就是计算机在执行各种运算操作时也可以应用流水线来提高运算速度,这是操作都是分阶段运行的,所以我们用流水线来提高运算速度。
流水线指令运行时间的计算:
我们光看公式就几个变量,不好理解,我们来看例题:
很简单的一道题目,我们看的出来,很容易我们就计算的出来:(2+2+1)+(100-1)*2
我们接下来看一个图,来深刻的理解一下:
从这个图中我们假设:取值5ns,分析 2ns,执行 5ns;那么我们执行完一条指令应该是:
若分析在取值之后执行的话,只需要7ns就能完成分析阶段,那么执行完成只需要12ns,而不需要15ns。
我们为什么说分析能在取值之后马上执行呢?我们再来看一下这个执行步骤:
第一条指令的取值完成之后,这两条线就去掉了,就是说阻碍I2和C1发展的线就断了,他们就能运行:
我们很清楚的看到分析就和下一条指令的取值就能进行了。
我们接下来继续看一个有点反常的题目,有点意思:
我们要是按照之前的那个公式,能很快的算出来:周期=100ns(时间最长的),然后得到第一条指令的结果是:60ns+100ns+50ns+70ns=280ns。然后完成这段程序需:280+(20-1)*100=2180。我们按照这个公式来算,一点问题都没有。但是我们看一下答案:
但是当我们的选项里边没有这个答案,我们应该怎么办?想想,我们没有错,我们是按照公式来的,肯定错不了。但是有时候我们为了得分,所以我们必须要向另一种方向转变,就是我们的周期是100ns,那么我们都按照周期来算,那么我们第一条指令的完成时间就是:4*100=400,然后完成100条指令的时间就是:100*4+(20-1)*100=2300。那么这个题目我们就能拿分了。
流水线的吞吐率
n是任务数,Tk是执行的总时间。
我们回头看看这个吞吐率应该是:100/(2+2+1)+(100-1)*2=100/203
流水线的加速比
完成同样的任务,不使用流水线所用的时间与使用流水线所用的时间之比。
我们来看一个例题:
我们按照公式计算得到:
S=(6+7+8+9+6)n/[(6+7+8+9+6)+9(n-1)]=36n/[36+9(n-1)]=4n/(4+n-1)
我们用一个极限的思想来求一个加速比:
流水线的效率
流水线的设备利用率,公式是:
效率和吞吐率的关系:
和加速比的关系:
效率的计算,我们根据吞吐率和加速比都能直接的计算出来,所以在这里就不再举例了。原来流水线的东西还蛮多的嘛,但是不难,慢慢理解,变成自己的知识。