计算机的骨架(冯·诺依曼 vs 哈佛)、层次结构、性能指标(CPI/MIPS/Amdahl 定律)。
冯·诺依曼结构(存储程序式):指令与数据不加区分地存同一存储器,CPU 取指还是取数只取决于所处周期与地址。收益:程序可当数据处理、硬件极简(一条总线、一个存储器、一套译码)。
代价:取指与取数争抢同一条总线,一次只能干一件——即「冯·诺依曼瓶颈」,也是第 6 章结构冒险与 Cache 的根源。
哈佛结构:指令存储器与数据存储器物理分开,两条总线可同时取指取数;代价是硬件翻倍、不能自修改、程序分装两块存储器。
对比:现代 CPU 的 L1 Cache 普遍指令/数据分离(I-Cache/D-Cache),即在 Cache 层用哈佛;主存仍是统一冯·诺依曼。DSP、AVR、部分 Cortex-M 整体即哈佛——DSP 每周期要同时读两条操作数+一条指令。
| 维度 | 冯·诺依曼 | 哈佛 |
|---|---|---|
| 存储 | 指令数据同一存储器 | 指令/数据物理分开 |
| 总线 | 一条,取指取数争抢 | 两条,可并行 |
| 硬件 | 简单 | 翻倍 |
| 程序自修改 | 支持 | 不支持 |
| 典型 | x86、ARM 主存层 | DSP、MCU、L1 Cache |
计算机是严格分层的抽象栈,每层屏蔽下层细节:
第 6 层 应用/算法(用户程序)
第 5 层 高级语言(C / Java / Python)
第 4 层 汇编语言(助记符)
第 3 层 操作系统(进程、内存、文件、I/O)
第 2 层 ISA(指令集架构)——软硬件的分界线
第 1 层 微体系结构(数据通路、流水线、Cache)
第 0 层 数字逻辑(门、触发器)
ISA(指令集架构)是软硬件的「合同」:之上(编译器/OS)只认指令和寄存器,之下(微架构)随便改——同一 x86 ISA,8086 到 Zen 天翻地覆,40 年前的机器码仍能跑。(ISA 见第 4 章,微架构见第 5、6 章)
主频高 ≠ 快,唯一度量是 CPU 执行时间:
CPU 执行时间 = 指令数 × CPI × 时钟周期
= (指令数 × CPI) / 主频
MIPS = 主频/(CPI×10⁶),同时受 CPI 与主频影响,跨 ISA 比 MIPS 无意义(RISC 单条指令做得少、MIPS 天然偏高)。吞吐指标用 IPC(每周期指令数 = 1/CPI),只反映微架构。
注意:主频被**关键路径(critical path)**锁死——每级逻辑延迟有下限,时钟周期不能无限缩短。故 2000 年后主频停在 ~5GHz,转靠多核、流水线、IPC。
指令数 ← 编译器、ISA(第 4 章)
×
CPI ← 微架构:流水线(第 6 章)、Cache(第 7 章)
×
时钟周期 ← 工艺、关键路径(第 3 章 ALU 的加法器延迟)
优化一部分能带来多大整体收益:
加速比 S = 1 / ( (1 - f) + f / p )
对比:50% 代码加速 10 倍,整体只快 1.82 倍;5% 代码加速 100 倍只快 1.05 倍。故先找占比最大的瓶颈——profiler 先找热点。