zoukankan      html  css  js  c++  java
  • 软考之路--小桥流水人家

            流水线,从小编生活了二十年的生活经历来看,流水线能够这样理解,从生活中的工厂入手,流水线上每个工人所作的工作都不同。但却是相连的,上面的工人做完了他的事就直接丢给以下的工人。而后一直这样传下去,直到这条流水线结束。 做流水线要眼疾手快,不然你手中的还没做完,上面又丢些下来,到时你就手忙脚乱,全线也就乱套了,总的来说生活中的流水线就是一种工业上的生产方式,指每个生产单位仅仅专注处理某一个片段的工作。以提高工作效率及产量。流水线,在我们的计算机中也有类似的概念,小编理解中的流水线。和计算机世界中的流水线有哪些不一样的地方呢?计算机中的流水线有着如何奇妙的一面?这篇博文,小编主要和大家来学习一下流水线的相关知识,小编会循着以下这张图的脉络,一一介绍。首先。我们来看一下总体的有关流水线知识点的框架。

            

           接下来,小编就沿着上图的痕迹,对流水线进行一一解剖,有不允许见的小伙伴欢迎讨论交流。
           概念

           流水线是指在程序运行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同一时候处理是针对不同指令而言的,它们可同一时候为多条指令的不同部分进行工作。以提高各部件的利用率和指令的平均运行速度。概念我们说那么多,我们如今深入去理解,光有概念都是一些比較抽象的东西,我们看图,一共同拥有三个步骤:

            

            然后我们来看一下普通情况下我们的指令是一条一条的来处理,第一条指令处理完,再处理第二条,再处理第三条。这样的顺序来处理机器里边的设备的利用情况是如何的呢?我们来看这图:

              

            若我们每一个指令的运行时间是1ms,例如以下图:

            

            那么三条指令运行完须要9ms的时间。我们还能够看得出来的是:取值这个设备仅仅有在1ms,4ms,7ms的时候工作,第一条指令仅仅有三分之中的一个的时间进行工作。别的时间就空暇了,对于这样子中间就产生了非常多设备的空暇。所以我们引入了流水线。用流水线所用的时间:

            

            取值设备仅仅要完毕第一条指令的取值,就立即进入第二条指令的取值,第二条指令完毕之后,就立即运行第三条。分析这个操作也是一样,我们看的出来。在5ms的时间就完毕了。

    当然我们也能观察的出,单个指令的运行时间都是3ms。所以流水线对单条指令的运行是无效的。

    流水线除了指令流水线。另一种就是运算操作流水线,运算操作流水线就是计算机在运行各种运算操作时也能够应用流水线来提高运算速度,这是操作都是分阶段运行的。所以我们用流水线来提高运算速度。

           流水线指令执行时间的计算

           

           小试牛刀

           我们光看公式就几个变量,不好理解。我们来看例题:

           例题1

           

           非常简单的一道题目,我们看的出来,非常easy我们就计算的出来:(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年的两个备考之月。进京赶考倒计时。小伙伴加油!

            

        
  • 相关阅读:
    腰围2尺1,2,3,4,5,6,7,8寸各自等于是多少厘米/英寸(对比表)
    Android开发模板------自己定义SimpleCursorAdapter的使用
    怎样在多线程中使用JNI?
    UVa753/POJ1087_A Plug for UNIX(网络流最大流)(小白书图论专题)
    图解iPhone开发新手教程
    Why Hadoop2
    读完了csapp(中文名:深入理解计算机系统)
    hadoop备战:一台x86计算机搭建hadoop的全分布式集群
    Win7 公布网站 HTTP 错误 404.4
    Dump 文件生成与分析
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6707057.html
Copyright © 2011-2022 走看看