【计算机组成原理】第五章:中央处理器
本篇笔记课程来源:王道计算机考研 计算机组成原理
【计算机组成原理】第五章:中央处理器
- 一、CPU 的功能和结构
- 1. CPU 的功能
- 2. 运算器的基本结构
- 3. 控制器的基本结构
- 4. CPU 的基本结构
- 二、指令执行过程
- 1. 指令周期的概念
- 2. 指令周期流程
- 3. 指令周期的数据流
- 4. 指令执行方案
- 三、数据通路的功能和基本结构
- 1. 数据通路概述
- 2. 单总线结构
- Ⅰ. 寄存器与寄存器
- Ⅱ. 主存与 CPU(寄存器)
- Ⅲ. ALU 与寄存器
- 3. 专用通路结构
- 四、控制器的功能和工作原理
- 1. 硬布线控制器
- Ⅰ. 微命令和微操作的概念
- Ⅱ. 控制单元电路
- Ⅲ. 硬布线控制器的设计(了解即可)
- 2. 微程序控制器
- Ⅰ. 基本概念
- Ⅱ. 基本结构
- Ⅲ. 工作原理
- Ⅳ. 微指令的设计
- Ⅴ. 微程序控制单元的设计
- 3. 硬布线与微程序的比较
- 五、指令流水线
- 1. 基本概念
- 2. 性能指标
- 3. 五段式指令流水线
- Ⅰ. 基本概念
- Ⅱ. 常见的五类指令
- 4. 影响因素和分类
- Ⅰ. 影响因素
- Ⅱ. 流水线的多发技术
- Ⅲ. 流水线的分类
- 六、多处理器系统
- 1. SISD、SIMD、MIMD、向量处理机
- 2. 共享内存多处理器
- 3. 多计算机系统
- 七、硬件多线程
- 1. 处理器示意图
- 2. 硬件多线程区别
一、CPU 的功能和结构
1. CPU 的功能
- CPU 的功能包括:
- 指令控制:完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
- 操作控制:一条指令的功能往往是由若干操作信号的组合来实现的。CPU 管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
- 时间控制:对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
- 数据加工:对数据进行算术和逻辑运算。
- 中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理。
- CPU 由运算器和控制器组成
- 运算器:对数据进行加工
- 控制器:协调并控制计算机各部件执行程序的指令序列。基本包括:
- 取指令:自动形成指令地址;自动发出取指令的命令
- 分析指令:操作码译码(分析本条指令要完成什么操作);产生操作数的有效地址
- 执行指令:根据分析指令得到的 “操作命令” 和 ”操作数地址“,形成操作信号控制序列,控制运算器、存储器以及 I/O 设备完成相应的操作
- 中断处理:管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)
2. 运算器的基本结构
- 基本结构:
- 算术逻辑单元 ALU:主要功能是进行算术、逻辑运算
- 通用寄存器组:如 AX、BX、CX、DX、SP(堆栈指针)、ACC(累加寄存器)等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等;SP 用于指示栈顶的地址;ACC 用于暂时存放 ALU 运算的结果信息,用于实现加法运算。
- 暂存寄存器:用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容
- 程序状态字寄存器 PSW:保存由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如 OP、SF、ZF、CF 等。PSW 中的这些位参与并决定微操作的形成。
- 移位器:对运算结果进行移位运算
- 计数器:控制乘除运算的操作步数
- 各部件之间的连接方式可分为:专用数据通路方式、CPU 内部单总线方式。这里简单了解,第三节会进一步研究。
- 专用数据通路方式:
- 根据指令执行过程中的数据和地址的流动方向安排连接线路。
- 特点:性能较高,基本不存在数据冲突现象;但结构复杂,硬件量大,不易实现。
- 如果直接用导线连接,相当于多个寄存器同时并且一直向 ALU 传输数据。
- 解决方法 1:使用多路选择器 MUX,根据控制信号选择一路输出
- 解决方法 2:使用三态门,可以控制每一路是否输出。如:R0out 为 1 时 R0 中的数据输出到 A 端,R0out 为 0 时 R0 中的数据无法输出到 B 端
- 解决方法 1:使用多路选择器 MUX,根据控制信号选择一路输出
- CPU 内部单总线方式:
- 将所有寄存器的输入端和输出端都连接到一条公共的通路上。通过 Rnout 控制输出信号,Rnin 控制输入信号
- 特点:结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低
- 当同时有两个输出信号,会导致总线冲突,因此可在其中一端设置一个暂存寄存器,当一端输出存储到暂存寄存器后,再让另端输出
- 暂存寄存器:用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容
- 如:两个操作数分别来自主存和 R0,最后结果存回 R0,那么从主存中取来的操作数直接放入寄存器,就不会破坏运算前 R0 的内容
- 如果 ALU 和寄存器同时输出信号,会导致两个部件信号冲突。解决方法:
- 在 ALU 的输出端设置一个暂存寄存器,当寄存器送到总线上的输入信号稳定后,ALU 会把计算的结果先放到暂存寄存器中
- 寄存器的上面再加一个三态门,等 ALU 输出结果稳定之后,再让三态门导通,从而把运算结果送到内部总线上,再把 R0in 接上有效的电信号,就可以把运算结果返回给 R0 寄存器
- 暂存寄存器还可以增加一些功能比如移位、累加。
3. 控制器的基本结构
- 程序计数器 PC(Program Counter):用于指出下一条指令在主存中的存放地址。CPU 就是根据 PC 的内容去主存中取指令的。因程序中指令(通常)是顺序执行的,所以 PC 有自增功能。
- 指令寄存器 IR(Instruction Register):用于保存当前正在执行的那条指令。
- 一条指令包括操作码 OP 和地址码 Ad
- 操作码经过 ID 译码后送给控制单元 CU,地址码输出到内部总线上
- 指令译码器 ID(Instruction Decoder):仅对操作码字段(OP)进行移译码,向控制器提供特定的操作信号
- 操作码作为译码器的输入,然后译码器对应的某一个输出端会被选通,根据选通线路判断当前执行的是什么指令
- 根据译码器的输出信号决定接下来要执行的是哪些微操作
- 微操作信号发生器:根据 IR 的内容(指令)、PSW 的内容(状态信息)及 时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。
- 译码器的输出信号作为微操作信号发生器的输入信号,用来判断这条指令所对应的微操作序列
- 除了指令的操作码外,还需要根据 PSW 中存放的某些标志信息来决定接下来的微操作序列
- 时序系统:用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到。
- 微操作信号发生器每接收到一个时序信号,就会执行下一个微操作,发出下一个微操作所对应的操作信号
- 存储器地址寄存器 MAR:用于存放所要访问的主存单元的地址。现代计算机中 MAR 通常被集成在 CPU 内部
- 存储器数据寄存器 MDR:用于存放向主存写入的信息或从主存中读出的信息。现代计算机中 MDR 通常被集成在 CPU 内部
- MDRinE\text{MDR}_{in}\text{E}MDRinE 表示从外部的数据总线输入数据的通路是否有效,MDRoutE\text{MDR}_{out}\text{E}MDRoutE 同理
- MDRin\text{MDR}_{in}MDRin 表示从 CPU 内部输入数据的通路是否有效,MDRout\text{MDR}_{out}MDRout 同理
- CPU 内部总线:CPU 内部部件之间进行数据传送的公共通路。
外部总线:CPU 和其他部件之间数据传送的公共通路。
CU(Control Unit,控制单元)包括 指令译码器 ID、时序系统、微操作信号发生器
4. CPU 的基本结构
- CPU 由 ALU、寄存器、CU、中断系统组成
- 用户可见的寄存器(可编程):通用寄存器组、程序状态字寄存器 PSW、程序计数器 PC
- 用户不可见的寄存器:MAR、MDR、IR、暂存寄存器
二、指令执行过程
1. 指令周期的概念
- 指令周期:CPU 从主存中每取出并执行一条指令所需的全部时间
- 一个指令周期可被分为取指周期和执行周期
- 指令周期 常常用若干 机器周期 来表示,机器周期又叫 CPU 周期
- 一个 机器周期 包含若干个时钟周期(也称为节拍、T 周期或 CPU 时钟周期,它是 CPU 操作的最基本单位)时钟周期⊂机器周期⊂指令周期时钟周期⊂机器周期⊂指令周期时钟周期⊂机器周期⊂指令周期
- CLK 指时钟脉冲,一个脉冲就是一个时钟周期(周期顾名思义,联想三角函数的周期)
- 主频 3.0 GHz 表示 1 秒可以发出 3.0G 次节拍(时钟周期)
- 一个机器周期是指完成一个完整子工作所需要的时间,一个机器周期需要由多个时钟周期组成
- 每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等。
- 定长的机器周期:每个机器周期所需时钟周期都相同。
- 不定长的机器周期:每个机器周期所需时钟周期不同。
- 一些常见指令的指令周期
指令 指令周期数 图示 空指令 NOP 1 加法指令 ADD 2 乘法指令 MUL 2 具有间接寻址的指令 ≥ 3 带有中断周期的指令 ≥ 2
2. 指令周期流程
- 四个工作周期都可能有 CPU 访存操作,只是访存的目的不同。
工作周期 标志触发器 访存目的 取指周期 FE(Fetch) 取指令 间址周期 IND(Indirect) 取有效地址 执行周期 EX(Execute) 取操作数 终端周期 INT(Interrupt) 保存程序断点
3. 指令周期的数据流
- 数据流动分为三类:
- 寄存器与寄存器之间的流动
- 寄存器与主存之间的流动
- 寄存器与 ALU 之间的流动
- 取指阶段:根据 PC 中的内容取出指令代码并存放在 IR 中
- 当前指令地址送至存储器地址寄存器,记作:(PC) → MAR\text{(PC) → MAR}(PC) → MAR
- CU 发出控制信号,经控制总线传到主存。如读信号记作:1 → R\text{1 → R}1 → R
- 将 MAR 所指主存中的内容经数据总线送入 MDR,记作:M(MAR) → MDR\text{M(MAR) → MDR}M(MAR) → MDR 或 MEM(MAR) → MDR\text{MEM(MAR) → MDR}MEM(MAR) → MDR
- 将 MDR 中的内容(此时是指令)送入 IR,记作:(MDR) → IR\text{(MDR) → IR}(MDR) → IR
- CU 发出控制信号,形成下一条指令地址,记作:(PC) + n → PC\text{(PC) + n → PC}(PC) + n → PC
- 间址周期:根据 IR 中指令地址取操作数有效地址
- 将指令的地址码(形式地址)送入 MAR,记作:Ad(IR) → MAR\text{Ad(IR) → MAR}Ad(IR) → MAR 或 Ad(MDR) → MAR\text{Ad(MDR) → MAR}Ad(MDR) → MAR
- CU 发出控制信号,启动主存做 读操作,记作:1 → R\text{1 → R}1 → R
- 将 MAR 所指主存中的内容经数据总线送入 MDR,记作:M(MAR) → MDR\text{M(MAR) → MDR}M(MAR) → MDR
- 可选:将有效地址送至指令的地址码字段,记作:(MDR) → Ad(IR)\text{(MDR) → Ad(IR)}(MDR) → Ad(IR)
- 执行周期:根据指令字的操作码和操作数进行相应的操作
- 该阶段的任务是根据 IR 中的指令字的操作码和操作数通过 ALU 操作产生执行结果。
- 不同指令的执行周期操作不同,因此没有统一的数据流向。
- 中断周期:保存断点,送中断向量,处理中断信号
- 该阶段暂停当前任务区完成其他任务(如鼠标单击)。为了能够恢复当前任务,需要保存断点。
- 断点信息一般使用堆栈保存。假设 SP 表示栈顶指针,进栈操作是先修改指针,后存入数据。
- CU 控制将 SP -1,修改后的地址送入 MAR。
- 记作:(SP) - 1 → SP,(SP) → MAR\text{(SP) - 1 → SP,(SP) → MAR}(SP) - 1 → SP,(SP) → MAR
- 本质上是将断点存入某个存储单元,假设其地址为 aaa,故可记作:a → MAR\text{a → MAR}a → MAR
- CU 发出控制信号,启动主存做 写操作,记作:1 → W\text{1 → W}1 → W
- 将断点(PC 内容)送入 MDR,记作:(PC) → MDR\text{(PC) → MDR}(PC) → MDR
- CU 控制将中断服务程序的入口地址(由向量地址形成部件产生)送入 PC,记作:向量地址 → PC\text{向量地址 → PC}向量地址 → PC
4. 指令执行方案
- 一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。
- 方案一:单指令周期
- 对所有指令都选用相同的执行时间来完成。
- 特点:指令之间串行执行;指令周期取决于执行时间最长的指令的执行时间。
- 优点:只需要根据节拍数确定一条指令的执行是否结束,控制电路设计简单
- 缺点:对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度。
- 方案二:多指令周期
- 对不同类型的指令选用不同的执行步骤来完成。
- 特点:指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程。
- 优点:执行快的指令只需要很短的周期就能执行结束
- 缺点:需要更复杂的硬件设计,成本会增加
- 方案三:流水线方案
- 在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。
- 特点:指令之间并行执行
三、数据通路的功能和基本结构
1. 数据通路概述
- 数据通路:数据在功能部件之间传送的路径。
- 信息从哪开始、中间经过了哪些部件、最后传到哪里
- 控制信号由控制部件(CU)产生,根据控制信号建立数据通路。
- 对于各种类型的寄存器来说,有两种控制信号:
- 控制数据输入路径是否畅通
- 控制数据输出路径是否畅通
- 数据通路的基本结构:
- CPU 内部单总线方式:同一时间只允许两个部件之间进行数据交换,它们对总线的使用是独占的
- CPU 内部多总线方式:比如有三个总线就可以同时支持三组部件的数据交换
- 专用数据通路方式:只要两个寄存器之间需要有数据流动,就会单独在这两个寄存器之间专门的建立一个数据通路
2. 单总线结构
- 内部总线:是指同一部件,如 CPU 内部连接各寄存器及运算部件之间的总线
- 系统总线:是指同一台计算机系统的各部件,如 CPU、内存、通道和各类 I/O 接口间互相连接的总线
Ⅰ. 寄存器与寄存器
- 寄存器与寄存器 之间的数据传送:比如把 PC 内容送至 MAR,实现传送操作的流程及控制信号为:
- (PC) → Bus\text{(PC) → Bus}(PC) → Bus:PCout 有效,PC 内容送总线
- Bus → MAR\text{Bus → MAR}Bus → MAR:MARin 有效,总线内容送 MAR
- 可以合在一起写为:(PC) → Bus → MAR\text{(PC) → Bus → MAR}(PC) → Bus → MAR
Ⅱ. 主存与 CPU(寄存器)
- 主存与 CPU(寄存器)之间的数据传送:比如 CPU 从主存读取指令,实现传送操作的流程及控制信号为:
- (PC) → Bus → MAR\text{(PC) → Bus → MAR}(PC) → Bus → MAR:PCout 和 MARin 有效,现行指令地址 → MAR
- 1 → R\text{1 → R}1 → R:CU 发出读命令(通过控制总线发出)
- 地址现在存在 MAR 中,因此要注意此时 MARout 应有效
- MEM(MAR) → MDR\text{MEM(MAR) → MDR}MEM(MAR) → MDR:MDRinE 有效
- MDRinE 表示数据从外部流入 CPU 的通路是否有效
- MDRin 表示数据从内部总线流入 MDR 的通路是否有效
- MDR → Bus → IR\text{MDR → Bus → IR}MDR → Bus → IR:MDRout 和 IRin 有效,现行指令 → IR
Ⅲ. ALU 与寄存器
- 执行算术或逻辑运算 ALU 与寄存器 之间的数据传送:比如一条加法指令(假设其中一个操作数已被存入 ACC),微操作序列及控制信号为:
- 获取另一个操作数的地址
- 方式一:Ad(IR) → Bus → MAR\text{Ad(IR) → Bus → MAR}Ad(IR) → Bus → MAR:根据指令的地址码部分读取出参与加法的另一个操作数,IRout 和 MARin 有效
- 方式二:Ad(MDR) → MAR\text{Ad(MDR) → MAR}Ad(MDR) → MAR:若取指令时已经把指令存放到 MDR 中,然后再把 MDR 值复制到 IR。因此取指结束后,MDR 也存放了这条指令的完整信息。MDRout 和 MARin 有效
- 1 → R\text{1 → R}1 → R:CU 发出读命令
- MEM(MAR) → 外部数据总线 → MDR\text{MEM(MAR) → 外部数据总线 → MDR}MEM(MAR) → 外部数据总线 → MDR:MDRinE 有效
- MDR → Bus → Y\text{MDR → Bus → Y}MDR → Bus → Y:MDRout 和 Yin 有效,操作数 → 暂存寄存器 Y
- (ACC) + (Y) → Z\text{(ACC) + (Y) → Z}(ACC) + (Y) → Z:ACCout 和 ALUin 有效,CU 向 ALU 发送加命令,加法结果输出到暂存寄存器 Z 中
- Z → ACC\text{Z → ACC}Z → ACC:Zout 和 ACCin 有效,结果 → ACC
- 获取另一个操作数的地址
3. 专用通路结构
- 取指周期:
- (PC) → MAR\text{(PC) → MAR}(PC) → MAR:PC 值传送到 MAR,C0 有效
- (MAR) → 主存\text{(MAR) → 主存}(MAR) → 主存:MAR 将地址传送给主存,C1 有效
- 1 → R\text{1 → R}1 → R:控制单元向主存发送读命令
- M(MAR) → MDR\text{M(MAR) → MDR}M(MAR) → MDR:主存通过外部总线将指令传送给 MDR,C2 有效
- (MDR) → IR\text{(MDR) → IR}(MDR) → IR:指令从 MDR 复制到 IR,C3 有效
- (PC) + 1 → PC\text{(PC) + 1 → PC}(PC) + 1 → PC:每取出一条指令,PC +1
- Op(IR) → CU\text{Op(IR) → CU}Op(IR) → CU:指令发送给 CU 进行译码,C4 有效
四、控制器的功能和工作原理
1. 硬布线控制器
- 硬布线控制器的特点
- 指令越多,设计和实现就越复杂,因此一般用于 RISC(精简指令集系统)
- 如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难
- 由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路即时产生
Ⅰ. 微命令和微操作的概念
- CU 发出一个微命令(控制信号),可完成对应微操作(一对一)
- 如:微命令1 使得 PCout、MARin 有效,完成对应的微操作1 (PC) → MAR\text{(PC) → MAR}(PC) → MAR
- 微操作更多的是描述要做的细分的工作,这个工作要完成一个什么样的功能
- 微命令指要完成这个细分的工作,所需要发出的一些有效的控制信号
- 一个节拍内可以并行完成多个 “相容的” 微操作(比如专用通路结构)
- 同一个微操作可能在不同指令的不同阶段(阶段即指令周期流程)被使用(比如间接寻址)
Ⅱ. 控制单元电路
前情提要:
- 为了让电路设计更简单,故假设采用定长机器周期的策略,以可能出现的最大节拍数为准,通常以访存所需节拍数作为参考(访存最慢)
- 若实际所需节拍数较少,可将微操作安排在机器周期末尾几个节拍上进行
- 根据指令操作码、目前的机器周期、节拍信号、机器状态条件,即可确定现在这个节拍下应该发出哪些 “微命令”:
- 指令操作码:首先把指令寄存器 IR 中的 n 位操作码送到操作码译码器,这 n 位操作码对应 2n2^n2n 种不一样的指令。译码器的不同线对应 CU 中不同的部件
- 目前的机器周期:CU 根据四个触发器中(FE、IND、EX、INT,集成在 CU 内部)哪个触发器的值为 1 判断目前处于哪个机器周期
- 节拍信号:通过节拍发生器循环发出脉冲,每一个脉冲信号就是一个时钟周期(即节拍),CU 根据与节拍发生器的导通信号判断当前处于第几个节拍
- 机器状态条件:统称为标志,标志来自执行单元的反馈信息(如来自运算器的 PSW、ACC 的符号位等,或来自 I/O 设备、主存),这些标志可能会影响到接下来的微操作序列执行流
- 应该发出哪些 “微命令”:CU 每一条输出线对应一个微命令。举个简单例子:
- 如要让 C1 对应微操作(PC)→ MAR,则将其接到 PCout、MARin 即可
- 如所有指令的取指周期、T0 节拍下(T0 指当前周期第 1 个节拍)一定要完成(PC)→ MAR。则可知 C1 = FE · T0(与门)
- 举个复杂的例子,了解即可。
- M(MAR) → MDR\text{M(MAR) → MDR}M(MAR) → MDR 微操作命令的逻辑表达式:FE ⋅T1+IND ⋅T1(ADD + STA + LDA + JMP + BAN) + EX ⋅T1ADD + LDA\text{FE }·\text{ T}_1+\text{IND }·\text{ T}_1\text{(ADD + STA + LDA + JMP + BAN) + EX }·\text{ T}_1\text{ADD + LDA}FE ⋅ T1+IND ⋅ T1(ADD + STA + LDA + JMP + BAN) + EX ⋅ T1ADD + LDA
- M(MAR) → MDR\text{M(MAR) → MDR}M(MAR) → MDR 微操作命令的逻辑表达式:FE ⋅T1+IND ⋅T1(ADD + STA + LDA + JMP + BAN) + EX ⋅T1ADD + LDA\text{FE }·\text{ T}_1+\text{IND }·\text{ T}_1\text{(ADD + STA + LDA + JMP + BAN) + EX }·\text{ T}_1\text{ADD + LDA}FE ⋅ T1+IND ⋅ T1(ADD + STA + LDA + JMP + BAN) + EX ⋅ T1ADD + LDA
Ⅲ. 硬布线控制器的设计(了解即可)
- 设计步骤,了解即可:
- 分析每个阶段的微操作序列(取指、间址、执行、中断四个阶段),确定哪些命令在什么阶段、在什么条件下会使用到的微操作
- 选择 CPU 的控制方式,确定采用定长机器周期还是不定长机器周期、每个机器周期安排几个节拍等
- 安排微操作时序,假设采用同步控制方式(定长机器周期),一个机器周期内安排 3 个节拍,如何用 3 个节拍完成整个机器周期内的所有微操作
- 电路设计,确定每个微操作命令的逻辑表达式,并用电路实现
- 分析每个阶段的微操作序列,罗列出所有指令在各个阶段的微操作序列,就可以知道在什么情况下使用这个微操作。已知取指、间址、中断这三个周期的所有指令都一样
- 取指周期
PC → MAR // 程序计数器值送地址寄存器 1 → R // 发出读命令 M (MAR) → MDR // 按地址读内存到数据寄存器 MDR → IR // 数据寄存器值送指令寄存器 OP (IR) → ID // 指令操作码送译码器 (PC) + 1 → PC // 程序计数器自增,指向下一条指令
- 间址周期
Ad(IR) → MAR // 指令寄存器中地址段送地址寄存器 1 → R // 发读命令,启动内存读操作 M (MAR) → MDR // 内存按地址读数据到数据寄存器 MDR → Ad(IR) // 数据寄存器内容送回指令寄存器地址段
- 执行周期,不同指令各不相同。如
CLA
(clear ACC):将 ACC 寄存器清零,0 → ACLDA X
:取数指令,把 X 所指内容取到 ACC。微操作序列同间址周期,但最后一步 MDR → ACJMP X
:无条件跳转,Ad (IR) → PCBAN X
(Branch ACC Negative):条件转移,当 ACC 为负时转移。- 设 A0 代表负数符号位,当 ACC 为负时 A0 = 1
- A0⋅Ad(IR) + A0‾⋅(PC) → PC\text{A}_0\,·\,\text{Ad(IR) + }\overline{\text{A}_0}\,·\,\text{(PC) → PC}A0⋅Ad(IR) + A0⋅(PC) → PC
- 中断周期:
(SP) - 1 → SP // 栈指针减1,指向新的栈顶位置 (SP) → MAR // 将栈指针的值送到地址寄存器,确定写入内存的地址 1 → W // 发出写命令,通知存储器准备写入数据 (PC) → MDR // 将程序计数器的值(返回地址)存入数据寄存器 向量地址 → PC // 将中断向量地址送入程序计数器,准备跳转到中断服务程序
- 取指周期
- 选择 CPU 控制方式:为了电路简单,采用定长机器周期,每个机器周期 3 个节拍
- 安排微操作时序,遵循以下原则:
- 原则一:微操作的先后顺序不得随意更改
- 原则二:被控对象不同的微操作,尽量安排在一个节拍内完成
- 原则三:占用时间较短的微操作,尽量安排在一个节拍内完成,并允许有先后顺序(如 CPU 中寄存器之间的数据传送)
- 电路设计,设计步骤:
- 列出操作时间表:列出在取指、间址、执行、中断周期,T0、T1、T2 节拍内有可能用到的所有微操作
- 写出微操作命令的最简表达式
- 画出逻辑图
2. 微程序控制器
Ⅰ. 基本概念
- 程序和微程序:
- 程序:由指令序列组成
- 微程序:由微指令序列组成,每一种指令对应一个微程序
- 指令和微指令:
- 指令是对程序执行步骤的描述,指令是对微指令功能的 “封装”
- 微指令是对指令执行步骤的描述
- 微命令和微操作:
- 微命令与微操作一一对应,微指令中可能包含多个微命令
- 其他补充:
- 采用 “存储程序” 的思想,CPU 出厂前将所有指令的 “微程序” 存入 “控制器存储器” 中,然后 CPU 根据当前要执行的指令类型,找到与这条机器指令所对应的微程序,然后逐条地执行这个微程序中所包含的微指令序列
- 微程序控制器中可能出现多种微指令,每一种微指令会对应一系列相应的微操作,因此每一条微指令需要有操作控制字段,用若干比特表示当前微指令所对应的微操作是哪几个;还需要有顺序控制字段,用若干比特指明下一条微指令的地址
层次 | 概念 | 核心定义 | 与上一层的关系 | 类比(便于理解) |
---|---|---|---|---|
1 | 程序(Program) | 为完成特定任务(如计算1+1、播放视频),由一系列指令按逻辑顺序组成的集合 | 程序、软件任务 (顶层) | 菜谱(整本书,指导完成一道菜的全部步骤) |
2 | 指令(Instruction) | 计算机硬件能直接识别的基本操作命令(如“加法”“数据从内存读入CPU”),是程序的基本单位 | 由若干 指令(硬件基本命令) 组成 | 菜谱中的一个步骤(如“将鸡蛋打散”) |
3 | 微程序(Microprogram) | 为实现一条指令的功能,由一系列微指令按逻辑顺序组成的集合 | 每条指令由 微程序(指令的子步骤) 实现 | 拆解“打鸡蛋”的子步骤清单(拿鸡蛋→磕碗→搅拌) |
4 | 微指令(Microinstruction) | 控制CPU内部一组相关微操作同步执行的命令,是微程序的基本单位 | 每个微程序由若干 微指令(同步动作控制) 组成 | 拆解后的一个子步骤(如“磕碗”) |
5 | 微命令(Microcommand) | 直接驱动硬件部件动作的最小控制信号(如“打开CPU内部某个门电路”“启动寄存器读写”),是微指令的组成部分 | 每条微指令包含若干 微命令(硬件控制信号) | 驱动“磕碗”的具体动作信号(“手指用力按压蛋壳”) |
6 | 微操作(Microoperation) | 计算机硬件在微命令驱动下完成的最小、不可再分的物理动作(如“寄存器A的数据传送到寄存器B”“ALU执行加法”) | 每个微命令驱动一个 微操作(硬件最小动作) | 硬件实际完成的动作(“蛋壳裂开”) |
Ⅱ. 基本结构
- 控制存储器 CM(Control Memory):用于存放各指令对应的微程序,CM 内按地址寻访,可由只读存储器 ROM 构成
- 微地址寄存器:CMAR,别名 μPC(可理解为 MAR 和 PC 的结合体),接收微地址形成部件送来的微地址,为在 CM 中读取微指令做准备
- 地址译码器:将地址码转化为 CM 中对应的存储单元控制信号
- 微指令寄存器:CMDR,别名 μIR,用于存储从 CM 中取出的微指令,它的位数同微指令字长相同
- 控制码部分:操作控制字段,向 CPU 内部和系统总线发出控制信号
- 下地址部分:顺序控制字段,用于控制顺序逻辑
- 微地址形成部件:根据机器指令的操作码来确定所对应的微指令序列的首地址,产生初始微地址和后继微地址,以保证微指令的连续执行
- 顺序逻辑:一个逻辑电路,用于控制微指令的执行顺序
所有指令的取指周期、间址周期、中断周期所对应的微指令序列都一样,因此可以共享使用
Ⅲ. 工作原理
- 指令周期 = 取指周期 → 间址周期 → 执行周期 → 中断周期。
- 取指周期的微指令序列固定从 0 号单元开始存放
- 执行周期的位置了序列的存放根据指令操作码确定
- 间址、中断周期可有可无
- 根据指令地址码的寻址特征位判断是否需要跳过间址周期
- 根据中断信号判断是否进入中断周期
- 间址周期的最后一条微指令执行结束后,会直接转到执行周期
- 终端周期的最后一条位置了执行结束后,会直接转到取指周期
- 取指周期、间址周期、中断周期内的微指令都是一样的,因此微程序段通常是公用的。
- 如果某指令系统中有 nnn 条机器指令,则 CM 中微程序(段)的个数至少是 n+1n+1n+1 个
- 这 nnn 条机器指令所对应的执行周期微程序段都不一样,因此需要设计 nnn 个微程序来分别描述这 nnn 条机器指令的执行周期所需要做的事情
- +1+1+1 是因为要加上公用的 取指周期 微程序
- “ 至少 ” 是因为早期的一些 CPU、物联网设备的 CPU 可以不提供间址个中断功能,因此这类 CPU 可以不包含间址周期、中断周期的微程序段
Tips:
- 物理上,取指周期、执行周期看起来像是两个微程序,但逻辑上应该把他们看作一个整体。
- 因此,一条指令对应一个微程序 的说法是正确的
Ⅳ. 微指令的设计
- 微指令的格式:水平型微指令、垂直型微指令、混合型微指令
相容性微命令:可以并行完成的微命令。
互斥性微命令:不允许并行完成的微命令。- 水平型微指令:一条微指令能定义 多个 可并行的微命令。
- 优点:微程序短,执行速度快。
- 缺点:微指令长,编写微程序较麻烦。
- 垂直型微指令:一条微指令只能定义 一个 微命令,由微操作码字段规定具体功能
- 优点:微指令短、简单、规整,便于编写微程序
- 缺点:微程序长,执行速度较慢,工作效率低
- 混合型微指令:
- 在垂直型的基础上增加一些不太复杂的并行操作。
- 微指令较短,仍便于编写;微程序也不长,执行速度加快。
- 水平型微指令:一条微指令能定义 多个 可并行的微命令。
- 微指令的编码方式,又称为微指令的控制方式。
- 它是指如何对微指令的控制字段进行编码,以形成控制信号。
- 编码的目标是在保证速度的情况下,尽量缩短微指令字长。
以水平型微指令为例。
- 直接编码(直接控制)方式:
- 在微指令的操作控制字段中,每一位代表一个微操作命令。如规定某位为 1 表示该控制信号有效
- 优点:简单、直观、执行速度快,操作并行性好
- 缺点:微指令字长过长,nnn 个微命令就要求微指令的操作字段有 nnn 位,造成控存(CM)容量极大
- 字段直接编码方式
- 将微指令的控制字段分成若干个 ”段“,每段经编译后发出控制信号
- 微命令字段分段原则:
- 互斥性微命令分在同一段内,相容性微命令分在不同段内
- 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间
- 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段的长度为 3 位时,最多只能表示 7 个互斥的微命令,通常用 000 表示不操作。
- 优点:可以缩短微指令字长
- 缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢。
- 字段间接编码方式
- 一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接编码,又称隐式编码。
- 优点:可进一步缩短微指令字长。
- 缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段。
- 微指令的地址形成方式
- 微指令的下地址字段指出:微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址,这种方式又称为断定方式。
- 根据机器指令的操作码形成:当机器指令取至指令寄存器后,微指令的地址由操作码经为地址形成部件形成。
- 增量计数器法:在当前微指令执行结束后,把地址信息加一。(CMAR)+1→CMAR\text{(CMAR)}+1 \rightarrow \text{CMAR}(CMAR)+1→CMAR
- 分支转移
- 转移方式:指明判别条件
- 转移地址:指明转移成功后的去向
- 通过测试网络:即顺序逻辑,当前执行的微指令结合标志信息决定接下来应该执行的微指令的存放地址。如根据间址标志信息决定是否需要进入间址周期。
- 由硬件产生微程序入口地址
- 第一条微指令地址:由专门硬件产生(用专门的硬件记录取指周期微程序首地址)
- 中断周期:由硬件产生中断周期微程序首地址(用专门的硬件记录)
Ⅴ. 微程序控制单元的设计
- 设计步骤:
- 分析每个阶段的微操作序列
- 写出对应机器指令的微操作命令及节拍安排
- 写出每个周期所需要的微操作(参考硬布线)
- 补充微程序控制器特有的微操作:
# --------------------- 取指周期 ---------------------// 需要用一个节拍确定下一条微指令的地址,每条微指令结束之后都需要进行 Ad(CMDR) → CMAR // 取指周期的最后一条微指令完成后,要根据指令操作码确定其执行周期微指令序列的首地址 OP (IR) → 微地址形成部件 → CMAR # --------------------- 执行周期 --------------------- // 和取指周期一样 Ad(CMDR) → CMAR
- 每执行完一条微指令后,都需要再用一个节拍指明下一条微指令的存放地址。因此,微程序控制器的速度比硬布线控制器更慢。以取指周期为例。
# --------------------- T0 微指令a --------------------- PC → MAR // 程序计数器值送地址寄存器 1 → R // 发出读命令# --------------------- T1 --------------------- Ad(CMDR) → CMAR // 需要用 T1 节拍确定下一条微指令的地址# --------------------- T2 微指令 b --------------------- M (MAR) → MDR // 按地址读内存到数据寄存器 (PC) + 1 → PC // 程序计数器自增,指向下一条指令# --------------------- T3 --------------------- Ad(CMDR) → CMAR // 需要用 T3 节拍确定下一条微指令的地址# --------------------- T4 微指令 c --------------------- MDR → IR // 数据寄存器值送指令寄存器 OP (IR) → 微地址形成部件 // 指令操作码送微地址形成部件# --------------------- T5 --------------------- 微地址形成部件 → CMAR // 根据指令操作码确定其执行周期微指令序列的首地址
- 确定微指令格式
- 根据微操作个数决定采用何种编码方式(直接编码、字段直接编码、字段间接编码),以确定微指令的操作控制字段的位数。
- 根据 CM 中存储的微指令总数,确定微指令的顺序控制字段的位数。
- 最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长。
- 编写微指令码点
- 根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点。
- 微程序设计分类
- 静态微程序设计和动态微程序设计
- 静态:微程序无需改变,采用 ROM
- 动态:通过改变微指令和微程序改变机器指令,有利于仿真,采用 EPROM
- 毫微程序设计
- 微程序设计:用微程序解释机器指令
- 毫微程序设计:用毫微程序解释微程序
- 豪微指令与微指令的关系好比微指令与机器指令的关系。
- 静态微程序设计和动态微程序设计
3. 硬布线与微程序的比较
对比项目 | 微程序控制器 | 硬布线控制器 |
---|---|---|
工作原理 | 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 | 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生 |
执行速度 | 慢 | 快 |
规整性 | 较规整 | 繁琐、不规整 |
应用场合 | CISC CPU | RISC CPU |
易扩充性 | 易扩充修改 | 困难 |
五、指令流水线
1. 基本概念
- 指令执行过程划分为不同阶段,占用不同资源没就能使多条指令同时执行。
- 根据计算机的不同,具体的分法页不同。常见的分法是【取值、分析、执行】
- 顺序执行方式:
- 传统冯诺依曼机采用顺序执行方式,又称串行执行方式。
- 设取值、分析、执行 3 个阶段的时间都相同,用 ttt 表示,则分析 nnn 条指令的执行时间总耗时 T=n×3t=3ntT=n × 3t=3ntT=n×3t=3nt
- 优点:控制简单,硬件代价小
- 缺点:执行指令的速度较慢,在任何时刻,处理及中只有一条指令在执行,各功能部件的利用率很低
- 一次重叠执行方式
- 第二条指令的第一个阶段和上一条指令的最后一个阶段在时间上重叠。则 nnn 条指令的执行时间总耗时 T=3t+(n−1)×2t=(1+2n)tT=3t+(n-1)×2t=(1+2n)tT=3t+(n−1)×2t=(1+2n)t
- 优点:程序的执行时间缩短了 13\frac{1}{3}31,各功能部件的利用率明显提高
- 缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂。
- 二次重叠执行方式
- 与顺序执行方式相比,指令的执行时间缩短近 23\frac{2}{3}32。这是较理想的指令执行方式,在正常情况下,处理机中同时有 3 条指令在执行。
- nnn 条指令的执行时间总耗时 T=3t+(n−1)×t=(2+n)tT=3t+(n-1)×t=(2+n)tT=3t+(n−1)×t=(2+n)t
- 也可以把每条指令的执行过程分为 4 个或 5 个阶段,分成 5 个阶段是比较常见的做法。
- 流水线的表示方式
- 指令执行过程图:
- 即二次重叠执行方式的示例图,横轴表时间,纵轴表指令序列。每个纵坐标表示一条指令的执行
- 主要用于分析指令执行过程以及影响流水线的因素
- 时空图
- 横轴表时间,纵坐标表不同阶段所对应的不同的硬件资源(空间)
- 主要用于分析流水线的性能
- 指令执行过程图:
2. 性能指标
- 吞吐率
- 吞吐率是指单位时间内流水线所完成的任务数量,或是输出结构的数量
- 装入时间:第一条指令从取值到结束这一段时间
- 排空时间:最后一条指令从取值到结束这一段时间
- 设任务数为 nnn,处理完成 nnn 个任务所用的时间为 TkT_kTk,则计算流水线吞吐率 TPTPTP 的最基本公式为 TP=nTkTP=\frac{n}{T_k}TP=Tkn
理想情况下,流水线的时空图如下:
一条指令的执行分为 kkk 个阶段,每个阶段耗时 ΔtΔtΔt,一般取 ΔtΔtΔt = 一个时钟周期- Tk=(k+n−1)ΔtT_k=(k+n-1)ΔtTk=(k+n−1)Δt
- 流水线的实际吞吐率为 TP=n/(k+n−1)ΔtTP=n / (k+n-1)ΔtTP=n/(k+n−1)Δt
- 当连续输入的任务 n→∞n→∞n→∞ 时,得最大吞吐率为 TPmax=1/Δt\text{TP}_{max}=1/ΔtTPmax=1/Δt
- 加速比
- 完成同样一批任务,不使用流水线的时间与使用流水线所用的时间之比。
- 设 T0T_0T0 表示不使用流水线的执行时间,即顺序执行所用的时间;TkT_kTk 表示使用流水线时的执行时间,则计算流水线加速比 SSS 的基本公式为S=T0TkS=\frac{T_0}{T_k}S=TkT0
- 依旧是理想情况下,单独完成一个任务耗时为 kΔtkΔtkΔt,则顺序完成 nnn 个任务耗时 T0=nkΔtT_0=nkΔtT0=nkΔt。
- 实际加速比为 S=knΔt(k+n−1)Δt=knk+n−1S=\frac{knΔt}{(k+n-1)Δt}=\frac{kn}{k+n-1}S=(k+n−1)ΔtknΔt=k+n−1kn。
- 当连续输入的任务 n→∞n→∞n→∞ 时,最大加速比 Smax=kS_{max}=kSmax=k
- 效率
- 流水线的效率是指流水线的设备利用率(硬件设备处于忙碌的时间占总时间的比例)。
- 在时空图上,流水线的效率定义为完成 nnn 个任务占用的时空区有效面积与 nnn 个任务所用的时间与 kkk 个流水段所围成的时空区总面积之比。则流水线效率 EEE 的一般公式为E=n个任务占用k时空区有效面积n个任务所用的时间与k个流水段所围成的时空区总面积=T0kTkE=\frac{n个任务占用 k时空区有效面积}{n 个任务所用的时间与k个流水段所围成的时空区总面积}=\frac{T_0}{kT_k}E=n个任务所用的时间与k个流水段所围成的时空区总面积n个任务占用k时空区有效面积=kTkT0
- 当连续输入的任务 n→∞n→∞n→∞ 时,最高效率 Emax=1E_{max}=1Emax=1
3. 五段式指令流水线
Ⅰ. 基本概念
- 对于大部分五段式指令流水线,所有指令一定是五个机器周期,可以在某个阶段什么都不做,但是时间一定要跑满
- 为方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准。此处将机器周期设置为 100ns。
- 流水线每一个功能段部件后面都要有一个缓冲存储器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。有了锁存器,就能统一每个阶段的时间开销。
- 参考上图,一条指令的执行分为五个阶段:
- 取指阶段(IF):根据 PC 所指向的位置去 Instruction Cache 找出当前要执行的这条指令,然后把找到的指令放到功能段的锁存器中。
- 指令译码阶段(ID):完成指令译码工作、以及取数操作,把这条指令要用的操作数从通用寄存器中取出来放到锁存器里。
- 执行阶段(EX):用 ALU 来处理上一个阶段取出的操作数,把输出结果放到锁存器中。
- 访存阶段(M):运算结果可能需要写回主存,也可能写入锁存器。
- 首先访问 Data Cache,如果未命中再访问主存。
- RISC 处理器只有 “取数 LOAD” 和 “存数 STORE” 指令才能访问主存。
- 写回阶段(WB):将上一阶段锁存器的运算结果写回通用寄存器
Ⅱ. 常见的五类指令
Rs 指源操作数(source)
Rd 指目的操作数(destination)
下面的各种英文名字参考上图
- 运算类指令
- IF:根据 PC 从指令 Cache 取指令至 IF 段的锁存器
- ID:去除操作数至 ID 段锁存器
- EX:运算,将结果存入 EX 段锁存器
- M:空段
- WB:将运算结果写回指定寄存器
- 取数(LOAD)指令
- IF:根据 PC 从指令 Cache 取指令至 IF 段的锁存器
- ID:将基址寄存器的值放到锁存器 A,将偏移量的值放到立即数锁存器 Imm
- EX:运算,得到有效地址 EA
- M:根据 EA 从数据 Cache 中取数并放入锁存器
- WB:将取出的数写回寄存器
- 存数(STORE)指令
- IF:······
- ID:将基址寄存器的值放到锁存器 A,将偏移量的值放到 Imm,将要存的数放到 B
- EX:运算,得到有效地址 EA,并将是锁存器 B 的内容放到锁存器 Store 中。
- M:写入数据 Cache
- WB:空段
- 条件转移指令:
- 转移类指令常采用相对地址
- 假设每条指令固定 4B
指令的汇编格式 英文 功能 说明 beq Rs,Rt,#偏移量
branch equal 若 (Rs) == (Rt)
则(PC) + 指令字长 + (偏移量 × 指令字长) → PC
否则(PC) + 指令字长 → PC
如果相等
就转移到当前指令 + 指令字长 4 + (偏移量 996 × 4)
否则,顺序执行下一条指令bne Rs,Rt,#偏移量
branch not equal 若 (Rs) != (Rt)
则(PC) + 指令字长 + (偏移量 × 指令字长) → PC
否则(PC) + 指令字长 → PC
如果不相等
就转移到当前指令 + 指令字长 4 + (偏移量 996 × 4)
否则,顺序执行下一条指令- IF:······
- ID:进行比较的两个数放入锁存器 A、B;偏移量放入 Imm
- EX:运算,比较两个数
- M:不进行访存,将目标 PC 值写回 PC
- WB:空段
- 无条件转移指令
- IF:······
- ID:偏移量放入 Imm
- EX:把目标 PC 值写回 PC
- M:空段
- WB:空段
4. 影响因素和分类
Ⅰ. 影响因素
- 结构相关(资源冲突)
- 结构相关是指:由于多条指令在同一时刻争用同一资源而形成的冲突。类似于操作系统中的资源互斥。
- 解决办法:
- 后一相关指令暂停一周期
- 资源重复配置:不进行访存,而是用不同的存储器存放数据和指令。数据存储器 + 指令存储器
- 数据相关(数据冲突)
- 数据相关是指:在一个程序中,存在必须等前一指令执行完才能执行后一条指令的情况。类似于操作系统中的同步。
- 解决办法:
- 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,知道数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入 “NOP” 两种方法。
- 数据旁路技术:也称为转发机制。
- 编译优化:通过编译器调整指令顺序来解决数据相关。
- 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,知道数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入 “NOP” 两种方法。
- 控制相关(控制冲突)
- 当流水线遇到转移指令和其他改变 PC 值的指令而造成断流时,会引起控制相关。
- 解决办法:
- 转移指令分支预测:简单预测(永远猜 true 或 false)、动态预测(根据历史情况动态调整)
- 预取转移成功和不成功两个控制流方向上的目标指令。
- 加快和提前形成条件码。
- 提高转移方向的猜准率,是第一种方法的优化。
- 当流水线遇到转移指令和其他改变 PC 值的指令而造成断流时,会引起控制相关。
Ⅱ. 流水线的多发技术
- 超标量技术
- 每个时钟周期内可并发多条独立指令。是一种空分复用技术
- 要配置多个功能部件
- 不能调整指令的执行顺序
- 通过编译优化技术,把可并行执行的指令搭配起来
- 超流水技术
- 在一个时钟周期内再分段(如 3 段)。是一种时分复用技术
- 再一个时钟周期内一个功能部件使用多次(如 3 次)
- 不能调整指令的执行顺序
- 靠编译程序解决优化问题
- 超长指令字
- 由编译程序挖掘出指令间潜在的并行性,会将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位)
- 采用多个处理部件
Ⅲ. 流水线的分类
- 根据流水线使用的级别不同,流水线可分为【部件功能级流水线、处理机级流水线、处理机间流水线】
- 部件功能级流水线:将复杂的算术逻辑运算组成流水线工作方式。例如:可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等 4 个子过程。
- 处理机级流水线:把一条指令解释过程分成多个子过程,如五段式指令流水线。
- 处理机间流水线:是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
- 按流水线可以完成的功能,流水线可分为【单功能流水线、多功能流水线】
- 单功能流水线:智能实现一种固定的专门功能的流水线。
- 多功能流水线:通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
- 按同一时间内各段之间的连接方式,流水线可分为【静态流水线、动态流水线】
- 静态流水线:在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
- 动态流水线:在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算,这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
- 按流水线的各个功能段是否有反馈信号,流水线可分为【线性流水线、非线性流水线】
- 线性流水线:从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
- 非线性流水线:存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合线性递归的运算。
六、多处理器系统
1. SISD、SIMD、MIMD、向量处理机
- SISD:单指令流单数据流
- 本课程探讨的就是 SISD。
- 特性:
- 各指令序列只能并发、不能并行,每条指令处理一两个数据。
- 不是 数据级并行技术
- 硬件组成:
- 一个处理器 + 一个主存储器。
- 若采用指令流水线,需设置多个功能部件,采用多模块交叉存储器
- SIMD:单指令流多数据流
- 对结构类似的大量数据进行相同处理。一条指令处理很多个数据
- 应用:
- 某些显卡常采用 SIMD,图像处理时,常对每个像素点进行完全一样的渲染
- 可用于优化 for 循环中对 数组元素 的重复处理
- 特性:
- 各指令序列只能并发、不能并行,但每条指令可同时处理很多个具有相同特征的数据
- 是一种 数据级并行技术
- 硬件组成:
- 一个指令控制部件(CU)+ 多个处理单元 / 执行单元(如 ALU)+ 多个局部存储器 + 一个主存储器
- 每个执行单元有各自的寄存器组、局部存储器、地址寄存器
- 不同执行单元执行同一条指令,处理不同的数据
- MISD:多指令流单数据流
- 多条指令并行执行,处理同一个数据。现实中不存在这种计算机
- MIMD:多指令流多数据流
- 应用:现代个人计算机 CPU,如 Intel i5
- 特性:
- 各指令序列并行执行,分别处理多个不同的数据
- 是一种 线程级并行、甚至是线程级以上并行技术
- 进一步分类:多处理器系统、多计算机系统
- 向量处理机:SIMD 思想的进阶应用
- 向量处理机的 LOAD 指令,可以将一个向量取到向量寄存器中;
- 应用:向量计算、大量浮点数计算、空气动力学等;“银河” 超算
- 特性:
- 一条指令的处理对象是“向量”
- 擅长对向量型数据并行计算、浮点数运算,常被用于超级计算机中,处理科学研究中巨大运算量
- 硬件组成:
- 多个处理单元,多组 “向量寄存器”
- 主存储器采用 “多个端口同时读取” 的交叉多模块存储器
- 主存储器大小限定了机器的解题规模,因此要有大容量的、集中式的主存储器
2. 共享内存多处理器
- 共享内存多处理器(Shared Memory multiProcessor,SMP),简称 多处理器系统
- 应用:现代计算机、智能手机
- 特性:
- 各处理器之间,可以通过 LOAD / STORE 指令,访问同一个主存储器,可通过主存相互传送数据
- 硬件组成:
- 一台计算机中,包含多个处理器 + 一个主存储器
- 多个处理器共享单一的物理地址空间
- 还有个名叫 多核处理器,描述的是一个东西,只是命名角度不同。
- 一个 CPU 芯片中包含了多个处理器,即多个核(Core),因此通常也称为 片级多处理器(Chip-Level MultiProcessor,CMP)
- 所有核共享一个 LLC(Last-Level Cache),并共享主存储器
3. 多计算机系统
- 也称为消息传递系统
- 应用:多台计算机组成的 “分布式计算系统”
- 特性:各计算机之间,不能通过 LOAD / STORE 指令直接访问对方的存储器,只能通过 “消息传递” 相互传送数据
- 硬件组成:
- 由多台计算机组成,因此拥有多个处理器 + 多个主存储器
- 每台计算机拥有各自的私有存储器,物理地址空间相互独立
七、硬件多线程
1. 处理器示意图
- 传统的单核处理器,不支持硬件多线程的处理器
- 支持硬件多线程的处理器
2. 硬件多线程区别
细粒度多线程 | 粗粒度多线程 | 同时多线程(SMT) | |
---|---|---|---|
指令发射 | 轮流发送各线程的指令(每个时钟周期发送一个线程) | 连续几个时钟周期,都发送同一线程的指令序列,流水线阻塞时,切换到另一个线程 | 一个时钟周期内,同时发射多个线程的指令 |
线程切换频率 | 每个时钟周期切换一次线程 | 只有流水线阻塞时才切换一次线程 | - |
线程切换代价 | 低 | 高,需要重载流水线 | - |
并行性 | 指令级并行,线程间不并行 | 指令级并行,线程间不并行 | 指令级并行,线程级并行 |