--- 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|试题册索引]]