当前位置: 首页 > news >正文

【【计算机组成原理】中央处理器(二)—— 指令执行过程

【【计算机组成原理】中央处理器(二)—— 指令执行过程

  • 指令周期
      • 指令周期的数据流-取指周期
      • 指令周期的数据流-间址周期
      • 指令周期的数据流-执行周期
      • 指令周期的数据流-中断周期
  • 指令流水线
      • 流水线的表示方法
    • 流水线的性能指标
    • 指令流水线影响因素分类
      • 1. 结构相关(资源冲突)
      • 2. 数据相关(数据冲突)
      • 3. 控制相关(控制冲突)
    • 流水线的分类
    • 五段式指令流水线
    • 运算类指令的执行过程
    • LOAD 指令的执行过程
      • STORE指令的执行过程
      • 条件转移指令的执行过程
      • 无条件转移指令的执行过程
        • 例题

指令周期

指令周期:CPU从主存中每取出并执行一条指令所需的全部时间。
指令周期常常用若干机器周期来表示,机器周期又叫CPU周期
一个机器周期又包含若干时钟周期(也称为节拍、T周期或CPU时钟周期,它是CPU操作的最基本单位)。

每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等。

在这里插入图片描述

指令周期流程在这里插入图片描述

在这里插入图片描述

指令周期的数据流-取指周期

指令周期的数据流-间址周期

指令周期的数据流-执行周期

执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。

不同指令的执行周期操作不同,因此没有统一的数据流向。

指令周期的数据流-中断周期

一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。

在这里插入图片描述

方案1.单指令周期
对所有指令都选用相同的执行时间来完成 。
指令之间串行执行;指令周期取决于执行时间最
长的指令的执行时间。
对于那些本来可以在更短时间内完成的指令,要
使用这个较长的周期来完成,会降低整个系统的
运行速度。
方案2.多指令周期
对不同类型的指令选用不同的执行步骤来完成 。
指令之间串行执行;可选用不同个数的时钟周期
来完成不同指令的执行过程 。
需要更复杂的硬件设计。

方案3.流水线方案
在每一个时钟周期启动一条指令,尽量让多条指
令同时运行,但各自处在不同的执行步骤中 。
指令之间并行执行。

指令流水线

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

在这里插入图片描述

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

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

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

在这里插入图片描述

在这里插入图片描述

流水线的表示方法

在这里插入图片描述

流水线的性能指标

  1. 吞吐率
    在这里插入图片描述
    当连续输入的任务 n → ∞ n→∞ n时,得最大吞吐率为 T P m a x = 1 / D △ t TPmax=1/D△t TPmax=1/Dt

  2. 加速比
    在这里插入图片描述

在这里插入图片描述
当连续输入的任务 n → ∞ n→∞ n时,最高效率为 E m a x = 1 E_{max}=1 Emax=1

指令流水线影响因素分类

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

在这里插入图片描述

影响流水线的因素

  1. 结构相关(资源冲突)
  2. 数据相关(数据冲突)
  3. 控制相关(控制冲突)

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

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

在这里插入图片描述

解决办法:
1.后一相关指令暂停一周期
2.资源重复配置:数据存储器+指令存储器

2. 数据相关(数据冲突)

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

在这里插入图片描述

解决办法:

  1. 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插 入“NOP”两种方法。
  2. 数据旁路技术
  3. 编译优化:通过编译器调 整指令顺序来解决数据相关。

3. 控制相关(控制冲突)

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

在这里插入图片描述

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

在这里插入图片描述

流水线的分类

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

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

部件功能级流水就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶
差、对阶、尾数相加以及结果规格化等4个子过程。

处理机级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5 个子过程。

处理机间流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放
在与下一个处理机所共享的存储器中。
2.单功能流水线和多功能流水线
按流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。

单功能流水线指只能实现一种固定的专门功能的流水线;

多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
3.动态流水线和静态流水线
按同一时间内各段之间的连接方式,流水线可分为静态流水线和动态流水线。

静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。

动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样
对提高流水线的效率很有好处,但会使流水线控制变得很复杂。

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

线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。

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

流水线的多发技术

  1. 超标量技术

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

  1. 超流水技术

在这里插入图片描述

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

  1. 超长指令字

在这里插入图片描述

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

在这里插入图片描述

五段式指令流水线

在这里插入图片描述
只有上一条指令进入ID段后,下一条指令才能开始IF段,否则会覆盖IF段锁存器的内容

常见的五类指令:
• 运算类指令、LOAD指令、STORE指令、条件转移指令、无条件转移指令

运算类指令的执行过程

在这里插入图片描述

LOAD 指令的执行过程

在这里插入图片描述

STORE指令的执行过程

在这里插入图片描述

条件转移指令的执行过程

在这里插入图片描述

无条件转移指令的执行过程

在这里插入图片描述

例题

在这里插入图片描述

相关文章:

  • YOLOv5、v7改进之二十八:ICLR 2022涨点神器——即插即用的动态卷积ODConv
  • php警车管理系统设计与实现
  • 提高PHP编程效率的技巧
  • 安防单位怎么实施RPA新员工提升企业运作效率
  • 线程安全问题的原因和解决方案
  • zabbix配置邮件告警
  • 【Vue】Mixin 混入的基础语法(1)
  • JavaEE:synchronized关键字
  • 全开源二次元风格发卡
  • 时序分析 45 -- 时序数据转为空间数据 (四) 格拉姆角场 python 实践 (下)
  • qmake *.prf文件 自定义features
  • 深度学习目标检测入门论文合集讲解
  • c++11 日期和时间工具(std::chrono::duration)(二)
  • DataStructure_树的基本性质(m叉树和二叉树)
  • Flask 学习-76.Flask-RESTX 处理异常@api.errorhandler
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 「译」Node.js Streams 基础
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【知识碎片】第三方登录弹窗效果
  • IOS评论框不贴底(ios12新bug)
  • JavaScript创建对象的四种方式
  • mac修复ab及siege安装
  • React的组件模式
  • Spark学习笔记之相关记录
  • 番外篇1:在Windows环境下安装JDK
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 学习ES6 变量的解构赋值
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 仓管云——企业云erp功能有哪些?
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # Panda3d 碰撞检测系统介绍
  • (12)Hive调优——count distinct去重优化
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (南京观海微电子)——I3C协议介绍
  • (十五)使用Nexus创建Maven私服
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net core 连接数据库,通过数据库生成Modell
  • .Net 垃圾回收机制原理(二)
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET多线程执行函数
  • .NET企业级应用架构设计系列之应用服务器
  • /etc/sudoers (root权限管理)
  • @EnableWebMvc介绍和使用详细demo
  • @EventListener注解使用说明
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [AX]AX2012 SSRS报表Drill through action