Files
final-exam/计算机系统结构/复习文档/计算机系统结构基础与定量原理.md

198 lines
7.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags:
- 计算机系统结构
- 复习
- 定量原理
create time: 2026-06-15 10:00
---
# 计算机系统结构基础与定量原理
## 概述
本文档覆盖计算机系统结构课程的基石内容:系统结构的定义与层次、Flynn 分类法、四大定量原理(Amdahl 定律、CPU 性能公式、以经常性事件为重点、程序局部性原理)。这些概念是后续学习流水线、Cache、指令系统等专题的理论基础。
> [!tip] 考试重点
> Amdahl 定律的计算题几乎每年必考,需熟练掌握公式推导和应用。Flynn 分类、系统结构定义常以选择题出现。
## 正文
### 一、计算机系统结构的定义
Amdahl 提出的经典定义:**计算机系统结构是机器语言程序员所见到的计算机属性**,即指令集架构(ISA)层面。
| 层次 | 程序员类型 | 所见属性 |
|:----:|:----------:|----------|
| 应用语言 | 应用程序员 | 应用语言虚拟机 |
| 高级语言 | 高级语言程序员 | 高级语言虚拟机 |
| **系统结构** | **机器语言程序员** | **指令集架构 ISA** |
| 组成 | 逻辑设计员 | 数据通路、控制、存储接口 |
| 实现 | 硬件工程师 | 电路、芯片、工艺 |
> [!question] 为什么系统结构的定义以"机器语言程序员"为基准?
> 因为 ISA 是软件和硬件的分界面。机器语言程序员直接与指令集打交道,而 ISA 之上的软件可以在不同硬件实现上运行,ISA 之下的硬件变化不影响软件兼容性。
### 二、Flynn 分类法
按照**指令流**和**数据流**的多倍性进行分类:
| 类型 | 指令流 | 数据流 | 典型代表 |
|:----:|:------:|:------:|----------|
| **SISD** | 单 | 单 | 传统单处理器 |
| **SIMD** | 单 | 多 | 向量处理器、GPU |
| **MISD** | 多 | 单 | **理论分类,无实际计算机** |
| **MIMD** | 多 | 多 | 多处理器、集群 |
> [!note] MISD 为何不存在?
> MISD 要求同一个数据被多条不同指令同时处理,这在冯·诺依曼架构下没有实际应用场景。某些容错系统(如航天计算机)被部分学者归为 MISD,但学界主流观点认为 MISD 仅为理论分类。
### 三、四大定量原理
#### 3.1 以经常性事件为重点
**核心思想**:对经常发生的情况赋予优先的处理权和资源使用权,从而获得更大的总体改善。
> [!example] 实例
> CPU 中加法操作远多于除法操作,因此将加法器设计得尽可能快,比优化除法器更能提升整体性能。
#### 3.2 Amdahl 定律
$$S = \frac{1}{(1-f) + \frac{f}{n}}$$
| 符号 | 含义 |
|:----:|------|
| $S$ | 系统加速比 |
| $f$ | 被改进部分在原系统中所占时间比例 |
| $n$ | 被改进部分的性能提升倍数 |
**关键结论**:
- 当 $n \to \infty$ 时,$S_{max} = \frac{1}{1-f}$,加速比有上限
- 系统性能受限于**最慢的部件**(瓶颈)
> [!question] 某功能占系统时间 20%,提升 15 倍,加速比是多少?
> $S = \frac{1}{0.8 + 0.2/15} = \frac{1}{0.8133} \approx 1.23$。即使将该功能提升到无限快,加速比上限也只有 $1/0.8 = 1.25$。
> [!example] 综合例题:多部件同时改进
>
> **题目**:某系统由三个部件组成,执行时间占比及改进方案如下:
>
> | 部件 | 原始时间占比 | 改进后加速倍数 |
> |:----:|:----------:|:-------------:|
> | A | 40% | 3 倍 |
> | B | 35% | 2 倍 |
> | C | 25% | 不改进 |
>
> 求系统总加速比。
>
> **解题步骤**:
>
> **第一步**:确定各部件改进后的时间比例
>
> 改进后,各部件在总时间中的占比变为:
>
> $$T_{new} = (1-f_A-f_B-f_C) + \frac{f_A}{n_A} + \frac{f_B}{n_B} + \frac{f_C}{n_C}$$
>
> **第二步**:代入数值
>
> $$T_{new} = 0 + \frac{0.40}{3} + \frac{0.35}{2} + \frac{0.25}{1} = 0.1333 + 0.175 + 0.25 = 0.5583$$
>
> **第三步**:计算加速比
>
> $$S = \frac{1}{T_{new}} = \frac{1}{0.5583} \approx 1.79$$
>
> **第四步**:分析——如果只改进部件 A(占比最大),加速比为 $1/(0.6+0.4/3) = 1.67$;如果只改进部件 B,加速比为 $1/(0.65+0.35/2) = 1.24$。同时改进 A 和 B 才达到 1.79,说明**改进占比大且加速倍数高的部件收益最大**。
#### 3.3 CPU 性能公式
$$CPU 时间 = IC \times CPI \times \tau$$
| 符号 | 含义 | 单位 |
|:----:|------|------|
| $IC$ | 指令条数(Instruction Count) | 条 |
| $CPI$ | 每条指令平均时钟周期数 | 周期/条 |
| $\tau$ | 时钟周期时间 | 秒/周期 |
**派生指标**:
- $MIPS = \frac{f}{CPI \times 10^6}$($f$ 为主频,单位 Hz)
- $MIPS = \frac{IC}{T \times 10^6}$($T$ 为执行时间,单位 秒)
> [!warning] MIPS 的局限性
> 不同指令集的 MIPS 不可直接比较。RISC 机器 MIPS 通常高于 CISC,但不代表性能更优——RISC 需要更多指令完成同样任务。
> [!example] 例题:两种方案的 CPI 与执行时间对比
>
> **题目**:同一程序在两种处理器上运行,时钟频率均为 2 GHz,相关参数如下:
>
> | 参数 | 方案 X | 方案 Y |
> |:----:|:------:|:------:|
> | 指令条数 IC | 50 亿条 | 10 亿条 |
> | 平均 CPI | 1.2 | 5.0 |
>
> 哪个方案更快?快多少?
>
> **解**:
>
> **方案 X**:
>
> $$T_X = IC \times CPI \times \tau = 5 \times 10^9 \times 1.2 \times \frac{1}{2 \times 10^9} = 3.0 \text{ 秒}$$
>
> **方案 Y**:
>
> $$T_Y = 1 \times 10^9 \times 5.0 \times \frac{1}{2 \times 10^9} = 2.5 \text{ 秒}$$
>
> 方案 Y 更快,加速比为 $T_X / T_Y = 3.0 / 2.5 = 1.2$ 倍。
>
> **启示**:虽然方案 X 的 CPI 只有 1.2(远低于方案 Y 的 5.0),但方案 Y 的指令条数只有方案 X 的 1/5。这说明**不能只看 CPI 或 IC 单一指标,必须综合考虑三者的乘积**。这也解释了为什么 CISC(IC 少但 CPI 高)和 RISC(IC 多但 CPI 低)可以达到相当的性能水平。
#### 3.4 程序局部性原理
程序在执行时所访问的地址空间分布不是随机的,而是**相对地聚集**。
- **时间局部性**:最近被访问的地址很可能再次被访问(如循环变量)
- **空间局部性**:与当前访问地址相邻的地址很可能被访问(如数组遍历)
> [!tip] 局部性原理的应用
> Cache、虚拟内存、预取技术都建立在局部性原理之上。理解局部性是理解整个存储层次设计的关键。
```mermaid
graph LR
A["Time Locality"] --> B["Loop Variables"]
A --> C["Stack Access"]
D["Space Locality"] --> E["Array Traversal"]
D --> F["Sequential Code"]
B --> G["Cache Design"]
E --> G
```
### 四、性能评价指标汇总
| 指标 | 公式 | 适用场景 |
|------|------|----------|
| 执行时间 | $T = IC \times CPI \times \tau$ | 通用 |
| MIPS | $f / (CPI \times 10^6)$ | 同一 ISA 比较 |
| MFLOPS | 浮点操作数 / $(T \times 10^6)$ | 科学计算 |
| 加速比 | $T_{old} / T_{new}$ | 优化前后对比 |
> [!tip] CPU 性能公式的三因素关系
> CPU 执行时间由三个因素共同决定,优化任何一个因素都能缩短执行时间,但效果取决于瓶颈所在:
```mermaid
graph TD
T["CPU Time"] --> IC["IC, Instruction Count"]
T --> CPI["CPI, Cycles Per Instruction"]
T --> tau["tau, Clock Period"]
IC --> C["Compiler"]
IC --> ISA["ISA Design"]
CPI --> Pipe["Pipeline"]
CPI --> Cache["Cache Hit Rate"]
tau --> Tech["Process Technology"]
tau --> Logic["Logic Design"]
```
## 关联笔记
- [[计算机系统结构/复习文档/流水线技术]]
- [[计算机系统结构/复习文档/存储系统与Cache]]
- [[计算机系统结构/index|试题册索引]]