127 lines
4.9 KiB
Markdown
127 lines
4.9 KiB
Markdown
|
|
---
|
|||
|
|
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$。
|
|||
|
|
|
|||
|
|
#### 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 需要更多指令完成同样任务。
|
|||
|
|
|
|||
|
|
#### 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}$ | 优化前后对比 |
|
|||
|
|
|
|||
|
|
## 关联笔记
|
|||
|
|
- [[计算机系统结构/复习文档/流水线技术]]
|
|||
|
|
- [[计算机系统结构/复习文档/存储系统与Cache]]
|
|||
|
|
- [[计算机系统结构/index|试题册索引]]
|