zoukankan      html  css  js  c++  java
  • 第 1 章 计算机组成与体系结构 1.3流水线

     

    1.3 流水线

     

    流水线技术把一个任务分解为若干顺序执行的子任务,不同的子任务由不同的执行机构负责执行,而这些机构可以同时并行工作。在任一时刻,任一任务只占用其中一个执行机构, 这样就可以实现多个任务的重叠执行,以提高工作效率。

     

    1.3.1 流水线周期

     

    流水线应用过程中,会将需要处理的工作分为 N 个阶段,最耗时的那一段所消耗的时间为流水线周期。如:使用流水线技术执行 100 条指令,每条指令取指 2ms,分析 4ms,执 1ms,则流水线周期为 4ms

     

    1.3.2 计算流水线执行时间

     

    延续上面的场景,将 1 个任务的执行过程可分成 N 个阶段,假设每个阶段完成时间 t,则完成该任务所需的时间即为 Nt。若以传统的方式,则完成 k 个任务所需的时间是kNt;而使用流水线技术执行,且花费的时间是 Nt+(k-1)t。也就是说,除了第 1 个任务需要完整的时间外,其他都通过并行,节省下了大量的时间。所以流水线的执行时间可通俗的表达为:

    流水线执行时间= 1 条指令的执行时间+n-1*流水线周期

    注:n 代表需要处理的任务数量。

    在考试时,又需要特别注意一个细节问题,流水线的执行时间计算,其实进一步可以分理论情况与实践情况两种不同的处理方式。下面以实例进行说明。

     

    例:某计算机系统,一条指令的执行需要经历取指2ms、分析4ms、执行1ms三个阶段,现要执行 100 条指令,利用流水线技术需要多长时间?

    理论上来说,1  条指令的执行时间为:2ms+4ms+1ms=7ms。所以:理论流水线执行时间=2ms+4ms+1ms+(100-1)*4=403ms

    而实际上,真正做流水线处理时,考虑到处理的复杂性,会将指令的每个执行阶段的时间都统一为流水线周期,即 1 条指令的执行时间为:4ms+4ms+4ms=12ms 所以:实际流水线执行时间=4ms+4ms+4ms+(100-1)*4=408ms

    希赛教育专家提示:考试时 80%以上的概率采用理论公式计算,所以考试时需要以理论公式计算,若计算的结果无正确选项才考虑采用实际公式计算。

     

    1.3.3 流水线的吞吐率

     

    流水线的吞吐率Though Put rateTP是指在单位时间内流水线所完成的任务数量或输出的结果数量。有些文献也称为平均吞吐率、实际吞吐率。计算流水线吞吐率的最基本的公式如下:

     

     1.3.4 流水线的加速比

     在流水线中,因为在同一时刻,有多个任务在重叠地执行,虽然完成一个任务的时间与单独执行该任务相近甚至由于分段的缘故,可能更多一些,但是从整体上看完成多个任务所需的时间则大大减少。

    完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比speedup  ratio如果不使用流水线,即顺序执行所用的时间为 T0  ,使用流水线的执行时间为 Tk ,则计算流水线加速比的基本公式如下:


     

     

    如果流水线各个流水段的执行时间都相等设为 Dt,则一条 k 段流水线完成 n 个连 任务所需要的时间为(k+n-1)Dt。如果不使用流水线,即顺序执行这 n 个任务,则所需要的时间为 nkDt。因此,各个流水段执行时间均相等的一条 k 段流水线完成 n 个连续任务 时的实际加速比为:

     

     

  • 相关阅读:
    .Net Core使用Options模式来使用配置项
    git忽略已经提交的文件(git忽略文件不起作用)
    AirTest
    VSCode搭建rust开发环境
    动态编译和加载java代码
    JavaScript动态应用代码(有点像Java里的drools)
    Win10 Rust 编译报错: linking with `link.exe` failed: exit code: 1181
    git 拉取仓库的单个目录
    dart里实现类似Java里的--classpath的功能
    Rust离线安装
  • 原文地址:https://www.cnblogs.com/lizhigang/p/11083655.html
Copyright © 2011-2022 走看看