在CPU扫盲-CPU与指令集中阐述了CPU与指令集之间的关系,并在CPU扫盲-自研指令集中以创造者的身份深入讲解了指令集,这篇文章则是针对CPU的专场,以x86架构下的CPU为例具体分析一下CPU如何执行指令。

  计算机基本硬件由控制器、储存器、运算器、输入设备、输出设备五大部件组成,其中运算器、控制器、部分储存器被集成在一起统称为中央处理单元(Central Processing Unit,CPU)。CPU 大体上可以划分为三个部分,它们是控制单元运算单元存储单元,他们互相配合执行一条指令。

  控制单元由指令寄存器IR( Instruction Register )、指令译码器 ID (Instruction oder )、操作控制器 OC (Operation Controller) 组成。程序被加载到内存后,指令这时都在内存中了,指令指针寄存器IP(cs:ip)指向内存中下一条待执行指令的地址,操作控制器 OC根据cs:ip的指向,将位于内存中的指令装载到指令寄存器IR中。然后指令译码器ID将位于指令寄存器IR中的指令按照指令集格式(对指令集不熟悉的可以先看下CPU扫盲-自研指令集)来解码,分析操作码和操作数,如果指令中的操作数为内存寻址,需要将内存中的数据取出暂存到储存单元储存单元指的是CPU内部的L1/L2缓存(SRAM 缓存)以及寄存器,很多同学在感观上觉得寄存器是 CPU 直接使用的存储单元,所以寄存器比SRAM 更快 其实它们在速度上是同一级别的东西,因为寄存器和 SRAM 都是用相同的存储电路实现的,用的都是触发器,它工作速度极快,属于纳秒级别。CPU的寄存器分为可见和不可见两大类。可见就是程序可见,可以通过指令控制的寄存器如:PC寄存器、通用寄存器、段基址寄存器等;不可见的就是硬件直接使用,程序不可见不可操控的寄存器如:指令寄存器IR,L1/L2缓存也可看作特殊的不可见寄存器。


  现在操作码和操作数都准备好了,就差执行指令了,如果这个指令是加减乘除等算数运算,操作控制器OC会给运算单元发送信号执行指令;如果指令是赋值、函数调用等操作则由操作控制器 OC直接执行。就这样一条指令执行完毕,整个过程包括取码、译码、执行,接着控制单元又要取下一条指令了,流程回到了本段开头, CPU的工作就是这样一天天的重复、循环。

  上文介绍了CPU如何执行一条指令的。那接下来看下CPU是如何执行多条指令的,有同学会疑问上面不是说了嘛,执行完当前指令再去获取下一条指令不断重复循环,多循环几次不就是多条指令了嘛。注意上文的重点是CPU执行一条指令时控制单元运算单元存储单元之间是如何配合的,将一条指令的执行划分为取码、译码、执行三个步骤,这更像是理论,为了方便大家理解,但真正CPU厂商在设计CPU电路时会复杂的多,能将一个指令的执行划分为几十个步骤。如:x86系列CPU由于其指令不定长缘故,取码的过程就拆分成了多个小步骤,假设CPU为32位,指令指针寄存器IP(cs:ip)为 0x00000000,当前指令长24bit。

  1. 内存获取指令:由于CPU数据总线宽32bit,所以一次寻址获取32bit数据,将数据暂存SRAM 缓存
  2. 指令预处理:由于x86指令非定长,所以需要预处理,对指令进行部分译码分析出操作码判断出指令长度为24bit
  3. 存入指令寄存器IR:在32bit数据中取出有效部分存入指令寄存器IR
  4. 更新指令指针寄存器IP:当前指令长度为24bit=3字节,所以下一条指令地址应为0x00000003,更新指令指针寄存器IP为 0x00000003

  借助这个例子也想强调一下cs:ip的值在取码完成后就会被更新为下一条指令的地址,并非必须等当前指令执行完毕才更新。这个地方如果误解了后续CPU流水线技术的学习就不容易理解。

  CPU在电路设计上实现了多个独立电路,支持每个步骤独立执行,CPU 可以一边执行指令,一边取指令,一边译码。虽然CPU在同一时刻只能执行一条指令,由于cs:ip的值在取码完成后就会被更新为下一条指令的地址,所以在执行这条指令的同时可以去翻译下一条指令,同时去获取下下条指令。这样的流水线模式大大提升CPU的执行效率,下面我们用取码、译码、执行三级流水线为例来讲一下CPU的流水线技术,见下图:

  以上在第2周期后,虽然在一个时钟周期内 CPU 同时干了三件事,但一定要清楚,这三件事不属于一个指令,是三个指令重叠在一起了。同时完成的是当前指令的第三步、下一条指的第二步、第三条指令的第一步。 CPU 中每条指令必须经过取指、译码、执行三步才算完成。三级流水线模型就是要保证取码、译码、执行三个独立的电路始终在运行状态不要停下来。就拿周期3来说,在这一时钟周期里, CPU 同时完成了“执行”、“译码”、“取指” 三件事。其中“执行电路”处理第一条指令的执行步骤,“译码电路”处理第二条指令的译码步骤,”取指电路“处理第三条指令的取码步骤。

  如果CPU不使用流水线技术的话执行一个指令始终需要三个周期,执行10000条指令需要 10000(指令数) x 3 (单个步骤耗时) + 0(3单条指令总耗时-3单步骤耗时)=30000 个周期;在使用三级流水线技术时(如上图),将每条指令的执行划分为三个步骤,因为每条指令执行的总耗时相同都为三个周期,所以每个步骤耗时一个周期,相当于从第三个周期开始每执行一条指令只需要一个周期,执行10000条指令需要 10000(指令数) x 1 (单个步骤耗时) + 2(3单条指令总耗时-1单步骤耗时)=10002个周期;试想如果使用10级流水线技术(如下图),将每条指令的执行划分为10个步骤,每条指令执行的总耗为3周期不变的前提下,10级流水线每个步骤耗时0.3周期,相当于从第3.0个周期开始每执行一条指令只需要0.3个周期,此时执行10000条指令只需要 10000(指令数) x 0.3 (单个步骤耗时) + 2.7(3单条指令总耗时-0.3单步骤耗时)=3002.7个周期,这大大提升了CPU的性能,此时 CPU10级流水线的性能相较与CPU不使用流水线技术时的性能已经提升了一个数量级。

  按照上述论证,CPU的支持的流水线条数和CPU的性能是成正比的,CPU的流水线条数真的越多越好嘛?很可惜CPU的流水线条数并不是越多越好,有两个主要原因:

  1. CPU多流水线的原理是将CPU划分为多个独立电路,每个电路负责指令执行的一个步骤。流水线条数越多CPU的电路就越复杂,CPU的体积就会越大,CPU的能耗就会越高,这种高能耗CPU靠电池供电的移动设备就无法接受,因为相比性能过剩的CPU人们更看重它的续航表现,所以CPU设计人员需要在性能和功耗之间做一个很好的平衡,不能一味的追求性能。
  2. 上述CPU流水线条数和CPU性能成正比的结论是在程序指令依次执行的情况下,但当程序指令出现跳转或分支结构时就要另当别论了。比如当上图的第一条指令是jmp (无条件的转移到指令指定的地址去执行从该地址开始的命令)指令时,jmp指令会直接修改指令指针寄存器IP中的指令地址,所以当第3.0个周期jmp指令执行时,指令指针寄存器IP中的指令地址会被更新,下一条指令应该是更新后新地址的第一条指令,之前流水线中的指令二到指令十都是无效指令了,这个时候就需要清空流水线中的指令,就意味着清空所有的独立电路以及相关寄存器,这个过程显然流水线越多 耗时越多 代价越大。当然CPU也会有分支预测等手段来尽量避免这种清空流水线的情况发生(不能完全避免),但同样需要复出很大代价比如:电路更加复杂,CPU成本更高。所以CPU的流水线并不是越多越好,CPU的设计师要兼顾方方面面。

CPU扫盲-CPU如何执行指令以及流水线技术相关推荐

  1. CPU扫盲-CPU与指令集

      指令集架构就像是特定的CPU的设计图纸,它规定了这个CPU需要支持那些指令.寄存器有那些状态以及输入输出模型.根据指令集结构的设计,在CPU上通过硬件电路进行实现,就得到了支持该指令集的CPU.指 ...

  2. 软考中级【数据库系统工程师】第1章:计算机系统知识,自学软考笔记,备考2022年5月份软考,计算机硬件系统CPU组成指令寄存器组总线输入输出的程序控制方式计算机体系结构与存储系统加密技术流水线技术

    前情提要:笔记只整理与考试相关的重点知识,也就是历年真题出现过的考点我都会记录笔记,一些不重要的内容我就不记录了,大家可以自行查看教材. 1.1计算机硬件基础知识 考点1:计算机硬件系统的组成 考点2 ...

  3. CPU流水线技术演进

    一. 线性流水线 流水线技术是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术.程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未执行完时,提前启动后续 ...

  4. 三级缓存(不是CPU的概念,而是一种技术上逻辑容错处理方案)

    三级缓存(不是CPU的概念,而是一种技术上逻辑容错处理方案) 相信硬件出生的同学,对这个一眼就认为是CPU的三级缓存. 百科上解释的三级缓存 三级缓存是为读取二级缓存后未命中的数据设计的-种缓存,在拥 ...

  5. 【Computer Organization笔记12】流水线技术概述

    本次笔记内容: P23 计算机组成原理(23) P24 计算机组成原理(24) 本节课对应幻灯片: 组成原理26 pipeline.pptx 文章目录 本讲概要 多周期CPU 生活中的流水线 顺序洗衣 ...

  6. 处理器中的流水线技术

    处理器中的流水线技术 在现代处理器中,流水线是一个最基本的概念.在了解cpu的时候,很多时候会提及拥有多少级流水线.虽然这个概念并不是在计算机技术中诞生的,但是这个技术却在处理器世界中大放异彩. 流水 ...

  7. 计算机体系结构——流水线技术(Pipelining)

    本文导读: 一.并行技术 1.并行技术分类 2.新技术的设计与实现 3.指令周期二.流水线技术 1.什么是流水线 2.指令重叠方式 3.流水工作设计 4.流水线的描述方法(时空图) 5.流水线特点三. ...

  8. 【组成原理-处理器】流水线技术

    文章目录 0 流水线性能指标 0.1 指令执行时间 0.2 流水线的吞吐率 0.3 流水线的加速比 0.4 流水线的效率 1 基本流水线技术 1.0 流水线设计基本原则 1.1 五段流水线 1.1.1 ...

  9. 计算机系统结构:Pipelining 基本流水线技术

    如何让程序运行更快? CPU性能公式:CPU时间 = CPI × 所执行的指令条数 × 时钟周期时间 关于流水线的几个问题: Pipeline Hazard(Data hazard.structure ...

最新文章

  1. 研究人员使用脑机接口从神经信号中重建单词
  2. 使用arm混合汇编计算两个64位的和_混合使用C、C++和汇编语之: C、C++ 和 ARM 汇编语言之间的调用...
  3. java选项设置_java环境配置
  4. 虚拟环境--virtualenv
  5. 终于解决 k8s 集群中部署 nodelocaldns 的问题
  6. 使用axis公布weblogic(一个)
  7. xml property标签注入一个类变量_依赖注入的学习
  8. pat-A1043:Is it a Binary Search Tree(二叉搜索树和及其镜像树的遍历)
  9. java生成mib文件_SNMP之MIB文件创建
  10. c语言编程绝对质数,c语言求绝对素数
  11. 使用java压缩文件成zip——三种方式压缩文件速度对比
  12. Atom配置markdown
  13. 版本控制管理工具Git/SVN
  14. 记windows远程桌面凭据不工作解决办法
  15. Android 判断app是否正在播放音乐
  16. 360兼容性问题:教资报名请使用搜狗浏览器(兼容模式)、360浏览器(兼容模式)、QQ浏览器(内核模式请选择:总是使用IE内核)、IE系列浏览器。
  17. pytorch_lesson13.2 模型拟合度概念介绍+模型欠拟合实例+单隐藏层激活函数性能比较+相同激活函数不同隐藏层数结果对比+神经网络结构选择策略
  18. Faker生成测试数据
  19. 嵌入式培训学费贵不贵?
  20. DDMS的打开以及查看手机页面布局层次

热门文章

  1. 什么是内存对齐,为什么要内存对齐?
  2. mac性能比服务器好,性能上再次交锋 三大最新OS测试大比拼
  3. 毕业论文的研究背景怎么写?
  4. h3c imc-dig 7 linux,H3C iMC iLP安装指导-7.0-5PW100
  5. Mac删除键的5种用法
  6. sa结构组网方式_5G独立组网SA模式下的驻网流程浅析
  7. 蓝牙降噪耳机哪个比较好?四大热门降噪蓝牙耳机推荐
  8. 【树莓派智能门锁】电机锁控制电源测试【2】
  9. 《数据结构》:中缀表达式合法性判断
  10. Django REST Framework教程(4): 玩转序列化器(Serializer)