0%

计算机组成原理(五):中央处理器

一、引言

其实这是最后一篇,但是为了保持发布顺序,最终积压在了这里,一次性发布~

二、中央处理器

(一)功能与基本结构

1.功能

  1. 指令控制 程序顺序控制:取指、分析、执行
  2. 操作控制 产生操作信号并将其传输到相应部件
  3. 时间控制
  4. 数据加工
  5. 中断处理

2.基本结构

CPU的寄存器

按照汇编语言是否可以访问的区别分类:

  • 用户可见寄存器
  • 用户不可见寄存器:MAR、MDR、指令寄存器、暂存寄存器

(二)指令执行过程

1.基本概念

指令周期 CPU每取出并执行一条指令所需要的全部时间

这里再次对比一些相似的概念:

  • 机器字长 简称字长,x位机器中x指的就是机器字长,指的是计算机进行一次定点整数运算所能处理的二进制数据的位数

  • 存储字长 一次存取操作的数据量,一个存储单元存储的二进制代码位数

    存储单元由存储元件组成,一个存储元件的容量是一位

  • 指令字长 一个指令字中包含的二进制代码位数,一般情况下是存储字长的整数倍

  • 时钟周期 CPU工作的最小单位,又称节拍、CPU时钟周期

  • CPU周期 又称机器周期,包含若干个时钟周期

  • 指令周期 包含若干机器周期

image-20240910221614953

间址周期 在间接寻址过程中介于取值周期和执行周期之间的时间,其任务是取操作数有效地址

2.指令执行方案

单周期处理器 所有指令的执行时间相同——一个时钟周期,时钟周期至少满足所需要时间最长的指令,此时$CPI=1$,指令串行执行。

CPI(Cycle Per Instruction) 执行一条指令所需要的时钟周期数

多周期处理器 对不同类型的指令选择不同的时钟周期数,此时$CPI>1$,指令串行执行。

流水线处理器 指令并行执行,理想条件下,每一个时钟周期完成一条指令,此时$CPI=1$,一般情况下$CPI>1$。

三、数据通路

(一)功能与组成

CPU的组成的不同表述:

  1. 运算器+控制器
  2. 数据通路+控制部件

数据通路 数据在执行过程当中所经过的路径,包括总线和路径上的其他部件。

(二)数据通路的基本结构

1.单总线方式

结构简单,但数据传输存在较多的冲突现象,性能较低;注意单周期处理器不能采用单总线方式

2.多总线方式

一个时钟内可在不同的总线上传输多个不同的数据

3.专用数据通路方式

性能较高,硬件量大

以上涉及到的总线均为内部总线,区别于系统总线

四、控制器

(一)结构与功能

image-20240911162152646

主要包括:指令寄存器(IR)、程序计数器(PC)以及控制信号产生电路

功能

  • 从主存中取指,并指出下一条指令的位置

    指令存储在主存中,程序代码在编译成为可执行文件之后对应机器指令,当其运行时必然在主存中

  • 对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作

  • 指挥并控制CPU、主存、输入输出设备之间的数据流动方向

分类

  • 硬布线控制器
  • 微程序控制器

(二)硬布线控制器

由复杂的组合逻辑门电路和触发器构成,也称组合逻辑控制器,指令操作码是决定控制单元(CU)发出不同控制信号的关键。

组合逻辑当中也有时钟,这是因为我们的控制有先后顺序!

CU的输入信号来源

  1. 经过指令译码器译码产生的指令操作码信息
  2. 时序系统产生的机器周期信号和节拍信号
  3. 来自于执行单元的反馈信息——标志

硬布线控制器的速度取决于电路延迟,适用于高速计算机、RISC架构。硬布线极度依赖于指令的设计,指令系统功能越全,微操作命令越多,电路就越庞杂,调试起来的难度就越大。

(三)微程序控制器

微操作信号代码化,将每一条机器指令转化成为一段微程序存入一个专门的存储器——控制存储器中,微操作的控制信号由微指令产生。

机器指令$\to$微程序

微程序包含若干微指令,微指令对应于一个或多个微操作命令

微命令 控制部件向执行部件发出的各种控制命令,它是构成控制序列的最小单位;有相容性和互斥性之分。

微操作 执行部件收到微命令后所进行的操作。

硬布线控制器中也存在上述两个基本概念

微指令 若干微命令的集合,包含操作控制字段(微操作码字段)顺序控制字段(微地址码字段)

微周期 从控制存储器中去除并执行一条微指令所需的全部时间,通常为一个时钟周期。

控制存储器(CM) 存放微程序,在CPU内部,用ROM实现;其单元地址称为微地址。

主存储器(主存、内存) 存放程序和数据

微程序 微指令的有序集合,用于描述机器指令,实际上是机器指令的实时解释器。

  • 地址寄存器($MAR$):主存读/写地址
  • 微指令地址寄存器($\mu PC/CMAR$):待执行的微指令在控制存储器中的微地址
  • 指令寄存器($IR$):存放从主存中读出的指令
  • 微指令寄存器($\mu IR/CMDR$):存放从控制存储器中读出的微指令

image-20240911222411902

  • 起始和转移地址形成部件(或简称微地址形成部件):用于产生初始和后继微地址,以保
    证微指令的连续执行。
  • 微指令地址寄存器:接收微地址形成部件送来的微地址,为读取微指令做准备。
  • 控制存储器:它是微程序控制器的核心部件,用于存放各指令对应的微程序。
  • 微指令寄存器:其位数等于微指令字长。

(四)微指令

微指令的编码方式也称为微指令的控制方式,是指如何对微指令的控制字段进行编码,以形成控制信号。

  • 直接编码(直接控制)方式

    每一位对应于一个微命令;优点:简单直观、执行速度快、操作并行性好;缺点:微指令字长过长

  • 字段直接编码方式

    将微指令的操作控制字段分成若干小字段,把互斥性微命令放在同一字段中,把相容性微命令放在不同字段中,每个字段独立编码,每种编码代表一个微命令且各字段编码含义单独定义,与其他字段无关,这就是字段直接编码方式。这种方式可以缩短微指令字长,但因为要通过译码电路后再发出微命令,因此比直接编码方式慢。

    • 互斥性微命令分在同一段内,相容性微命令分在不同段内。
    • 每个小段中包含的信息位不能太多,否则将增加译码电路的复杂性和译码时间。
    • 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用 000表示不操作。
  • 字段间接编码方式

    一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,因此称为字段间接编码,也称隐式编码。这种方式可进一步缩短微指令字长,但因削弱了微指令的并行控制能力,因此通常作为字段直接编码方式的一种辅助手段。

微指令的地址形成方式

  1. 由微指令的后继地址字段(也称下地址字段)指出。在微指令格式中设置一个后继地址字段,由微指令的后继地址字段直接指出后继微指令的地址,这种方式也称断定方式
  2. 根据机器指令的操作码形成。当机器指令取自指令寄存器后,微指令的地址由操作码经微地址形成部件形成,该部件输出的是对应机器指令微程序的首地址。
  3. 增量计数器法,即$(\mu PC)+1\to\mu PC$,适用于后继微指令地址是连续的情况。
  4. 根据各种标志决定下一条微指令分支转移的地址。
  5. 由硬件直接产生微程序入口地址。电源加电后,第一条微指令的地址可由专门的硬件电路产生,并送至$\mu PC$,这个地址即为取指周期微程序的入口地址。

水平型微指令

image-20240912160619463

垂直型微指令

image-20240912160655926

水平型微指令 垂直型微指令
微程序短 微程序长
并行能力强 并行能力弱
执行速度快 执行速度慢
微指令长 微指令短

(五)对比

image-20240911223255925

五、异常与中断机制

image-20240911223057801

六、指令流水线

题外话:不知不觉就只剩下了干货

提到性能就会想到两个词——时间空间说是一个词也行——时空,世界是物质的,而运动是物质的存在方式和根本属性,更进一步时空是运动着的物质的存在形式,没想到吧在这里看见了马原。

  • 时间并行:将任务分解为子任务阶段,子阶段所需的硬件不同,因此在同一时刻能够处理不同的子阶段,也就是说在同一时刻内可以执行多个任务——流水线技术
  • 空间并行:资源不够用?那就加!在一个处理机内部设置多个执行相同任务的功能部件,并且让其能够并行工作——超标量处理机

(一)五级流水线

RISC经典老祖宗——MIPS的传统流水线架构,将一条指令的执行过程分为五个阶段(功能段、流水段):

  • 取指(IF):从指令存储器或 Cache 中取指令。
  • 译码/读寄存器(ID):操作控制器对指令进行译码,同时从寄存器堆中取操作数。
  • 执行/计算地址(EX):执行运算操作或计算地址。
  • 访存(MEM):对存储器进行读/写操作。
  • 写回(WB):将指令执行结果写回寄存器堆。

理想情况下,每个时钟周期都有一条指令进入流水线,每个时钟周期都有条指令完成,每条指令的时钟周期数(即$CPI$)都为1。

指令集要求

  • 指令长度尽量一致
  • 指令格式尽量规整【确保源寄存器位置相同】
  • 采用LOAD/STORE型指令
  • 边界对齐

image-20240912170934053

每个流水段后面都要增加一个流水段寄存器,用于锁存本段处理完的所有数据,以保证本段的执行结果能在下个时钟周期给下一流水段使用。

时空图

image-20240912171036699

指令执行过程

image-20240912171057729

(二)冒险与处理

image-20240912171235984

在指令流水线中,可能会遇到一些情况使得后续指令无法正确执行而引起流水线阻塞,这种现象称为流水线冒险;包括:结构冒险、数据冒险和控制冒险。

1.结构冒险

资源冲突引起的结构冒险,即有不同指令在同一时刻争用统一功能部件而形成的冲突。

解决方案

  1. 前一指令访存时,使后一条相关指令及其后续指令暂停一个时钟周期
  2. 设置多个独立的部件,如:寄存器读写口分开、数据存储器和指令存储器分开等

2.数据冒险

数据冒险也称数据相关,其产生原因是后面指令用到前面指令的结果,而此时前面指令的结果还没有产生。

  • 写后读(RAW) 前面指令写结果之前,后面指令需要读取结果

    注意:读寄存器在译码阶段,即ID阶段

    按序发射、按序执行

解决方案

  1. 延迟执行相关指令

    软件——nop空指令

    硬件——阻塞(stall)

  2. 转发/旁路技术:两条旁路

  3. load-use数据冒险的处理——无法使用旁路技术,只能采用延迟的方式,更好的解决策略是在编译时对程序进行优化,调整指令顺序

3.控制冒险

指令通常是顺序执行的,但当遇到改变指令执行顺序的情况,例如执行转移或返回指令、发生中断或异常时,会改变PC值,从而造成断流,也称控制冲突

通常把因流水线阻塞带来的延迟时钟周期数称为延迟损失时间片C

解决方案

  1. 对于由转移指令引起的冲突,可采用和解决数据冲突相同的软件插入“nop”指令和硬件阻塞(stal)的方法。比如,延迟损失多少时间片,就插入多少条nop指令。
  2. 对转移指令进行分支预测,尽早生成转移目标地址。分支预测分为简单(静态)预测和动态预测。若静态预测的条件总是不满足,则按序继续执行分支指令的后续指令。动态预测根据程序转移的历史情况,进行动态预测调整,有较高的预测准确率。

想起来了,在体系结构这里是个大坑!!!计组似乎没有涉及那么多内容。

(三)性能指标

吞吐率 单位时间内流水线完成的任务数量或输出结果的数量

其中,$n$是任务数,$T_k$是处理完$n$个任务所用的总时间。若设$k$为流水线级数(段数),$\Delta t$为时钟周期,那么在理想的条件下,一条$k$级流水线能够在$n+k-1$个时钟周期内完成$n$个任务,则有

当连续输入的任务数$n\to\infty$时,最大吞吐率$TP_{max}=\frac{1}{\Delta t}$

加速比

当连续输入的任务数$n\to\infty$时,最大加速比$S_{max}=\frac{1}{k}$

效率 流水线的设备利用率称为流水线的效率

在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积与n个任务所用的时间与k个流水段所围成的时空区总面积之比。

当连续输入的任务数$n\to\infty$时,最大效率$E_{max}=1$

(四)高级流水线

七、多处理器

指令/数据 单数据流 多数据流
单指令 SISD SIMD
多指令 MISD(✖) MIMD

SIMD是指一个指令流同时对多个数据流进行处理,一般称为数据级并行技术。这种结构的计算机通常由一个指令控制部件、多个处理单元组成。每个处理单元虽然执行的都是同一条指令,但是每个单元都有自己的地址寄存器,这样每个单元就都有不同的数据地址,因此,不同处理单元执行的同一条指令所处理的数据是不同的。一个顺序应用程序被编译后,既可能按SISD组织并运行于串行硬件上,又可能按SIMD组织并运行于并行硬件上。SIMD在使用 for 循环处理数组时最有效。

MIMD是指同时执行多条指令分别处理多个不同的数据,MIMD分为多计算机系统和多处理器系统。多计算机系统中的每个计算机节点都具有各自的私有存储器,并且具有独立的主存地址空间,不能通过存取指令来访问不同节点的私有存储器,而要通过消息传递进行数据传送,也称消息传递MIMD。多处理器系统是共享存储多处理器(SMP)系统的简称,它具有共享的单一地址空间,通过存取指令来访问系统中的所有存储器,也称共享存储MIMD。
向量处理器是 SIMD的变体,是一种实现了直接操作一维数组(向量)指令集的 CPU,而串行处理器只能处理单一数据集。其基本理念是将从存储器中收集的一组数据按顺序放到一组向量寄存器中,然后以流水化的方式对它们依次操作,最后将结果写回寄存器。向量处理器在特定工作环境中极大地提升了性能,尤其是在数值模拟或者相似的领域中。
SIMD 和 MIMD 是两种并行计算模式,其中 SIMD 是一种数据级并行模式,而 MIMD 是一种并行程度更高的线程级并行或线程级以上并行计算模式。

多线程部分结合OS

本文到此结束,欢迎邮件交流:3143935826@qq.com ฅ>ω<*ฅ