计算机组成原理第 5 章:中央处理器
408 计算机组成原理「中央处理器」复习:核心知识点、真题题型、通用解法与易错点。
Last updated on
本章依据本站的 408 真题 → 408 模拟题 重新梳理。本站把第 5 章分为:
CPU 功能与结构 → 指令执行过程 → 数据通路 → 控制器 → 异常和中断 → 指令流水线 → 多处理器基本概念。从真题分布来看,真正需要投入大量时间的是 数据通路 + 流水线;异常/中断也是选择题高频区;微程序控制器则特别喜欢考“位数计算”。(docs.any1.tech)
一、先建立整个第 5 章的框架
CPU 可以先粗略理解成两大部分:
数据通路负责:
控制器负责:
然后为了提升指令执行效率,又引入:
程序执行过程中发生特殊事件,则涉及:
所以这一章最核心的问题其实只有三个:
数据从哪里来 → 经过哪里 → 在什么时刻由谁控制。
掌握这句话,大量数据通路题、微操作题、流水线题就统一起来了。
二、5.1 CPU 的功能与基本结构
这一节知识点不算难,但特别喜欢出选择题,也经常嵌入数据通路大题第一问。
1. CPU 中有哪些重要寄存器?
必须把下面几类分清。
| 寄存器 | 作用 | 程序员通常是否可见 |
|---|---|---|
| PC | 下一条/相关指令地址 | 可见 |
| IR | 当前指令 | 不可见 |
| MAR | 主存地址 | 不可见 |
| MDR | 与主存交换的数据 | 不可见 |
| GPR | 通用寄存器 | 可见 |
| PSW/FR | 条件码、状态 | 可见 |
| 基址寄存器 | 地址形成 | 可见 |
| 微指令寄存器 | 当前微指令 | 不可见 |
这里的“可见”不要理解成“汇编代码里一定直接写 PC”。
真正判断标准:
程序员能否通过机器指令直接或间接影响/使用其内容。
题型 1:程序员可见寄存器
【2010 408 真题】
题目问:
MAR、PC、MDR、IR 中,哪一个是汇编程序员可见寄存器?
答案是:
MAR、MDR、IR 都属于 CPU 内部完成取指和访存过程的工作寄存器。(Any Docs)
【2021 408 真题】
题目给出:
- IR
- 微指令寄存器
- 基址寄存器
- 状态/标志寄存器
问哪些属于汇编程序员可见寄存器。
答案:
因为条件转移会依据状态位,而基址寻址会实际使用基址寄存器。(Any Docs)
一句话判断法
看到寄存器就问:
它是“ISA 提供给程序”的,还是“CPU 自己干活用”的?
ISA 层面的:
CPU 内部实现细节:
三、PC、IR、寄存器位数计算
这是很小但非常容易送分的一类。
【2016 408 真题】
题目核心:
主存空间 4 GB,字长 32 位,按字节编址;指令也是 32 位,并且按字边界对齐,问 PC 和 IR 至少多少位。
主存:
每条指令:
因为指令按 4 B 边界对齐,因此一共有:
个可能的指令位置。
所以 PC 若只保存合法指令位置编号:
IR 必须完整容纳指令:
所以:
网站真题答案也是这一结果。(Any Docs)
通用公式
若地址空间为:
每条定长指令为:
并保证对齐,那么合法指令位置数:
于是 PC 最少:
位。
但务必注意:
如果题目规定 PC 保存真实字节地址,则通常仍要按完整地址位数分析。
所以一定看题目对 PC 的定义。
四、组合逻辑元件和时序逻辑元件
这是近年来很重要的概念。
组合逻辑:
例如:
- ALU
- MUX
- 加法器
- 译码器
- 三态门
时序逻辑:
例如:
- PC
- IR
- MAR
- MDR
- GPR
- 流水寄存器
【2023 408 真题】
题目给:
- ALU
- PC
- GPR
- MUX
问哪些属于操作元件。
答案:
因为 PC、GPR 都保存状态。(Any Docs)
一个高频陷阱
模拟题中出现过:
“ALU 是状态元件。”
错误。
寄存器才是:
网站模拟题专门考过这个辨析。(Any Docs)
五、5.2 指令执行过程
一条指令并不是“时钟一响就执行完”。
基本过程:
不同 CPU 可以组合或拆分这些阶段。
六、指令周期、机器周期、时钟周期
大体层次:
具体教材的“机器周期”定义可能存在差异,但 408 关键理解是:
一条指令通常需要若干时钟周期,而不是一个时钟脉冲一定完成一条指令。
【2019 408 真题】
题目问关于处理器时钟信号的说法,错误项认为:
每来一个时钟脉冲,处理器都开始执行一条新指令。
这是错误的。
普通多周期处理器明显不成立。
即使流水线:
也只是理想稳态下平均每周期完成一条指令,并不是“一条指令只执行一个周期”。(Any Docs)
七、空操作 NOP 真的“什么都不做”吗?
【2011 408 真题】
题目中一个错误说法是:
空操作指令执行时任何寄存器都不改变。
错误。
NOP 虽然不修改程序中的业务数据,但仍然需要取指。
例如:
同时:
所以:
这是一类经典概念陷阱。(Any Docs)
八、看到一条指令,怎么判断用到哪些硬件?
【2019 408 真题】
题目给指令功能:
两个源操作数分别使用:
- 寄存器直接
- 寄存器间接
问在“取数及执行”阶段使用哪些部件。
分析:
第一操作数:
需要:
第二操作数:
先读:
再访存,因此需要:
最后相加:
所以:
而题目限定的是“取数与执行”,因此不把译码器算进去。(Any Docs)
九、这种题的万能方法:翻译成微操作
例如:
不要直接“想硬件”。
拆:
于是自然知道需要:
之后数据通路大题也是完全相同的方法。
十、5.3 数据通路——本章第一大重点
这一节是第 5 章最值得重点训练的部分之一。
可以把数据通路理解成:
CPU 内部所有“数据可能走过的道路及道路上的部件”。
通常包含:
而控制器产生的控制信号通常不属于“数据通路本身”。
十一、单周期、多周期、流水线先彻底区分
1. 单周期 CPU
所有指令:
因此:
但是时钟周期必须照顾最慢指令。
例如:
- add 只需 5 ns
- branch 6 ns
- load 10 ns
则:
哪怕执行 add,也必须耗费 10 ns。
因此:
2. 多周期 CPU
一条指令拆成多个周期。
不同指令可以使用不同周期数。
例如:
优点:
功能部件可在不同周期复用。
3. 流水线 CPU
不同指令重叠执行:
与此同时:
可以已经开始 IF。
理想状态:
但这是“吞吐率意义”的 1,而不是一条指令延迟只有一个周期。
十二、单周期 CPU 高频判断题
【2016 408 真题】
题目问单周期处理器错误说法。
其中错误的是:
可以使用单总线数据通路实现真正的单周期处理器。
原因:
单周期要求一个周期内完成所有事情。
但单总线:
于是很多数据传送必须分时进行。
那就必然需要多个节拍。
所以:
另外:
而控制信号在这个周期内通常保持稳定。(Any Docs)
十三、单周期关键路径计算
网站模拟题有一道非常典型的题:
指令存储器 3 ns,寄存器堆读写各 1 ns,ALU 2 ns,数据存储器 3 ns,问单周期 CPU 最小时钟周期。(Any Docs)
最长通常是 load:
所以:
因此:
这类题永远用这个方法
不要把所有部件延迟全加起来。
找:
通常:
是经典单周期处理器的最长路径。
十四、单总线数据通路为什么需要暂存寄存器?
这是 408 超级高频。
假设计算:
只有一条内部总线。
不能同时:
又:
所以先:
然后:
因此:
十五、【2015 408 数据通路综合题】——非常值得掌握
题目给一台 16 位计算机的单总线 CPU,其中包含:
- PC
- MAR
- MDR
- IR
- T
- ALU
- SR 移位寄存器
- MUX
然后问程序员可见寄存器、控制字段位数、三态门、数据连线和为什么 MUX 一端输入常数 2。(Any Docs)
第 1 问:程序员可见寄存器
T 是内部暂存器。
第 2 问:控制信号需要多少位?
ALU 有 7 种功能:
因此:
SR 有 3 种功能:
因此:
万能公式
若需要编码:
种操作,则至少:
位。
十六、三态门为什么重要?
一条总线上可能连接:
但同一时刻只能一个输出端真正驱动总线。
否则:
同时输出,会发生电气冲突。
所以使用三态门:
- 0
- 1
- 高阻态
未选中的设备:
等价于“与总线断开”。
所以:
本质就是:
打开 R1 输出端三态门。
十七、为什么 PC 有时加 1,有时加 2,有时加 4?
千万别背:
正确规则:
例如题目中:
16 位指令:
按字节编址,于是:
这就是 2015 真题中 MUX 设置常数 2 的原因。(Any Docs)
32 位定长指令则常见:
十八、数据通路大题核心:怎么写微操作和控制信号?
这是必须掌握的算法。
假设:
第一步:先忽略硬件画面,拆语义
地址:
读存储器:
得到第二操作数:
运算:
结果送 MDR:
写主存:
第二步:给每一步补控制信号
例如:
控制信号:
读主存:
对应:
对应:
相加:
可能是:
具体名称以题图为准。
十九、【2009 408 数据通路大题】
网站中的 2009 真题给了一套部分数据通路,并给定:
其功能本质是:
要求写执行阶段每个时钟周期的微操作和有效控制信号。网站给出的正确序列可以概括为:
也就是:
这道题极其典型。(Any Docs)
二十、数据通路题最重要的约束:不能违反硬件结构
很多同学写:
但题目是单总线。
不允许。
例如写出:
但主存输出必须先经过 MDR。
也不允许。
所以做题时每一步都检查:
这条数据在图中真的有路吗?
二十一、读写寄存器:译码器和 MUX 怎么判断?
【2022 408 综合题】
题目问:
GPR 中写寄存器编号 应连接地址译码器还是多路选择器?
答案:
为什么?
写
要从很多寄存器中:
例如 4 位地址:
需要译成:
即某一个寄存器写使能有效。
所以:
读
很多寄存器都有输出,但只选一个:
所以记:
2022 真题还问了暂存器 Y、Z 的作用、取指控制序列以及控制部件输入来源。(Any Docs)
二十二、Y 和 Z 为什么经常同时出现?
单总线 ALU 常见:
然后:
ALU 结果:
下一周期:
所以:
Z 还有一个非常重要的作用:
防止 ALU 输出立即重新影响 ALU 输入,形成组合逻辑反馈。
2022 真题正面考过这个问题。(Any Docs)
二十三、取指需要几个周期?
例如 2022 真题给:
从发出主存读请求到数据送入 MDR 需要 5 个时钟周期。
则:
第一周期:
接下来主存读:
题目明确需要 5 周期。
最后:
再 1 周期。
因此:
网站真题答案也是 7 周期。(Any Docs)
二十四、【2024 408 数据通路大题】——当前极值得研究
这道 13 分题把多章知识结合起来,非常代表现在的命题风格。
题目给一台 32 位机器以及 add、slli、lw 指令格式,又给了部分 RISC-V 风格数据通路,要求:
- 判断寄存器个数
- 判断移位字段宽度
- 确定 MUX 控制
- 计算 ALU 结果
- 判断 OF、CF
- 判断立即数扩展
- 判断 ALU 控制
- 根据机器码识别指令
- 计算有效地址 (Any Docs)
这说明现在 CPU 大题已经明显走向:
跨章节综合。
第 1 类问法:寄存器个数
若:
都是 5 位:
个寄存器。
第 2 类:为什么 shamt 是 5 位?
32 位数有效左移位数:
共:
种。
于是:
二十五、OF 和 CF 必须彻底区分
这是 2024 大题的重要结合点。
1. CF
表示最高位的进位/借位信息,主要用于:
2. OF
表示补码意义下:
加法溢出
若:
补码有符号加法溢出的核心判断:
同号相加,结果异号。
逻辑式可写:
减法溢出
判断:
A 与 B 异号,结果与 A 异号。
例如:
2022 真题就要求写过这类逻辑表达式。(Any Docs)
二十六、5.4 控制器——第二个计算型知识点
控制器主要两种:
和:
二十七、硬布线 vs 微程序
【2009 408 真题】
问硬布线相对微程序的特点。
结论:
网站真题答案 D。(Any Docs)
对照表
| 硬布线 | 微程序 | |
|---|---|---|
| 控制信号产生 | 逻辑电路 | 微指令 |
| 速度 | 快 | 较慢 |
| 结构 | 较复杂 | 规整 |
| 修改 | 困难 | 容易 |
| 扩展 ISA | 困难 | 灵活 |
| 常见倾向 | RISC | 复杂控制/CISC |
模拟题也专门考过:
RISC 通常更适合硬布线,而不是因为“高级”就一定采用微程序。(Any Docs)
二十八、微程序体系的四层概念
这是最容易混的一块。
对应一个:
一个微程序:
一条微指令:
所以关系:
这个层次必须背熟。
二十九、微程序入口地址从哪里来?
模拟题直接问过:
某机器指令对应的执行微程序首地址由什么形成?
答案:
即:
而不是普通 PC。
(Any Docs)
三十、微指令编码位数——408 高频计算
【2012 408 真题】
题目:
33 个微命令分为 5 个互斥类:
采用字段直接编码。
注意一个字段除了表示对应微命令,还必须有:
所以一类有 个命令,需要:
位。
因此:
总共:
(Any Docs)
三十一、为什么必须是 ?
这属于特别容易丢分的地方。
假设某互斥类:
需要表示:
以及:
实际一共有:
种状态。
所以:
而不是:
虽然这里恰好也是 2,但其他数字就不一定。
三十二、微地址字段宽度
【2014 408 真题】
题目给:
- 32 条机器指令
- 公共取指微程序 2 条微指令
- 每条机器指令对应微程序平均 4 条
- 采用下地址字段法
控制存储器至少需要:
条微指令。
所以地址位数:
因为:
因此:
(Any Docs)
三十三、主存 MM 和控制存储器 CS
【2017 408 真题】
典型辨析:
不是:
按内容访问的是:
控制存储器:
经典实现通常使用 ROM。(Any Docs)
三十四、5.5 异常与中断——选择题高频区
首先必须区分:
与:
三十五、最重要判断标准
异常:
例如:
- 除零
- 溢出
- 缺页
- 非法指令
- 地址越界
- trap
外部中断:
例如:
- 键盘
- 网络到包
- 定时器
- I/O 设备
【2009 408 真题】
问哪一个属于外部中断。
键盘输入:
除零、下溢、缺页都是执行过程中产生的异常。(Any Docs)
【2020 408 真题】
题目给:
- 缺页
- 定时器到时
- 网络数据包到达
外部中断是:
缺页:
(Any Docs)
三十六、Fault、Trap、Abort
这是必背表。
| 类型 | 特点 | 返回位置 |
|---|---|---|
| Fault | 可恢复故障 | 通常重新执行当前指令 |
| Trap | 指令有意触发 | 下一条指令 |
| Abort | 严重错误 | 通常不可正常恢复 |
Fault
例如:
当执行:
发现页面不在内存。
OS 把页面调入内存以后:
Trap
典型:
- 系统调用
- 断点
- 单步调试
处理后:
Abort
机器发生严重不可恢复错误。
通常不能正常重新执行。
【2015 408 真题】
错误说法是:
所有内部异常处理后都会回到发生异常的指令继续执行。
显然不对。
只有 Fault 通常这样。
Trap 通常去下一条。
Abort 甚至不能正常恢复。(Any Docs)
三十七、自陷 Trap
【2020 408 真题】
Trap:
不是外部中断。
可以用于:
- 系统调用
- 调试断点
- 单步执行
处理完一般:
(Any Docs)
三十八、中断响应和中断处理必须分开
这是整个中断题最重要的区分之一。
中断响应
主要由:
完成。
典型动作:
这部分也叫:
注意:
它不是存储器中真正存在的一条普通机器指令。
中断处理
真正进入 ISR 后:
负责:
三十九、断点 vs 现场
特别容易混。
断点
指:
通常就是下一条应该执行的指令地址。
由:
自动保护。
现场
例如:
以及其他通用程序状态。
通常:
四十、【2012 408 真题】中断隐指令
题目问:
除保存断点外,中断隐指令还做什么?
正确:
和:
不会自动保存所有通用寄存器。
因此:
通常由软件负责。(Any Docs)
四十一、【2010 408 真题】中断服务程序内部顺序
题目强调:
“中断服务程序内”。
所以硬件已经完成了:
- 保存断点
- 关中断
服务程序中大体:
网站真题答案对应这一顺序。(Any Docs)
四十二、NMI 和可屏蔽中断
NMI
Non-Maskable Interrupt。
普通“关中断”不能禁止它。
优先级通常也很高。
可屏蔽中断
需要满足:
且:
CPU 才响应。
【2020 408 真题】
错误说法:
可屏蔽中断请求一旦有效,CPU 立即响应。
错误。
一般要:
- 当前允许中断;
- 请求未屏蔽;
- 优先级满足;
- 通常等当前指令结束。
因此:
(Any Docs)
四十三、响应优先级和处理优先级
这类题稍微难一些。
响应优先级
多个中断:
同时请求。
决定:
处理优先级
已经在处理中断 A。
此时 B 到达。
决定:
所以:
网站模拟题专门考过二者顺序可以不同。(Any Docs)
四十四、异常在哪个流水阶段发现?
这个非常值得掌握。
在典型五段流水:
非法操作码:
因为必须译码才能知道。
ALU 溢出:
数据地址异常:
通常:
具体按题目定义。
缺页:
既可能取指发生:
也可能数据访存:
所以模拟题里:
“缺页一定只在访存阶段检测”
是错误的。(Any Docs)
四十五、Cache miss 是异常吗?
这是非常经典的混淆。
Cache 控制器自己:
重新取块即可。
CPU 可能只是多等待几个周期。
但:
因为需要:
模拟题对此有明确区分。(Any Docs)
四十六、5.6 指令流水线——本章最重要部分
这一节几乎应该单独当一章学。
基本五段:
分别对应:
- IF:取指
- ID:译码、读寄存器
- EX:运算/地址计算
- MEM:访存
- WB:写回
四十七、流水线最基础公式
设:
如果每段 1 周期且完全无阻塞:
例如:
则:
个周期。
四十八、流水线时钟周期怎么算?
最重要公式:
其中:
【2009 408 真题】
各阶段:
忽略流水寄存器延迟。
因此:
(Any Docs)
【2018 408 真题】
功能段:
流水寄存器:
所以:
(Any Docs)
四十九、吞吐率
若 条指令共用时间:
则:
无阻塞流水线:
因此:
当:
则:
五十、【2013 408 真题】吞吐率
4 级流水线,1.03 GHz,执行 100 条指令。
周期:
时钟周期:
总时间:
吞吐率:
注意不是直接回答 1.03 GHz,因为只有 100 条,流水线有填充和排空开销。(Any Docs)
五十一、流水线三大冒险
必须背到形成条件。
五十二、结构冒险
两个阶段同时需要同一硬件资源。
例如 IF 正在:
同时 MEM 正在:
如果只有一个统一存储器:
解决:
- 指令 Cache / 数据 Cache 分离
- 增加功能部件
- 阻塞流水线
五十三、数据相关的三类
对两条指令:
有:
RAW:Read After Write
前一条写:
后一条读:
例如:
add R1,R2,R3
sub R4,R1,R5第二条必须使用第一条的新值。
这是:
也是基本五段按序流水线最重要的冒险。
WAR
前读后写:
I1: read R1
I2: write R1WAW
两条都写:
I1: write R1
I2: write R1基本按序五段流水线中:
通常不会造成实际错误,因为读写阶段和完成次序固定。
但在:
- 乱序执行
- 多发射
- 不同执行延迟
中就会变重要。
五十四、判断数据相关的万能表格法
例如:
I1 add R1,R2,R3
I2 load R4,0(R1)
I3 add R5,R4,R6写成:
| 指令 | 读 | 写 |
|---|---|---|
| I1 | R2,R3 | R1 |
| I2 | R1 | R4 |
| I3 | R4,R6 | R5 |
于是立即得到:
以后看到流水线相关题:
第一件事不是画流水线,而是写 R/W 集合。
五十五、【2016 408 真题】RAW 判断
题目有:
I1 add R1,R2,R3
I2 add R5,R2,R4
I3 add R4,R5,R3
I4 add R5,R2,R6I2:
I3:
因此:
网站答案 B。(Any Docs)
五十六、转发 Forwarding
不用等待:
才使用结果。
可以直接:
或者:
ALU-ALU 相关
I1 add R1,R2,R3
I2 sub R4,R1,R5I1 的结果:
I2:
因此:
通常无需停顿。
五十七、Load-Use——流水线最重要陷阱
例如:
I1: load R1,0(R2)
I2: add R3,R1,R4I1 的数据什么时候得到?
I2 什么时候需要?
在典型相邻流水排布中,时间对不上。
所以:
【2024 408 真题】
题目就考:
“所有数据冒险都可以通过转发解决。”
答案:
典型反例正是:
(Any Docs)
这是非常重要的 2024 命题信号。
五十八、转发题最强方法:判断“产生时间”和“需要时间”
不要背:
add 后不阻塞,load 后阻塞。
真正算法:
第一步问生产者:
第二步问消费者:
如果:
并存在旁路:
否则:
这个方法可以处理所有变式。
五十九、没有转发时怎么画?
关键:
假设:
I1 LOAD R1,[a]
I2 LOAD R2,[b]
I3 ADD R1,R2I3 必须读:
如果没有转发,并且题目明确:
寄存器同一周期不能同时读写
那么 I3 的 ID 必须晚于生产者 WB。
这是 2012 真题综合大题中的核心。(Any Docs)
六十、【2012 408 流水线大题】
网站题目给:
I1 LOAD R1,[a]
I2 LOAD R2,[b]
I3 ADD R1,R2
I4 STORE R2,[x]五段流水:
而且:
同时题目规定:
因此 I3 必须等:
把值写回后,才能正常进行 ID。
所以 I3 的 ID 发生阻塞。
一旦 I3 卡在 ID:
于是 I4 的 IF 也会停。
题目后来继续要求把:
翻译成指令序列并排流水表,网站给出的最短执行结果是:
(Any Docs)
六十一、这里有一个非常重要的规律
如果某条指令:
卡在 ID。
那么后面:
通常不能继续进入 ID。
因此:
不要误以为:
只有发生数据相关的那条指令停,后面的照常穿过去。
基本按序流水线不允许这样。
六十二、控制冒险
例如:
beq R1,R2,L1处理器取到 beq 时:
下一条究竟是:
还是:
尚未确定。
于是产生:
解决方案:
- 阻塞
- 分支预测
- 延迟槽
- 预测执行
- 错误路径冲刷
六十三、什么指令可能产生控制冒险?
最典型:
以及:
因为都可能改变:
模拟题中一段程序同时有 bne 和 j,两条都可能产生控制冒险。(Any Docs)
六十四、【2023 408 真题】转发 + 控制冒险
题目序列:
I1 add s2,s1,s0
I2 load s3,0(s2)
I3 beq t2,s1,L1
I4 addi t2,t2,20并且:
- 数据冒险采用转发
- 控制冒险采用硬件阻塞
先看 I1 → I2。
I1 的:
在 EX 后得到。
I2 计算 load 地址在自己的 EX 才需要。
因此:
I2 不阻塞。
但 I3 是:
会发生控制冒险。
所以 I3 以及之后受到分支影响的 I4 会阻塞。
网站答案:
(Any Docs)
六十五、流水线题究竟怎样做最快?
建议考试时严格执行下面顺序。
Step 1:列每条指令读写寄存器
例如:
Step 2:找 RAW
判断:
Step 3:判断有没有转发
无转发:
有转发:
继续看结果产生阶段。
Step 4:特别检查 Load-Use
看到:
load Rx,...
xxx ...,Rx,...立刻警觉:
Step 5:检查 branch/jump
判断控制冒险。
Step 6:最后才画周期表
这样错误率最低。
六十六、流水线 CPI
定义:
理想标量流水线:
实际:
即通常:
六十七、单周期、多周期、流水线的 CPI 区分
【2020 408 真题】
题目问理想情况下哪些 CPI 为 1。
单周期
多周期
一般:
基本标量流水线
稳态:
超标量
每周期完成多条:
因此真题答案是:
(Any Docs)
六十八、超标量是什么?
Superscalar 的核心不是:
把流水阶段切得更短。
而是:
例如双发射:
理论 CPI:
四发射:
【2017 408 真题】
正确描述包括:
- 一个周期可同时发射多条指令;
- 可结合动态调度提高指令级并行性。
但:
不一定缩短单个流水段延迟。
因此真题选择 II、III。(Any Docs)
六十九、流水线为什么特别喜欢 RISC?
【2011 408 真题】
真题问哪些特点有利于流水线:
- 指令格式规整、长度统一
- 指令/数据边界对齐
- Load/Store 体系
答案:
(Any Docs)
原因是:
固定长度:
规整格式:
Load/Store:
于是不同指令经过的阶段更加统一。
七十、【2014 408 综合题】——流水线 + 指令系统
网站中还有一道非常重要的综合题。
循环:
for(i=0;i<N;i++)
sum += A[i];翻译成:
sll R4,R2,2
add R4,R4,R3
load R5,0(R4)
add R1,R1,R5
addi R2,R2,1
bne R2,R6,loop题目同时问:
- 编址单位
- 数组元素大小
- 分支 offset
- PC 相对寻址
- 数据相关
- 控制冒险
- 跨循环相关 (Any Docs)
这就是很典型的:
综合题。
七十一、这道题怎样从左移判断数组元素大小?
代码:
因此:
即:
然后:
所以元素大小:
这类方法非常值得迁移。
如果:
那么:
七十二、分支相对寻址
2014 真题中 bne 偏移字段为:
作为 16 位补码:
目标地址:
也可以写:
因为:
偏移量以指令单位表示。(Any Docs)
七十三、数据相关 ≠ 一定产生阻塞
这一点特别重要。
例如:
存在 RAW。
但是有:
且数据及时产生。
那么:
所以三个概念必须分开:
是程序依赖关系。
是流水线时序造成的潜在问题。
是解决冒险的一种手段。
七十四、冒险题最容易掉进去的几个坑
坑 1
看到相同寄存器就说存在 RAW。
错误。
必须:
坑 2
两个都写同一个寄存器就说基本五段流水要阻塞。
不一定。
那通常是:
基本按序五段不一定造成实际冒险。
坑 3
有转发就认为一切问题解决。
错误。
是经典反例。
坑 4
分支指令只有“跳转成功”才产生控制冒险。
错误。
在结果确定之前:
所以无论最终 taken / not taken,硬件都需要处理这一不确定性。
七十五、5.7 多处理器基础
这一部分目前真题远少于流水线,但属于新大纲下需要掌握的基础概念。
七十六、Flynn 分类
按指令流和数据流:
| 类型 | 含义 |
|---|---|
| SISD | 单指令单数据 |
| SIMD | 单指令多数据 |
| MISD | 多指令单数据 |
| MIMD | 多指令多数据 |
SIMD
同一条指令:
典型:
- 向量处理器
- SIMD 指令
- GPU 中部分并行思想
MIMD
不同处理单元:
典型:
七十七、【2022 408 真题】并行处理
题目中正确关系包括:
而错误说法是:
硬件多线程只能用于多核处理器。
实际上一个核内部也可以支持多个硬件线程。
另外 SMP 中各处理器通常:
(Any Docs)
七十八、硬件多线程三种基本思想
这一块可以了解。
粗粒度多线程
某线程遇到较长阻塞:
细粒度多线程
每周期:
SMT
Simultaneous Multithreading。
同一周期:
Intel Hyper-Threading 属于典型 SMT 思路。
七十九、本章真题考频与复习优先级
结合本站目前整理的真题,可以把复习优先级大致定成:
| 内容 | 优先级 | 典型题型 |
|---|---|---|
| 数据通路 | ★★★★★ | 综合大题、控制信号 |
| 指令流水线 | ★★★★★ | 冒险、周期、CPI、转发 |
| 异常与中断 | ★★★★☆ | 高频选择 |
| 微程序控制器 | ★★★★☆ | 编码、位数计算 |
| CPU 寄存器与结构 | ★★★☆☆ | 选择、综合题小问 |
| 指令执行过程 | ★★★☆☆ | 概念 + 微操作 |
| 多处理器 | ★★☆☆☆ | 基础选择 |
尤其网站真题里,2009、2015、2022、2024 的数据通路综合题以及 2012、2014 等流水线综合题说明,这两类不是单纯记忆知识点,而是具有连续计算和推导要求。(Any Docs)
八十、建议真正背下来的“第 5 章公式表”
1. 编码 种状态
2. 字段直接编码的互斥类
一类有 个微命令:
3. 控制存储器地址位数
若共有 条微指令:
4. 流水线时钟周期
5. 理想 段流水执行 条指令
6. 吞吐率
7. CPI
近似:
八十一、建议形成的“数据通路大题固定算法”
遇到这种题:
给 CPU 图,给一条指令,要求写控制信号。
直接按:
↓
↓
↓
↓
↓
↓
这是做 2009、2015、2022 类题最稳的套路。
八十二、流水线大题固定算法
看到代码后:
↓
找:
↓
判断:
↓
如果有:
↓
判断消费者:
↓
特别检查:
↓
再检查:
↓
最后:
千万不要一上来就画表。
八十三、近年来真题值得关注的新型综合考法
结合本站里的 2022、2023、2024 题,尤其建议防下面几种组合。
预测 1:RISC-V 指令编码 + 数据通路 + 控制信号
2024 已经明显出现这种方向。(Any Docs)
可能给:
lw
sw
add
sub
beq
addi问:
rs1/rs2/rdimm- 符号扩展
- ALUSrc
- MemRead
- MemWrite
- RegWrite
- MemtoReg
- Branch
需要能从:
直接推出:
预测 2:数据通路 + 异常
例如给:
add
lw
非法指令问分别可能在哪阶段发现:
答案思路:
预测 3:流水线 + Cache/TLB
例如:
lw R1,0(R2)
add R3,R1,R4同时出现:
- load-use
- TLB miss
- Cache miss
- Page fault
要求区分:
和:
这非常适合 408 跨章节综合。
预测 4:流水线性能定量计算
例如:
- 20% load
- 其中 30% 发生 load-use
- 分支占 15%
- 分支错误预测率 10%
- 数据 stall 1 cycle
- 分支错误 penalty 3 cycle
那么:
这类题把所有流水线知识统一起来,很适合作为未来综合考法。
八十四、最后给出压缩成“考场脑图”
看到 CPU结构题:
看到 指令执行题:
看到 数据通路图:
看到 单周期:
看到 微程序:
互斥字段:
看到 异常/中断:
中断隐指令:
看到 流水线:
数据冒险:
转发:
看到:
load Rx,...
xxx ...,Rx,...立即想到:
看到 branch/jump:
看到 多核/向量:
第 5 章最应该真正做会的几道题
如果时间有限,建议至少反复吃透本站里的:
2009 数据通路大题:学会从指令语义拆微操作、写控制信号。(Any Docs)
2015 单总线数据通路大题:学会暂存器、MUX、三态门、ALU 控制以及 PC 增量。(Any Docs)
2022 数据通路综合题:学会 OF 逻辑、Y/Z、GPR 读写结构、取指控制序列。(Any Docs)
2024 数据通路 13 分题:学会现代 RISC-V 风格的“指令编码 + 数据表示 + 数据通路”综合分析。(Any Docs)
2012 流水线大题:彻底学会无转发条件下排流水表。(Any Docs)
2014 循环流水线综合题:学会相关、控制冒险、PC 相对寻址和跨循环分析。(Any Docs)
2023、2024 流水线选择题:彻底搞懂 forwarding 和 Load-Use,这是目前非常明确的命题重点。(Any Docs)
如果把上述几道题真正做到不看答案就能完整推导,第 5 章最重要的计算型和综合型题目基本就建立起完整框架了。