考研学习
解题方法计算机组成原理

计算机组成原理第 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 立即响应。

错误。

一般要:

  1. 当前允许中断;
  2. 请求未屏蔽;
  3. 优先级满足;
  4. 通常等当前指令结束。

因此:

(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 R1

WAW

两条都写:

I1: write R1
I2: write R1

基本按序五段流水线中:

通常不会造成实际错误,因为读写阶段和完成次序固定。

但在:

  • 乱序执行
  • 多发射
  • 不同执行延迟

中就会变重要。


五十四、判断数据相关的万能表格法

例如:

I1 add R1,R2,R3
I2 load R4,0(R1)
I3 add R5,R4,R6

写成:

指令读写
I1R2,R3R1
I2R1R4
I3R4,R6R5

于是立即得到:

以后看到流水线相关题:

第一件事不是画流水线,而是写 R/W 集合。


五十五、【2016 408 真题】RAW 判断

题目有:

I1 add R1,R2,R3
I2 add R5,R2,R4
I3 add R4,R5,R3
I4 add R5,R2,R6

I2:

I3:

因此:

网站答案 B。(Any Docs)


五十六、转发 Forwarding

不用等待:

才使用结果。

可以直接:

或者:


ALU-ALU 相关

I1 add R1,R2,R3
I2 sub R4,R1,R5

I1 的结果:

I2:

因此:

通常无需停顿。


五十七、Load-Use——流水线最重要陷阱

例如:

I1: load R1,0(R2)
I2: add  R3,R1,R4

I1 的数据什么时候得到?

I2 什么时候需要?

在典型相邻流水排布中,时间对不上。

所以:


【2024 408 真题】

题目就考:

“所有数据冒险都可以通过转发解决。”

答案:

典型反例正是:

(Any Docs)

这是非常重要的 2024 命题信号。


五十八、转发题最强方法:判断“产生时间”和“需要时间”

不要背:

add 后不阻塞,load 后阻塞。

真正算法:

第一步问生产者:

第二步问消费者:

如果:

并存在旁路:

否则:

这个方法可以处理所有变式。


五十九、没有转发时怎么画?

关键:

假设:

I1 LOAD R1,[a]
I2 LOAD R2,[b]
I3 ADD  R1,R2

I3 必须读:

如果没有转发,并且题目明确:

寄存器同一周期不能同时读写

那么 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/rd
  • imm
  • 符号扩展
  • 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 章最重要的计算型和综合型题目基本就建立起完整框架了。

On this page

一、先建立整个第 5 章的框架二、5.1 CPU 的功能与基本结构1. CPU 中有哪些重要寄存器?题型 1:程序员可见寄存器【2010 408 真题】【2021 408 真题】一句话判断法三、PC、IR、寄存器位数计算【2016 408 真题】通用公式四、组合逻辑元件和时序逻辑元件【2023 408 真题】一个高频陷阱五、5.2 指令执行过程六、指令周期、机器周期、时钟周期【2019 408 真题】七、空操作 NOP 真的“什么都不做”吗?【2011 408 真题】八、看到一条指令,怎么判断用到哪些硬件?【2019 408 真题】九、这种题的万能方法:翻译成微操作十、5.3 数据通路——本章第一大重点十一、单周期、多周期、流水线先彻底区分1. 单周期 CPU2. 多周期 CPU3. 流水线 CPU十二、单周期 CPU 高频判断题【2016 408 真题】十三、单周期关键路径计算这类题永远用这个方法十四、单总线数据通路为什么需要暂存寄存器?十五、【2015 408 数据通路综合题】——非常值得掌握第 1 问:程序员可见寄存器第 2 问:控制信号需要多少位?万能公式十六、三态门为什么重要?十七、为什么 PC 有时加 1,有时加 2,有时加 4?十八、数据通路大题核心:怎么写微操作和控制信号?第一步:先忽略硬件画面,拆语义第二步:给每一步补控制信号十九、【2009 408 数据通路大题】二十、数据通路题最重要的约束:不能违反硬件结构二十一、读写寄存器:译码器和 MUX 怎么判断?【2022 408 综合题】写读二十二、Y 和 Z 为什么经常同时出现?二十三、取指需要几个周期?二十四、【2024 408 数据通路大题】——当前极值得研究第 1 类问法:寄存器个数第 2 类:为什么 shamt 是 5 位?二十五、OF 和 CF 必须彻底区分1. CF2. OF加法溢出减法溢出二十六、5.4 控制器——第二个计算型知识点二十七、硬布线 vs 微程序【2009 408 真题】对照表二十八、微程序体系的四层概念二十九、微程序入口地址从哪里来?三十、微指令编码位数——408 高频计算【2012 408 真题】三十一、为什么必须是 ?三十二、微地址字段宽度【2014 408 真题】三十三、主存 MM 和控制存储器 CS【2017 408 真题】三十四、5.5 异常与中断——选择题高频区三十五、最重要判断标准【2009 408 真题】【2020 408 真题】三十六、Fault、Trap、AbortFaultTrapAbort【2015 408 真题】三十七、自陷 Trap【2020 408 真题】三十八、中断响应和中断处理必须分开中断响应中断处理三十九、断点 vs 现场断点现场四十、【2012 408 真题】中断隐指令四十一、【2010 408 真题】中断服务程序内部顺序四十二、NMI 和可屏蔽中断NMI可屏蔽中断【2020 408 真题】四十三、响应优先级和处理优先级响应优先级处理优先级四十四、异常在哪个流水阶段发现?四十五、Cache miss 是异常吗?四十六、5.6 指令流水线——本章最重要部分四十七、流水线最基础公式四十八、流水线时钟周期怎么算?【2009 408 真题】【2018 408 真题】四十九、吞吐率五十、【2013 408 真题】吞吐率五十一、流水线三大冒险五十二、结构冒险五十三、数据相关的三类RAW:Read After WriteWARWAW五十四、判断数据相关的万能表格法五十五、【2016 408 真题】RAW 判断五十六、转发 ForwardingALU-ALU 相关五十七、Load-Use——流水线最重要陷阱【2024 408 真题】五十八、转发题最强方法:判断“产生时间”和“需要时间”五十九、没有转发时怎么画?六十、【2012 408 流水线大题】六十一、这里有一个非常重要的规律六十二、控制冒险六十三、什么指令可能产生控制冒险?六十四、【2023 408 真题】转发 + 控制冒险六十五、流水线题究竟怎样做最快?Step 1:列每条指令读写寄存器Step 2:找 RAWStep 3:判断有没有转发Step 4:特别检查 Load-UseStep 5:检查 branch/jumpStep 6:最后才画周期表六十六、流水线 CPI六十七、单周期、多周期、流水线的 CPI 区分【2020 408 真题】单周期多周期基本标量流水线超标量六十八、超标量是什么?【2017 408 真题】六十九、流水线为什么特别喜欢 RISC?【2011 408 真题】七十、【2014 408 综合题】——流水线 + 指令系统七十一、这道题怎样从左移判断数组元素大小?七十二、分支相对寻址七十三、数据相关 ≠ 一定产生阻塞七十四、冒险题最容易掉进去的几个坑坑 1坑 2坑 3坑 4七十五、5.7 多处理器基础七十六、Flynn 分类SIMDMIMD七十七、【2022 408 真题】并行处理七十八、硬件多线程三种基本思想粗粒度多线程细粒度多线程SMT七十九、本章真题考频与复习优先级八十、建议真正背下来的“第 5 章公式表”1. 编码 种状态2. 字段直接编码的互斥类3. 控制存储器地址位数4. 流水线时钟周期5. 理想 段流水执行 条指令6. 吞吐率7. CPI八十一、建议形成的“数据通路大题固定算法”八十二、流水线大题固定算法八十三、近年来真题值得关注的新型综合考法预测 1:RISC-V 指令编码 + 数据通路 + 控制信号预测 2:数据通路 + 异常预测 3:流水线 + Cache/TLB预测 4:流水线性能定量计算八十四、最后给出压缩成“考场脑图”第 5 章最应该真正做会的几道题