L7·10^12 – 10^13

体系结构

Computer Architecture / ISA

核心抽象ISA / 并行

定义程序员可见的指令集,在串行与并行之间寻找性能。

学习进度:
What

计算机体系结构(Computer Architecture)定义程序员可见的指令集架构(ISA, Instruction Set Architecture),是软硬件之间的接口。ISA 包括:指令格式、寻址模式、寄存器集合、内存模型。主要 ISA 家族包括:x86/x86-64(CISC,复杂指令集,用于 PC 和服务器)、ARM(RISC,精简指令集,用于移动设备和嵌入式)、RISC-V(开源 RISC,新兴架构)。并行技术包括:指令级并行(ILP,流水线、超标量、乱序执行)、数据级并行(SIMD,单指令多数据,如 SSE、AVX、NEON)、线程级并行(多核、超线程)。Amdahl 定律指出:程序的加速比受限于串行部分的比例。

Why

ISA 是软件编译器和硬件设计者之间的契约。统一的 ISA 使软件可以在不同厂商的硬件上运行(如 Windows 可以在 Intel 和 AMD 的 CPU 上运行)。RISC 架构通过简化指令集,使硬件设计更高效,功耗更低(ARM 在移动设备的优势)。并行技术是突破单核性能瓶颈的关键:单核频率提升受限于功耗和散热(功耗墙),多核和 SIMD 提供横向扩展能力。

How

程序员通过编译器生成的目标代码使用 ISA。高级语言通常跨平台,但性能关键代码可能需要针对特定 ISA 优化(如使用 SIMD 指令)。理解体系结构有助于理解:为什么 x86 程序不能直接在 ARM 上运行(ISA 不兼容);为什么向量化循环能提升性能(SIMD 一次处理多个数据);为什么多线程程序不能无限加速(Amdahl 定律)。交叉编译和虚拟机(如 QEMU)可以在不同 ISA 间转换。

Bottom-up:由下层如何构建

本层建立在以下层级之上:

Top-down:向上暴露什么接口

指令集架构SIMD多核

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 字节边界),未对齐访问会导致性能下降或异常