【王道计算机组成原理Note】5.5 指令流水线

news2025/7/20 20:57:06
image-20221118205400539

5 指令流水线

image-20221126104557040

5.1 指令流水的定义

一条指令的执行过程可以分成多个阶段(或过程)。根据计算机的不同,具体的分法也不同。

image-20221125202419386
  • 取指:根据Pc内容访问主存储器,取出一条指令送到IR中。
  • 分析:对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数。
  • 执行:根据操作码字段,完成指令规定的功能,即把运算结果写到通用寄存器或主存中。

而流水线就是利用每个阶段用到的硬件不一样,充分利用这些硬件的空余时间就衍生出了指令流水线。

指令之间的执行顺序安排:

先假设取值、分析、执行3个阶段的时间都相等,用 t 表示,按以下几种执行方式分析 n 条指令的执行时间

  1. 顺序执行安排–总耗时间:n*3t

    image-20221125203859511

    传统冯·诺依曼机采用顺序执行方式,又称串行执行方式。

    • 优点:控制简单,硬件代价小。

    • 缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低。

  2. 一次重叠执行方式–总耗时T= 3t +(n-1)×2t = (1+2n)*t

    image-20221125204338389
    • 优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高。

    • 缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了。

  3. 二次重叠执行方式

    image-20221125204442263

    与顺序执行方式相比,指令的执行时间缩短近2/3。这是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令在执行。

我们也可以把每条指令执行过程分成4或5个阶段,分成5个阶段时比较常见的

5.2 流水线的表示方法

  1. 指令执行过程图

    image-20221125205052430
  2. 时空图

    不同的阶段对应不同的硬件资源,所以这个图指挥越来越长,不会越来越高。

    image-20221125205837992

    主要用于流水线的分析

5.3 流水线的性能指标

以下计算性能指标都是基于理想状态,也就是各阶段花费时间相同,每个阶段结束后能立即进入下一个阶段

  1. 吞吐率

    吞吐率是指在单位时间内流水线所完成的任务数量,或是输出结果的数量。

    设任务数为n,处理完成n个任务所用的时间为 Tk

    则计算流水线吞吐率(TP)的最基本的公式为
    T P = n T k TP=\frac{n}{T_k} TP=Tkn
    理想情况下,流水线的时空图如下:

    image-20221125211805125 $$ 一条指令的执行分为k个阶段,每个阶段耗时\Delta t ,一般取\Delta t =一个时钟周期\\ T_k=(k-1+n)\Delta t\\ 流水线的实际吞水率为:TP=\frac{n}{(k-1+n)\Delta t} $$ 第一条指令执行过程称为装入时间,最后一条指令执行过程称为排空时间。

    在装入时间和排空时间期间硬件利用率最大,每一个时钟周倜结束都有一条指令执行完毕。

  2. 加速比

    完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比。
    一 条 指 令 的 执 行 分 为 k 个 阶 段 , 每 个 阶 段 耗 时 Δ t , 一 般 取 Δ t = 一 个 时 钟 周 期 设 T 0 表 示 不 使 用 流 水 线 时 的 执 行 时 间 , 即 顺 序 执 行 所 用 的 时 间 ; T k 表 示 使 用 流 水 线 时 的 执 行 时 间 . 则 计 算 流 水 线 加 速 比 ( S ) 的 基 本 公 S = T 0 T k = k n Δ t ( n + k − 1 ) Δ t = k n k − n − 1 注 意 在 不 理 想 的 情 况 下 需 要 照 S = T 0 T k 来 算 一条指令的执行分为k个阶段,每个阶段耗时\Delta t ,一般取\Delta t =一个时钟周期\\ 设T_0表示不使用流水线时的执行时间,即顺序执行所用的时间;\\ T_k表示使用流水线时的执行时间.\\ 则计算流水线加速比(S)的基本公\\ S=\frac{T_0}{T_k}=\frac{kn\Delta t}{(n+k-1)\Delta t}=\frac{kn}{k-n-1}\\ 注意在不理想的情况下需要照S=\frac{T_0}{T_k}来算\\ kΔtΔt=T0使线;Tk使线.线(S)S=TkT0=(n+k1)ΔtknΔt=kn1knS=TkT0
    当n趋于无穷,近似相当于加速了k倍,也就是最大加速比为k

  3. 效率

    流水线的设备利用率称为流水线的效率。
    在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积n个任务所用的时间与k个流水段所围成的时空区总面积之比。
    一 条 指 令 的 执 行 分 为 k 个 阶 段 , 每 个 阶 段 耗 时 Δ t , 一 般 取 Δ t = 一 个 时 钟 周 期 流 水 线 效 率 ( E ) 的 一 般 公 式 为 E = n 个 任 务 占 用 k 时 空 区 有 效 面 积 n 个 任 务 所 用 时 间 与 k 个 流 水 段 所 围 成 的 时 空 区 总 面 积 = T 0 k T k 当 任 务 数 n 趋 近 于 无 穷 , 效 率 近 似 于 1 一条指令的执行分为k个阶段,每个阶段耗时\Delta t ,一般取\Delta t =一个时钟周期\\ 流水线效率(E)的一般公式为\\ E=\frac{n个任务占用k时空区有效面积}{n个任务所用时间与k个流水段所围成的时空区总面积}=\frac{T_0}{kT_k}\\ 当任务数n趋近于无穷,效率近似于1\\ kΔtΔt=线(E)E=nknk=kTkT0n1
    image-20221125224208926

5.4 机器周期的设置

这里以指令执行分为五个阶段为例

为方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准。即此处应将机器周期设置为100ns

image-20221125232656314

流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。

5.5 影响流水线的因素

image-20221126102547606

  1. 结构相关(资源冲突)

    由于多条指令在同一时间争取同一资源而形成的冲突称为结构相关。

    解决办法:

    • 后一相关指令暂停一周期

    • 资源重复配置:数据存储器和指令存储器分开

      image-20221125233434819
  2. 数据相关(数据冲突)

    数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。

    在指令顺序执行过程,这是没有问题的。但在指令流水线执行确是有问题的!

    image-20221125234053670

    解决办法:

    1. 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入“NOP”两种方法。

      硬件上stall:

      image-20221125234235850

      软件上插入空指令(具有完整的周期):

      image-20221125234323256
    2. 数据旁路技术

      可以发现r1需要的数据在第二个时钟周期就已经计算出来了,后面只是写入存储器。数据旁路技术就是将得到的数据直接输送给下一条指令

      image-20221125234732005
    3. 编译优化

      通过编译器调整指令顺序来解决数据相关。(题目中专业术语如:按序发射就是不允许更改指令顺序)

    上面是三种解决办法,下面分析那些情况会数据冲突:RAW,WAR,WAW(R读,A在之后,W写)

    image-20221126100729130

    例题:

    image-20221126100749415
  3. 控制相关

    当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。

    image-20221126102047662

    解决办法:

    1. 尽早判别转移是否发生,尽早生成转移目标地址
    2. 预取转移成功和不成功两个控制流方向上的目标指令
    3. 加快和提前形成条件码
    4. 提高转移方向的猜准率

5.6 流水线的分类(了解)

  1. 部件功能级、处理机级和处理机间级流水线

    根据流水线使用的级别的不同,流水线可分为部件功能级流水线、处理机级流水线和处理机间流水线。

    • 部件功能级流水就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。
    • 处理机级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5个子过程。
    • 处理机间流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
  2. 单功能流水线和多功能流水线

    流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。

    • 单功能流水线指只能实现一种固定的专门功能的流水线;
    • 多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
  3. 动态流水线和静态流水

    同一时间内各段之间的连接方式,流水线可分为静态流水线和动态流水线。

    • 静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
    • 动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
  4. 线性流水线和非线性流水线

    按流水线的各个功能段之间是否有反馈信号,流水线可分为线性流水线与非线性流水线。

    • 线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
    • 非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算。

5.7 流水线的多发技术

  1. 流水线的超标量技术

    image-20221126103738624

    同一时钟周期多条指令一起执行。

    每个时钟周期内可并发多条独立指令,要配置多个功能部件,不能调整指令的执行顺序。可以通过编译优化技术,把可并行执行的指令搭配起来

  2. 流水线的超流水技术

    image-20221126104038375

    在一个时钟周期内再分段( 3段)
    在一个时钟周期内一个功能部件使用多次( 3次)不能调整指令的执行顺序
    靠编译程序解决优化问题

  3. 超长指令字

    image-20221126104410800

    由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条
    具有多个操作码字段的超长指令字(可达几百位)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visio 安装暴雷记录

Visio 安装记录起因: office2016家庭学生版中,安装visio2021后,插入word的vsdx图形右键显示unkown类型,无法识别,给学习工作带来很多麻烦!   搜查一圈没找到对应可用的方法,想着可能是visio20…

MobPush for Flutter

集成准备 这是一个基于 MobPush 功能的扩展的 Flutter 插件。使用此插件能够帮助您在使用 Flutter 开发应用时,快速地实现推送功能。 在pubspec.yaml文件中加入下面依赖 dependencies:mobcommonlib:mobpush_plugin: 然后执行:flutter packages get 导…

倍增(小试牛刀)

二分每次折半,倍增每次2的倍数 原理先存储每个小区间的最值也就是初始化,之后直接查询 1. 把数列按倍增分成小区间 对数列的每个元素,把从它开始的数列分成长度为1、2、4、8、…的小区间。下图给出了一个分区的例子,它按小区间…

java--JVM

JVM1.JVM的内存结构2.哪些部分会出现内存溢出3.方法区与永久代、元空间之间的关系4.JVM内存参数5.JVM垃圾回收算法(1)标记清除(2)标记整理(3)标记复制6.GC和分代回收算法7.三色标记和并发漏标问题8.垃圾回收…

【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)

CuratorFramework基本介绍 CuratorFramework是Netflix公司开源的一套Zookeeper客户端框架,它作为一款优秀的ZooKeeper客户端开源工具,主要提供了对客户端到服务的连接管理和连接重试机制,以及一些扩展功能,它解决了很多ZooKeeper…

Linux服务器配置与管理(基于Centos7.2)任务目标(四)

文章目录一、任务目标二、任务资讯三、任务实施3-1.RPM软件包管理3-2.YUM方式安装软件一、任务目标 实施该工单的任务目标如下: 知识目标 1.了解RPM提供的功能。 2.了解YUM相对于RPM所具有的优点。 能力目标 1.能够通过RPM安装及管理软件包。 2.能够通过YUM安装及管…

uni-app —— 小程序加入购物车实现过程

文章目录 前言一、示意图二、整体实现思路三、实现过程 1.加入购物车2.获取当前用户购物车信息3.解决数据获取不及时的问题总结前言 前文已经讲解了如何实现商品规格的选择,那么接下来就应该将用户选中的商品加入购物车啦!那么如何实现呢?请…

[附源码]计算机毕业设计JAVA儒家文化网站

[附源码]计算机毕业设计JAVA儒家文化网站 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

FilterListenerAjax的介绍

目录 一、Filter 1、Filter概述 2、过滤器链 二、Listener 三、Ajax 1、基本介绍 2、快速入门案例 3、axios 4、JSON 一、Filter 1、Filter概述 ▶ 过滤器 Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请…

Centos--基于Jdk1.8环境安装+卸载Jenkins

基础准备 本人选择的安装的环境基于jdk1.8 操作系统:Centos7.9 java: 1.8.0_262 检查是否有旧版本 $rpm -ql jenkins 如果有老版本可以卸载后,再执行后面的安装步骤 卸载 jenkins $rpm -e jenkins —删除遗留文件: $find / -iname jenkins | xa…

【Lilishop商城】No2-4.确定软件架构搭建三(本篇包括ES检索)

仅涉及后端,全部目录看顶部专栏,代码、文档、接口路径在: 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇只介绍重点架构逻辑,具体编写看源代码就行,读起来也不复杂~ 谨慎&#xff…

windows文本绘制 TextOut、DrawText、CreateFont、SetTextColor、SetBkColor、SetBkMode

文本绘制 TextOut-将文字绘制在指定坐标位置 DrawText-在矩形区域绘制字符串 int DrawText(HDC hdc, //DC句柄LPCSTR lpString, //字符串int nCount, //字符串长度LPRECT lpRect, //绘制文字的矩形框UINT uFormat //绘制的方式,重点,花样繁多的关键点 );绘制文字样…

持续集成和上传源码

1.测试左移,测试右移 2.持续集成 是指通过自动化的方式,频繁多次将代码集成到主干。 快速发现错误 每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。 防止分支大幅偏离主干 如果不是经常集成&…

nginx源码分析--双端列表

1.基本数据结构 struct ngx_queue_s {ngx_queue_t *prev;ngx_queue_t *next; };结构成员: ngx_queue_t *prev;前驱指针 ngx_queue_t *next;后继指针 2.操作函数--头结点 2.1基本函数 define ngx_queue_init(q) \(…

七牛云 vue 图片上传简单解说,js 上传文件图片

七牛云 vue 图片上传简单解说,js 上传文件图片 一、七牛云简介 首次使用七牛云存储进行项目的图片存储,整了一上午才整明白,这些官方的教程把明白人也给说糊涂了,文档很不规范。 七牛云有免费的使用额度,https://ww…

[附源码]SSM计算机毕业设计汽车租赁管理系统-JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Go学习之旅:包、变量和函数(DAY 1)

文章目录前引包、变量和函数1、包的概念和所用2、导出名或者导出函数3.1、函数参数声明方式(一)3.2、函数参数声明方式(二)4、函数返回值支持多值返回5、函数命名返回值6、变量声明7、变量的基础类型8、变量的默认值(零…

pytorch案例代码-3

双向循环神经网络 双向循环神经网络在RNN/LSTM/GRU里都有。比如RNN cell,只是把h0和x1传入做线性变换产生h1继续传入同一个cell做线性变换,线性变换的W和b共享,沿着这个方向就把所有隐层和最后的输出算出来了。 那么其中的每个结点&#xff0…

android-apk解包打包

title: android-apk解包打包 categories: Android tags: [android, 加壳] date: 2022-09-28 10:29:51 comments: false mathjax: true toc: true android-apk解包打包, 以下所有操作都需要在配置好 java 环境下进行 前篇 android apk解包和打包 - https://blog.csdn.net/u0114…

(十五)Spring之面向切面编程AOP

文章目录基础环境AOP介绍AOP的七大术语切点表达式Spring的AOP的使用环境准备基于AspectJ的AOP注解式开发通知类型前置通知Before后置通知AfterReturning环绕通知Around异常通知AfterThrowing最终通知After关于JoinPoint切面的先后顺序通用切点表达式全注解式开发AOP基于XML配置…