体系结构
Computer Architecture / ISA
定义程序员可见的指令集,在串行与并行之间寻找性能。
计算机体系结构(Computer Architecture)定义程序员可见的指令集架构(ISA, Instruction Set Architecture),是软硬件之间的接口。ISA 包括:指令格式、寻址模式、寄存器集合、内存模型。主要 ISA 家族包括:x86/x86-64(CISC,复杂指令集,用于 PC 和服务器)、ARM(RISC,精简指令集,用于移动设备和嵌入式)、RISC-V(开源 RISC,新兴架构)。并行技术包括:指令级并行(ILP,流水线、超标量、乱序执行)、数据级并行(SIMD,单指令多数据,如 SSE、AVX、NEON)、线程级并行(多核、超线程)。Amdahl 定律指出:程序的加速比受限于串行部分的比例。
ISA 是软件编译器和硬件设计者之间的契约。统一的 ISA 使软件可以在不同厂商的硬件上运行(如 Windows 可以在 Intel 和 AMD 的 CPU 上运行)。RISC 架构通过简化指令集,使硬件设计更高效,功耗更低(ARM 在移动设备的优势)。并行技术是突破单核性能瓶颈的关键:单核频率提升受限于功耗和散热(功耗墙),多核和 SIMD 提供横向扩展能力。
程序员通过编译器生成的目标代码使用 ISA。高级语言通常跨平台,但性能关键代码可能需要针对特定 ISA 优化(如使用 SIMD 指令)。理解体系结构有助于理解:为什么 x86 程序不能直接在 ARM 上运行(ISA 不兼容);为什么向量化循环能提升性能(SIMD 一次处理多个数据);为什么多线程程序不能无限加速(Amdahl 定律)。交叉编译和虚拟机(如 QEMU)可以在不同 ISA 间转换。
Bottom-up:由下层如何构建
本层建立在以下层级之上:
Top-down:向上暴露什么接口
Programmer View:程序员视角
我能操作吗?
通过编译器生成的目标代码间接使用。可通过内联汇编(inline assembly)或 SIMD 库(如 Intel IPP、ARM NEON)直接操作特定指令。
成本模型
| 指标 | 量级 | 备注 |
|---|---|---|
| x86 指令长度 | 1-15 字节 | CISC,变长指令 |
| ARM 指令长度 | 4 字节(32-bit)/ 2 字节(Thumb) | RISC,定长指令 |
| SIMD 宽度 | 128-bit(SSE)/ 256-bit(AVX2)/ 512-bit(AVX-512) | 一次处理多个数据 |
| 多核数量 | 2-64 核(服务器) | 受 Amdahl 定律限制 |
常见陷阱
- !ISA 不兼容:x86 程序无法直接在 ARM 上运行,需要重新编译或使用模拟器(性能损失 2-10 倍)
- !Amdahl 定律:如果 10% 的代码是串行的,即使使用 1000 核,加速比也不超过 10 倍。并行化应尽量覆盖更多代码
- !SIMD 对齐:SIMD 指令要求数据在内存中对齐(如 16/32/64 字节边界),未对齐访问会导致性能下降或异常