--- title: "《计组》中央处理器" date: 2023-07-20T09:56:49+08:00 --- ## CPU的功能和基本结构 ### CPU的概述 * CPU功能 * 指令控制 * 完成取指令、分析指令和执行指令的操作,即程序的顺序控制 * 操作管理 * 管理并产生由内存取出的每条指令的操作信号 * 把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作 * 时间控制 * 对各种操作进行时间上的控制,为每一条指令按时间顺序提供应有的控制信号 * 数据加工 * 对数据进行算术和逻辑运算 * 中断处理 * 对计算机运行过程中出现的异常情况和特殊请求进行处理 * CPU的组成 * CPU = 运算器+控制器 * CPU寄存器分类 * 用户可见寄存器 * 可对这类寄存器编程 * 例:通用寄存器,PSW,基址寄存器(用于多道程序设计或编制浮动程序),状态/标志寄存器 * 用户不可见寄存器 * 对用户透明 * 保留各种状态信息 * 如溢出标志符OF,符号标志SF,零标志ZF,进位标志CF * PSW中的这些为参与并决定微操作的形成 * 不可对此类寄存器编程 * 例:MAR、MDR、IR、微程序控制器CM * CPU常混淆点 * 转移指令时,需要判断转移是否成功,若成功则PC修改为转移指令的目标地址,否则下一条指令的地址仍然为PC自增后的地址 * 计算机分两个部分 * 控制部件 * 控制器、指令寄存器、操作控制器、程序计数器都是控制部件 * 执行部件 * 运算器、存储器、外围设备 * 各寄存器的位数代表什么 * |通用寄存器|PC|IR|MAR|MDR| |---|---|---|---|---| |机器字长|存储器容量|指令字长|指令字长|机器字长=CPU的位数| ### 运算器和控制器 * 运算器 * 接收从控制器送来的命令并执行相应的动作,对数据进行加工和处理 * 是计算机对数据进行加工处理的中心 * 组成 * ALU(算术逻辑单元) * 进行算术/逻辑运算 * PSW(程序状态字寄存器) * PSW存放程序状态字,用于保存系统的运行状态 * PSW包括状态标志和控制标志 * 溢出标志OF、符号标志SF、零标志ZF、进位标志CF * 中断标志、陷阱标志 * ACC(累加寄存器) * 一个通用寄存器 * 暂时存放ALU运算的结果信息,可作为加法运算的输入端 * 通用寄存器组 * 如AX、BX、CX、DX、SP * 用于存放操作数和各种地址信息,所以其位数与机器字长相等 * SP是堆栈指针,用于指示栈顶的地址 * 暂存寄存器 * 暂存从主存读来的数据,对应用程序透明 * 移位器 * 对操作数或运算结果进行移位运算 * 计数器 * 控制乘除运算的操作步数 * 控制器 * 从主存中取出指令,分析指令并产生有关的操作控制信号 * 组成 * PC(程序计数器) * 用于指出下一条指令在主存中的存放地址(PC总是存放指令地址) * PC有自增功能 * PC的值会根据CPU在执行指令过程中自增或转移到程序某处(跳转指令) * PC的位数取决于存储器的容量 * IR(指令寄存器) * 用于保存当前正在执行的那条指令 * IR的位数取决于指令字长 * ID(指令译码器) * 仅对操作码字段进行译码,从而确定指令的操作功能 * MAR(存储器地址寄存器) * 存放要访问的主存单元的地址【存地址Memory address】 * MDR(存储器数据寄存器) * 存放向主存写入的信息或从主存读出的信息【存数据Memory data】 * n位CPU的n是指数据总线线数(即数据总线的位数 = 处理器的位数) * 时序系统 * 用于产生各种时序信号,都由统一时钟CLOCK分频得到 * 微操作信号发生器 * 根据IR的内容(指令),PSW的内容(状态信息)和时序信号 * 产生控制计算机系统所需的各种控制信号 * 结构有组合逻辑型和存储逻辑型 ## 控制器的功能和工作原理 ### 控制器结构和功能 * 结构 * ![](../../images/408/《计组》中央处理器/控制器结构.jpg) * 连接关系 * 运算器 * 运算器部件通过数据总线与内存储器、输入设备和输出设备传送数据 * 输入设备和输出设备 * 输入设备和输出设备通过接口电路与总线连接 * 内存储器、输入设备和输出设备 * 内存储器、输入设备和输出设备从地址总线接收地址信息 * 从控制总线得到控制信号,通过数据总线与其他部件传送数据 * 控制器部件 * 控制器部件从数据总线接受指令信息 * 从运算器部件接受指令转移地址,送出指令地址到地址总线 * 向系统中的部件提供它们运行所需要的控制信号 * 功能 * 从主存中取出一条命令,并指出下一条指令在主存中的位置 * 对指令进行编码或测试,产生相应的操作控制信号,以便启动规定的动作 * 指挥并控制CPU、主存、输入和输出设备之间的数据流动方向 ### 硬布线控制器和微程序控制器 * 硬布线控制器 * 基本原理 * 根据指令的要求、当前的时序及外部和内部的状态,按时间顺序发送一系列微操作控制信号 * 由复杂的组合逻辑门电路和一些触发器构成,又称组合逻辑控制器 * 控制单元图 * CPU输入信号来源 * 经指令编译器译码产生的 * 时序系统产生的机器周期信号和节拍信号 * 来自执行单元的反馈信号,即标志 * 微操作控制信号的形成主要与指令译码信号和时钟信号有关 * ![](../../images/408/《计组》中央处理器/带指令译码器和节拍输入的控制单元.jpg) * 时序系统及微操作 * 时钟周期:用时钟信号控制节拍发生器,可产生节拍,每个节拍的宽度正好对应一个时钟周期 * 机器周期:视为所有指令执行过程中的一个基准时间 * 指令周期:CPU从主存中取出并执行一条指令的时间称为指令周期 * 微操作命令分析:控制单元发出各种操作命令序列的功能 * CPU的控制方式 * 同步控制方式 * 系统有一个统一的时钟,所有的控制信号都来源于这个统一的时钟信号 * 通常以最长的微操作序列和最繁琐的微操作作为标准 * 采用完全统一的,具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令 * 优点:控制电路简单 * 缺点:运行速度慢 * 异步控制方式 * 不存在基准时标信号,各部件按照自身固有速度工作,通过应答方式进行联络 * 优点:运行速度快 * 缺点:控制电路较为复杂 * 联合控制方式 * 介于同步和异步之间 * 大部分采用同步控制,小部分采用异步控制 * 设计步骤 * 列出微操作命令的操作时间表 * 进行微操作信号综合 * 画出微操作命令的逻辑图 * 应用场合 * RISC * 常考点 * 微操作控制信号的形成与指令译码信号和时钟信号有关 * 微处理器与微程序控制器没有必然联系,微处理器时相对于一些大型处理器而言的 * 微机的CPU都是微处理器 * 各种微的关系 * 每条机器指令编成一个微程序 * 每个微程序包含若干微指令 * 每条微指令对应一个或几个微操作命令 * 机器指令$\rightarrow$微程序$\rightarrow$微指令$\rightarrow$微操作命令 * 微程序控制器 * 基本原理 * 采用存储逻辑实现,即把微操作信号代码化 * 基本思想 * 将每条机器指令编写成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作指令 * 机器指令$\rightarrow$微程序$\rightarrow$微指令$\rightarrow$微操作命令 * 这些微程序可以存到一个控制存储器中,用遻用户程序机器指令的方法来寻址每个微程序中的微指令 * 基本概念 * 微命令与微操作 * 微操作时计算机中最基本、不可再分解的操作;微命令执行的操作叫做微操作 * 微命令是控制部件向执行部件发出的各种控制命令;构成控制序列的最小单位 * 微指令和微周期 * 微指令是若干微命令的集合 * 微地址存放微指令的控制存储器的单元地址 * 微周期指的是从控制存储器中读取一条微指令并执行相应的微操作所需的时间 * 微指令的两个组成部分 * 微操作码字段 * 微地址码字段 * 主存储器与控制存储器 * 主存用于存放程序和数据,在CPU外部,用RAM实现 * CM用于存放微程序,在CPU内部,用ROM实现 * 程序与微程序 * 程序是指令的有序集合,用于完成特定的功能 * 微程序是微指令的有序集合,一条指令的功能由一段微程序实现 * 微程序和机器指令 * 一般来说,一条机器指令对应一个微程序 * 寄存器分类 * 地址寄存器 * 存放主存的读写地址 * 微地址寄存器 * 存放控制存储器的读写微指令地址 * 指令寄存器 * 存放从主存中读出的指令 * 微指令寄存器 * 存放从控制存储器中读出的微指令 * 基本组成 * 控制存储器 * 核心部件,用于存放各指令对应的微程序,控制存储器可用ROM构成 * 微指令寄存器 * 存放从CM中取出的微指令,位数与微指令字长相等 * 微地址形成部件 * 用于产生初始微地址和后继微地址,以保证微指令的连续执行 * 微地址寄存器 * 接收微地址形成部件送来的微地址,为在CM中读取微指令做准备 * ![](../../images/408/《计组》中央处理器/微程序控制器结构.jpg) * 工作过程 * 执行取微指令公共操作 * 由机器指令的操作码字段通过微地址形成部件产生该及其指令所对应的微程序的入口地址,并送入CMAR * 从CM中逐条取出对应的微指令并执行 * 执行完对应于一条机器指令的一个微程序后,又回到取指令微程序的入口地址,继续第一步 * 编码方式/控制方式 * 目的 * 保证速度的情况下尽量缩短指令字长 * 直接编码方式 * 无需进行译码,微指令的微命令字段中的每一位都代表一个微命令 * 优点 * 简单 * 直观 * 执行速度快 * 操作并行性号 * 缺点 * 微指令字长过长,n个微指令就要求微指令的操作字段由n位,造成控制存储器容量极大 * 字段直接编码法 * 把微命令字段分成若干小字段,将互斥性微命令组合在同一字段中 * 把相容性微命令组合在不同字段中,每个字段独立编码 * 每种编码都代表一个微命令且各字段编码含义单独定义,与其他字段无关 * 优点 * 可以缩短微指令字长 * 缺点 * 要通过译码电路之后再发出微命令,速度慢 * 分段原则 * 互斥性微命令组合在同一字段中,把相容性微命令组合在不同字段中 * 每个小段中包含的信息位不能太多,否则将增加译码电路的复杂性和译码时间 * 一般每个小段还要留出一个状态,表示本字段不发出任何微命令 * 字段间接编码法 * 一个字段的某些微命令需要由另一字段中的某些微命令解释 * 由于不是靠字段直接译码发出的微命令,因此称为字段间接编码 * 优点 * 可进一步缩短微指令字长 * 缺点 * 削弱微指令的并行能力 * 地址形成方式 * 后继微地址的形成类型 * 直接由微指令的下地址字段指出,格式中设置一个下地址 * 根据机器指令的操作码形成,机器指令取至IR后,微指令的地址由操作码经微地址形成部件形成 * 增量计数法(微地址连续)根据各种标志决定微指令分支转移的地址 * 通过测试网络形成,由硬件直接产生微程序入口地址 * 微指令的格式 * 水平型微指令 * 并行操作能力强,效率高,灵活性强 * 执行一条指令的时间短 * 微指令字位数较多,微程序较短 * 用户难以掌握 * 垂直型微指令 * 基本与水平型指令相反 * 混合型微指令 * 设计步骤 * 写出对应机器指令的微操作命令及节拍安排 * 确定微指令格式 * 编写微指令码点 * 动态微程序设计和毫微程序设计 * 动态微程序设计 * 能根据用户的要求改变微程序 * 需要可写控制寄存器的支持,可采用EPROM * 毫微程序设计 * 硬件不由微程序直接控制,而是通过存放在第二级控制存储器中的毫微程序来解释的 * 这个第二级控制存储器就成为了毫微存储器,直接控制硬件的就是毫微微指令 ## 指令的执行过程 ### 指令周期的概述 * 指令周期 * CPU从主存中取出并执行一条指令的时间 * 四种机器周期 * 取指周期、间址周期、执行周期、中断周期 * 对应四种标志触发器 * FE、IND、EX、INT * 指令 * CPU区分指令和数据的依据是指令周期的不同阶段 * 不同长度的指令,取指操作可能不同;指令长度相同的情况下,指令的取值操作是相同的 * 指令总是根据PC从主存中读出(无条件转移指令或中断返回指令也是如此) * 取值 * 取值操作是控制器固有的功能,不需要操作码的控制 * 取值操作是自动进行的,控制器不需要相应的指令 * 取值周期简单来说是取值,即从主存中取出指令字 * 字长 * 为了硬件设计方便,指令字长一般取存储字长的整数倍 * 如果指令字长 = 存储字长的2倍,则取一条指令需要访存2次,取值周期是机器周期的2倍(指令字长与机器字长无关系) * 中断 * CPU在每条指令执行结束前都要发中断查询信号 * CPU响应中断的时间是一条指令执行结束后 * 周期 * 指令周期 * CPU从主存中取出并执行一条指令的时间,一个指令周期由多个机器周期组成 * CPU周期/机器周期 * 一个机器周期包含若干时钟周期 * 时钟周期/节拍/T周期 * 计算机工作的最小时间周期,是CPU操作的基本单位;一个时钟周期内控制信号不发生改变 * 存取周期 * 连续启动两次独立的读/写操作所需要的最短时间 * 周期的关系 * 机器周期通常由存取周期决定 * 执行各条指令的机器周期数可变,各机器周期数可变 * 机器周期是指令执行中每步操作所需要的时间 * 每个机器周期内的节拍数可以不等,因此长度可变 * 各种指令的功能不同,所以指令执行时所需的机器周期数可变 * 采用DMA方式传递数据,每传送一个数据就要占用存取周期 * 其他 * 不采用Cache说明每次取指令只要访问内存一次 * 不采用指令预取技术表明每个指令周期都需要取指令 ### 不同指令的指令周期举例 * 无条件转移指令JMP X * 指令周期 = 取值周期 + 执行周期 * PC被修改两次 = 取值周期结束PC自动加1 + 执行周期PC值修改为要调转到的地址 * 间接寻址的指令 * 指令周期 = 取址周期 + 间址周期 + 执行周期 * 为了取操作数,需要先访问一次主存,取出有效地址$\rightarrow$ * 然后访问主存,取出操作数$\rightarrow$间址周期 * 间址周期结束时,CPU中MDR中的内容是操作数的有效地址EA * CPU采用中断方式实现主机与IO设备信息交换且有中断请求 * 指令周期 = 取值周期 + 间址周期 + 执行周期 +中断周期 * CPU在每条指令执行结束前,都要发中断查询信号 * 若有中断请求,则CPU进入中断响应阶段$\rightarrow$中断周期 * 中断周期进栈操作是将SP-1,计算机的堆栈都是向低地址增加,所有进栈操作减一而不是加一 ### 指令周期的数据流 * 数据流:根据指令要求一次访问的数据序列 * 指令执行不同阶段,访问的数据序列不同 * 不同的指令,数据流页不同 * 取值周期 * 根据PC中的内容从主存中取出指令代码并放在IR中 * 数据流向 * PC中存放的是指令的地址,根据此地址从内存单元中取出的指令,并放在指令寄存器IR中,取指同时PC+1 * PC$\rightarrow$MAR$\rightarrow$地址总线$\rightarrow$主存 * CU发出读指令$\rightarrow$控制总线$\rightarrow$主存 * 主存$\rightarrow$数据总线MDR$\rightarrow$IR(存放指令) * CU发出控制信号$\rightarrow$PC内容加1 * 流程图 * ![](../../images/408/《计组》中央处理器/取指周期的数据流.jpg) * 间址周期 * 取操作数的有效地址 * 数据流向 * 以一次间址为例,将指令中的地址码送到MAR并送至地址总线,此后CU向存储器发读命令,以获取有效地址并存至MDR * Ad(IR)(或MDR)$\rightarrow$MAR$\rightarrow$地址总线$\rightarrow$主存 * CU发出读命令$\rightarrow$控制总线$\rightarrow$内存 * 主存$\rightarrow$数据总线$\rightarrow$MDR(存放有限地址) * Ad(IR)表示取出IR中存放点饿指令字的地址字段 * 流程图 * ![](../../images/408/《计组》中央处理器/一次间址周期的数据流.png) * 执行周期 * 取操作数,并根据IR中的指令字的操作码通过ALU操作产生执行结果 * 无统一的数据流向 * 中断周期 * 处理中断请求 * 数据流向 * 假设程序断电存入堆栈中,并用SP指示栈顶地址,而且进栈操作是先修改栈顶指针,后存入数据;出栈操作是先删除数据,后修改栈顶指针,即正常出入栈次序 * CU控制将SP减1$\rightarrow$MAR$\rightarrow$地址总线$\rightarrow$主存 * CU发出写命令$\rightarrow$控制总线$\rightarrow$主存 * PC$\rightarrow$MDR$\rightarrow$数据总线$\rightarrow$主存(程序断电存入主存) * CU(中断服务程序的入口)$\rightarrow$PC * 流程图 * ![](../../images/408/《计组》中央处理器/中断周期的数据流.jpg) ### 指令的执行方案 * 单指令周期 * 特点 * 串行,相同执行时间 * 定义 * 每条指令都在固定的时钟周期内完成,指令之间串行执行 * 指令周期取决于执行时间最长的指令的执行时间 * 多指令周期 * 特点 * 串行,不同执行时间 * 定义 * 指令之间串行执行 * 可以选用不同个数的时钟周期来完成不同指令的执行过程 * 指令需要几个周期就为其分配几个周期 * 流水线方案 * 特点 * 并行 * 定义 * 力争在每个时间脉冲周期完成一条指令的执行过程(理想情况) * 尽量让多条指令同时运行,但各自处在不同的执行步骤中 ## 数据通路的功能和基本结构 ### 数据通路概述 * 定义 * 数据在功能部件之间传送的路径,包括数据通路上流经的部件 * 描述了信息从什么地方开始,中间经过哪些寄存器或多路开关,最后传送到哪个寄存器 * 功能 * 实现CPU内部的运算器与寄存器及寄存器之间的数据交换 * 易混淆知识 * 数据通路是由控制部件控制的,控制部件根据每条指令功能的不同生成对数据通路的控制信号 * 单总线数据通路将所有寄存器的输入输出都连接在一条公共通路上,一个时钟内只允许一次操作,无法完成指令的所有操作 * CPU的读/写控制信号线决定了是从存储器读还是向存储器写 * 内部总线是指统一部件之间的线,系统总线是同一台计算机系统各部件之间的线 ### 数据通路的基本结构 * CPU内部单总线方式 * 定义 * 将所有寄存器的输入端与输出端都连接到一条公共通路上 * 特点 * 结构比较简单,数据传输存在较多的冲突现象,性能较低 * CPU内部三/多总线方式 * 定义 * 将所有寄存器的输入端与输出端都连接到多条公共通路上 * 特点 * 相较单总线结构,效率提高 * 专用数据通路方式 * 定义 * 根据指令执行过程中的数据和地址的流动方向安排连接线路 * 特点 * 避免使用共享的总线,性能较好,但硬件总量大 * 各个方式对比 * 单总线和多总线 * 结构简单 * 实现容易 * 性能较低 * 存在较多冲突现象 * 专用数据通路 * 结构复杂 * 硬件量大 * 不易实现 * 性能高 * 基本不存在数据冲突 * 示例图 * ![](../../images/408/《计组》中央处理器/CPU内部总线的数据通路和控制信号.jpg) * in表示该部件的允许输入控制信号,OUT表示该部件的允许输出控制信号 * ALU只能有一个输入端与总线相连,另一个输入端要通过暂存器与总线相连 ### 数据传输举例 ![](../../images/408/《计组》中央处理器/CPU内部总线的数据通路和控制信号.jpg) * 寄存器间的数据传输 * 寄存器之间的数据传送可以通过CPU内部总线完成 * 以PC寄存器为例,把PC内容送至MAR,实现传送操作的流程的控制信号为 * PC$\rightarrow$BUS * PCout有效,PC内容送总线 * BUS$\rightarrow$MAR * MARin有效,总线内容送MAR * 主存与CPU之间的数据传输 * 也要借助CPU内部总线完成 * 以CPU从主存读取指令为例,实现传送操作的流程的控制信号为 * PC$\rightarrow$BUS$\rightarrow$MAR * PCout和MARin有效,现行指令地址$\rightarrow$MAR * 1$\rightarrow$R * CU发读命令 * MEN(MAR)$\rightarrow$MDR * MDRin有效 * MDR$\rightarrow$BUS$\rightarrow$IR * MDRout有效,现行指令$\rightarrow$IR * 执行算术或逻辑运算 * 加法运算为例 * Ad(IR)$\rightarrow$BUS$\rightarrow$MAR * MDRout和MARin有效 * 1$\rightarrow$R * CU发出读命令 * MEN$\rightarrow$数据线$\rightarrow$MDR * 操作数从存储器$\rightarrow$数据线$\rightarrow$MDR * MDR$\rightarrow$BUS$\rightarrow$Y * MDRout和Yin有效,有效数$\rightarrow$Y * (ACC)+(Y)$\rightarrow$Z * ACCout和ALUin有效,CU向ALU发加命令,结果$\rightarrow$Z * Z$\rightarrow$ACC * Zout和ACCin有效,结果$\rightarrow$ACC ## 异常和中断控制 * 异常 * 由CPU内部产生的意外时间 * CPU执行一条命令时,CPU在器内部检测到的同步事件 * 故障和自陷为异常 * 终止异常和外中断 * 分类 * 故障:在引起故障的指令启动周,执行结束前被检测到的异常事件 * 举例 * 指令译码时,出现非法操作码 * 取数据时,发生缺段或缺页 * 除数为零 * 地址越界 * 自陷 * 也称陷阱或陷入,预先安排的异常时间 * 举例 * x86机器中,用于程序调试的断电设置和单步跟踪功能 * 系统调用指令 * 系统自陷指令 * 终止 * 若在执行指令的过程中发生了使计算机无法继续执行的硬件故障,程序无法继续执行,只能终止 * 举例 * 控制器出错 * 存储器校验错 * 调出中断服务程序来重启系统 * 执行时间 * 每个指令周期末尾,CPU都会检查是否有外中断信号需要处理 * 不同点 * 缺页或溢出等异常事件由特定指令在执行过程中产生的 * 异常的检测由CPU自身完成,不必通过外部的某个信号通知CPU * 中断 * 由来自CPU外部的设备发出的中断请求(输入输出常用) * 典型的由外部设备触发的、与当前正在执行的指令无关的异步时间 * 外部IO设备通过特定的中断请求信号线向CPU提出中断请求 * CPU每执行完一条指令就检查中断请求信号线,若检测到中断请求,则进入中断响应期 * 外部中断都是一条指令执行完成后才被检测并处理的 * 可屏蔽中断 * 通过可屏蔽中断请求线INTR向CPU发出的中断请求 * CPU可以通过在中断控制器中设置相应的屏蔽字来屏蔽或不屏蔽它,被屏蔽的中断信号将不被送到CPU * 不可屏蔽中断 * 通过不可屏蔽中断请求线NMI向CPU发出的中断请求 * 通常为非常紧急的硬件故障,如电源掉电等 * 举例 * Cache缺失 * IO中断:键盘输入;打印机缺纸 * 时钟中断 * IO中断请求 * 执行时间 * CPU在执行指令时会检查是否有异常发生 * 不同点 * 中断不与任何指令相关联,也不阻止任何指令的完成 ### 异常和中断响应过程 * 响应过程不可被打断,整个中断处理过程是软硬件协同实现 * 单中断处理执行流程:保护线程$\rightarrow$中断事件处理$\rightarrow$恢复现场$\rightarrow$开中断$\rightarrow$中断返回 * 事件中断 * 在保存断点和程序状态期间,不能被新的中断打断 * 通常通过设置中断允许(IF)触发器来实现 * 保存断点和程序状态 * 为了能在异常和中断处理后正确返回到被中断的程序中继续运行 * 必须将程序的断点(返回地址)送到栈或特定寄存器中 * 通常保存在栈中,这是为了支持异常或中断的嵌套 * 识别异常和中断并转到相应的处理程序中 * 识别有两种方式 * 软件识别:异常常用 * 硬件识别:中断采用 ## 多处理机的基本概念 ### 常考点 * SISD/SIMD/MIMD的区分 * 控制部件的多少决定是SI还是MI,处理数据单元的多少决定是SD还是MD * 多处理机 * 常规的多处理属于MIMD * 真正的并行执行 * 在多核处理机中,必须采用多线程执行,使每个核在同一时刻都有线程在执行 * 时间并行 * 流水线技术 * 空间并行 * 硬件资源的重复,空间并行导致SIMD和MIMD的产生 * 超程序计数 * 一个CPU中提供两套线程处理单元,让单个处理器实现线程级并行 * 在CPU内部仅复制必要的线程资源来让两个线程同时并行 * 共享CPU的高速缓存和功能部件 * 能并行执行两个线程,模拟实体双核心 * 含有超程序技术的CPU需要芯片组和应用软件的支持才能发挥技术优势 * 当两个线程同时需要某个共享资源使,一个线程必须挂起等待 * 双核技术 * 双核是指将两个CPU核心集成到一个封装中 * 核心又叫内核,是CPU的重要组成部分 * 主板上有两个CPU属于多处理机 * 多核CPU的核心通常是对称的 * 多核CPU的核心公用一组内存,数据共享 * 各个核可以有自己的Cache也可以共享Cache * 只有支持多线程的并行处理程序才可以同时在多个核心上运行 * 多任务系统/多道程序系统,可以运行在单核CPU上,宏观上并行,微观上串行 ### SISD,SIMD,MIMD的基本概念 * 基于指令流的数量和数据流的数量,将计算机体系结构分为SISD,SIMD,MISD和MIMD * 单指令流单数据流结构(SISD) * 串行计算机结构 * 通常只包含一个处理器和一个存储器 * 有些使用流水线的方式,所以有时会设置多个功能部分,并采用多模块交叉方式组织存储器 * 单指令流多数据流结构(SIMD) * 一个指令流同时对多个数据流进行处理,称为数据级并行技术 * 由一个指令控制部件,多个处理单元组成 * 每个处理单元虽然执行的都是同一条指令,但每个单元都有自己的地址寄存器,就有了不同的数据地址 * 一个顺序应用程序被编译之后,可能按照SISD组织并运行于串行硬件上,也可能按SIMD组织并运行于并行硬件上 * for循环效率高,但switch或case时效率低 * 向量处理器也是SIMD的变体,是一种实现了直接操作一堆数组指令集的CPU * 多指令流单数据流结构(MISD) * 同时执行多条指令,处理多个不同的数据 * 实际上不存在这样的计算机 * 多指令流多数据流结构(MIMD) * 同时执行多条指令,处理多个不同的数据 * 多计算机系统 * 每个计算机节点都具有各自的私有存储器,并具有独立的主存地址空间 * 不能通过存取指令来访问不同节点的私有存储器 * 通过消息传递来进行数据传送,也称消息传递MIMD * 多处理器系统 * 共享存储多处理器(SMP)的简称 * 具有共享的单一地址空间,通过访存指令来访问系统中的所有存储器,也成共享存储MIMD * 联系和区别 * SIMD和MIMD是两种并行计算模式 * SIMD是一种数据级并行模式 * MIMD是一种并行程度更高的线程级并行或线程级以上并行计算模式 * 硬件多线程 * 引入目的 * 减少开销 * 必须为每个线程提供单独的通用寄存器组,单独的程序计数器等 * 线程的激活只需要激活选中的寄存器,从而省略了与存储器数据交换的环节,节省了开销 * 分类 * 细粒度多线程 * 多个线程之间轮流交叉执行指令,多个线程之间的指令是互不相关的 * 可以乱序并行执行 * 处理器能在每个时钟周期切换线程 * 粗粒度多线程 * 仅在一个线程出现较大开销的阻塞时,才切换线程,如Cache缺失 * 当流水线阻塞时,必须清除被阻塞的流水线 * 新线程的指令开始执行前需要重载流水线,开销较上一种较大 * 同时多线程(SMT)又超线程技术(HT) * 在一个CPU中提供两套线程处理单元,让单个处理器实现线程级并行 * 超线程的性能并不等于两CPU的性能 * 多核处理器 * 将多个处理单元集成到单个CPU中,每个处理单元称为一个核 * 每个核可以有自己的Cache,也可以共享一个Cache * 所有核一般都是对称的,并且共享主存,因此多核属于共享存储的对称多处理器 * 在多核计算机系统中,若要充分发挥硬件的性能,必须采用多线程执行,使每个核在同一时刻都有线程在执行,真正的并行执行 * 共享内存多处理器 * 具有共享的单一物理地址空间的多处理器 * 处理器通过存储器中的共享变量相互通信,所有处理器都能通过存取指令访存任何存储器的位置 * 即使这些系统共享同一物理地址空间,依旧可以在自己的虚拟地址空间中单独地运行程序 * 单一地址空间的多处理分类 * 统一存储访问(UMA)多处理器 * 根据处理器与共享存储器之间的连接方式再次分类 * 基于总线处理器 * 基于交叉开官网网络处理器 * 基于多级交换网络连接处理器 * 每个处理器对所有存储单元的访问时间都是大致相同的 * 非统一存储访问(NUMA)多处理器 * 处理器中不带高速缓存时,称为NC-NUMA * 处理器中带一致性高速缓存时,称为CC-NUMA ## 指令流水线 * 常考知识点 * 流水CPU是一种非常经济而实用的时间并行技术 * m段流水线的CPU吞吐能力 = m个并行部件的CPU吞吐能力 * 数据通路由控制部件控制,所以包含生成控制信号的控制部件 * 指令流水线的每个流水段时间单位为时钟周期 * 理想情况下,执行一条指令所需的时钟周期数CPI = 1 的有:单周期CPU和基本流水线CPU * 3种相关导致指令流水线阻塞 * 结构相关/资源相关 * 数据相关 * 控制相关 * 流水线时间计算 * 设一条指令有3条流水段,每段平均用时为t,度为1,单流水线处理机执行12条指令的时间 = 3t+(12-1)t = 一条指令所需时间+(指令条数-1)* 时间最长的指令的一段 * 设一条指令有3条流水段,每段平均时间为t,度为4,单流水线处理机执行20条指令的时间 = $3t+\frac{20-4}{4}t$,度为4说明是超标量流水线处理机,一次可以发生4条指令 * 流水线吞吐量计算 * 吞吐量 = $\frac{指令条数}{流水线执行时间}$ * ![](../../images/408/《计组》中央处理器/流水线吞吐量计算.jpg) ### 流水线的基本概念 * 如何提高处理机并行性 * 时间上的并行技术 * 将一个任务拆分成几个不同的子阶段 * 每个阶段在不同的功能部件上并行执行,即流水线技术 * 空间上的并行技术 * 在一个处理机内设置多个执行相同任务的功能部件 * 让这些功能部件并行工作,这样的处理机称为超标量处理机 * 指令流水线 * 将指令执行过程的各阶段视为相应的流水段,则指令的执行过程就构成了一条指令流水 * 指令流水线举例 * 假设一条指令的执行有5条流水段 * 取指(IF):从IR或Cache中取指令 * 译码/读寄存器(ID):操作控制器对指令进行译码,同时从寄存器堆中取操作数 * 执行/计算地址(EX):执行运算操作或计算地址 * 访存(MEN):对存储器进行读写操作 * 写回(WB):将指令执行结果写回寄存器堆 * 设用时最长的流水段用时X秒(如200ns),总执行时间为Y秒(如700ns),系统有N条指令,度为1 * 单处理机用时为Y$\times$N,流水线处理机用时为Y+(N-1)$\times$ X * 不能缩短单条指令的执行时间,但对于整个程序来说,执行效率得到大幅提升 * 指令集应有特点 * 指令长度应尽量一致,有利于简化取指和指令译码操作 * 指令格式尽量规整,尽量保证源寄存器的位置相同,有利于在指令未知时就可取存寄存器操作数 * 采用Load/Store指令,把Load/Store指令的地址计算和运算指令的执行步骤规整到同一周期中,有利于减少操作步骤 * 数据和指令在存储器中对齐存放,有利于减少访存次数,使所需数据在一个流水段内就可以从存储器中找到 * 流水线的表示方法 * 采用时空图描述流水线的执行情况 * ![](../../images/408/《计组》中央处理器/一个5段流水线数据通路.jpg) ### 流水线的性能指标 * 流水线的吞吐率 * 吞吐量 = $\frac{指令条数}{流水线执行时间}$ * 单位时间内完成的指令数 * 考点 * m段流水线的CPU吞吐能力 = m个并行部件的CPU吞吐能力 * m段流水线在第m个时钟周期后,每个时钟周期都可完成一条指令 * m个并行部件在m个时钟周期后能完成全部的m条指令,等价于平均每个时钟周期完成一条指令 * 流水线的加速比 * $加速比 = \frac{不使用流水线的所用时间}{使用流水线所用的时间}$ ### 流水线的分类 * 超标量流水线技术 * ![](../../images/408/《计组》中央处理器/超标量水线技术.jpg) * 特点 * 一个时钟周期内一条流水线可执行一条以上的指令 * 不影响流水线功能段的处理时间 * 通过内置多条流水线来同时执行多个处理机,实际上时以空间换时间 * 需配置多个控制部件、功能部件、寄存器端口、总线和指令译码电路 * 动态流水线的连接方式是可变的 * 超长指令字技术 * 静态多发射技术 * 特点 * 由编译程序挖掘指令集中可以并行的指令,然后组合成一个具有多个操作码的超长指令字 * 需要配置多个处理部件,对Cache容量要求大 * 静态流水线上下段连接方式固定 * 超流水线技术 * 提高主频来提高流水线性能 * ![](../../images/408/《计组》中央处理器/超流水线技术.jpg) * 特点 * 流水线划分的段数越多,流水寄存器的开销越大 ### 流水线的基本实现 * 流水线的数据通路 * 数据通路:数据在功能部件之间传送的路径 * 包括数据通路上流经的部件(如PC,ALU,通用寄存器,状态寄存器,异常和中断处理逻辑) * 数据通路由控制部件控制,控制部件根据每条指令功能的不同生成对数据通路的控制信号 * 数据通路不包含生成控制信号的控制部件 * ![](../../images/408/《计组》中央处理器/一个5段流水线数据通路.jpg) * 流水线的控制信号 * ![](../../images/408/《计组》中央处理器/控制信号分类.jpg) * 流水线寄存器保存的信息 * 后续流水段要用到的所有数据信息 * 包括PC+4、指令、立即数、目的寄存器、ALU运算结果、标志信息等 * 前面阶段在数据通路中执行的结果 * 后面传递过来的后面各流水线要用到的所有控制信号 * 流水线的执行过程 * 取指(IF):从IR或Cache中取指令 * 译码/读寄存器(ID):操作控制器对指令进行译码,同时从寄存器堆中取操作数 * 执行/计算地址(EX):执行运算操作或计算地址 * 访存(MEN):对存储器进行读写操作 * 写回(WB):将指令执行结果写回寄存器堆 ### 流水线的冒险与处理 * 结构相关 * 特征 * 竞争统一资源 * 解决办法 * 暂停时钟周期 * 使用分离结构的Cache * 数据相关 * 特征 * 下一条指令会用到当前指令计算出的结果 * 解决办法 * 使用硬件阻塞和软件插入“NOP”指令 * 使用数据旁路技术 * 对指令进行编译优化 * 控制相关 * 特征 * 改变指令执行顺序时,PC变化,造成断流 * 解决办法 * 静态预测 * 动态预测 * 分支指令中加入若干空操作 * 通过编译器调整指令执行顺序可以解决部分控制相关 * 结构冒险 * 多条指令在同一时刻争用同一资源而形成的冲突 * 解决办法 * 前一指令访存时,使后一条指令(及后续指令)暂停一个时钟周期 * 单独设置数据 存储器和指令存储器,使取数和取指令操作各自在不同的存储器中进行(分离结构的Cache) * 数据冒险 * 下一条指令会用到当前指令计算出的结果 * 此时这两条指令发生数据冲突 * 解决办法 * 把遇到数据相关的指令及其后续指令都攒一至几个时钟周期直到数据相关问题消失后继续执行,可分为硬件阻塞和软件插入NOP指令两种方法 * 数据旁路技术:直接将执行结果送到其他指令需要的地方,使流水线不发生停顿,因此不会引起流水线阻塞 * 通过编译器对数据相关指令编译优化的方法,调整指令顺序来解决数据相关 * 流水线按序流动,不会出现WAR、WAW;只可能出现RAW * 写后读相关WAR * 当前指令将数据写入寄存器后 * 下一条指令才能从该寄存器读取数据 * 读后写相关RAW * 当前指令读出数据后 * 下一条指令才能写入寄存器 * 写后写相关WAW * 当前指令写入寄存器后 * 下一条指令才能写入寄存器 * 控制冒险 * 指令通常是顺序执行的 * 但在遇到改变指令执行顺序的情况就会改变PC值 * 会造成断流,从而引起控制冒险 * 解决方法 * 对转移指令进行分支预测,尽早生成转移目标地址 * 静态预测 * 总是预测条件不满足,即继续执行分支指令的后续指令 * 动态预测 * 根据程序执行的历史情况,进行动态调整,有较高的预测准确率 * 预取转移成功和不成功两个控制流方向上的目标指令 * 加快和提前形成条件码 * 提高转移方向的猜准率