流水线,从小编生活了二十年的生活经历来看,流水线可以这样理解,从生活中的工厂入手,流水线上每个工人所作的工作都不同,但却是相连的,上面的工人做完了他的事就直接丢给下面的工人,而后一直这样传下去,直到这条流水线结束。 做流水线要眼疾手快,不然你手中的还没做完,上面又丢些下来,到时你就手忙脚乱,全线也就乱套了,总的来说生活中的流水线就是一种工业上的生产方式,指每一个生产单位只专注处理某一个片段的工作,以提高工作效率及产量。流水线,在我们的计算机中也有类似的概念,小编理解中的流水线,和计算机世界中的流水线有哪些不一样的地方呢?计算机中的流水线有着怎样神奇的一面?这篇博文,小编主要和大家来学习一下流水线的相关知识,小编会循着下面这张图的脉络,一一介绍,首先,我们来看一下整体的有关流水线知识点的框架。
接下来,小编就沿着上图的痕迹,对流水线进行一一解剖,有不同意见的小伙伴欢迎讨论交流。
概念
流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均执行速度。概念我们说那么多,我们现在深入去理解,光有概念都是一些比较抽象的东西,我们看图,一共有三个步骤:
然后我们来看一下一般情况下我们的指令是一条一条的来处理,第一条指令处理完,再处理第二条,再处理第三条,这种顺序来处理机器里边的设备的利用情况是怎样的呢?我们来看这图:
若我们每个指令的执行时间是1ms,如下图:
那么三条指令执行完需要9ms的时间,我们还可以看得出来的是:取值这个设备只有在1ms,4ms,7ms的时候工作,第一条指令只有三分之一的时间进行工作,别的时间就空闲了,对于这样子中间就产生了很多设备的空闲。所以我们引入了流水线。用流水线所用的时间:
取值设备只要完成第一条指令的取值,就立即进入第二条指令的取值,第二条指令完成之后,就马上执行第三条;分析这个操作也是一样,我们看的出来,在5ms的时间就完成了。当然我们也能观察的出,单个指令的运行时间都是3ms。所以流水线对单条指令的执行是无效的。流水线除了指令流水线,还有一种就是运算操作流水线,运算操作流水线就是计算机在执行各种运算操作时也可以应用流水线来提高运算速度,这是操作都是分阶段运行的,所以我们用流水线来提高运算速度。
流水线指令运行时间的计算
小试牛刀
我们光看公式就几个变量,不好理解,我们来看例题:
例题1
很简单的一道题目,我们看的出来,很容易我们就计算的出来:(2+2+1)+(100-1)*2=203
我们接下来看一个图,来深刻的理解一下:
从这个图中我们假设:取值5ns,分析 2ns,执行 5ns;那么我们执行完一条指令应该是:
若分析在取值之后执行的话,只需要7ns就能完成分析阶段,那么执行完成只需要12ns,而不需要15ns。我们为什么说分析能在取值之后马上执行呢?我们再来看一下这个执行步骤:
第一条指令的取值完成之后,这两条线就去掉了,就是说阻碍I2和C1发展的线就断了,他们就能运行:
我们很清楚的看到分析就和下一条指令的取值就能进行了,接下来,我们来看一道有点儿奇怪的题:
例题2
我们要是按照之前的那个公式,能很快的算出来:周期=100ns(时间最长的),然后得到第一条指令的结果是:60ns+100ns+50ns+70ns=280ns。然后完成这段程序需:280+(20-1)*100=2180。我们按照这个公式来算,一点问题都没有。但是我们看一下答案:
但是当我们的选项里边没有这个答案,我们应该怎么办?想想,我们没有错,我们是按照公式来的,肯定错不了。但是有时候我们为了得分,所以我们必须要向另一种方向转变,就是我们的周期是100ns,那么我们都按照周期来算,那么我们第一条指令的完成时间就是:4*100=400,然后完成100条指令的时间就是:100*4+(20-1)*100=2300。那么这个题目我们就能拿分了。
小编寄语:该博文,小编主要从三个方面对流水线的相关知识点进行简单的回顾和总结,第一,简单的介绍了一下流水线的概念,第二,指令运行时间的计算,第三,巩固理论知识,讲解了两个例题。初次接触流水线,小编的理解也不是很深,有不同意见的小伙伴欢迎讨论交流, 软考准备的日子即将接近尾声,在十月的末尾,十一月的指尖绽放,谢谢博客陪我走过
2014年的两个备考之月,进京赶考倒计时,小伙伴加油!