跳转至

计算机体系结构

体系结构连接软件语义与硬件实现。ISA 规定软件能够依赖的指令、寄存器、异常和内存行为;微架构决定这些指令如何被预测、拆分、调度、执行和提交;内存系统让多个核心与设备看到一组受约束的共享状态。

阅读路径

软件可见边界

  • ISA 与微架构:为什么相同二进制可在结构完全不同的处理器上运行。
  • 虚拟内存与 TLB:地址翻译、保护和缓存怎样进入每一次内存访问。
  • 原子与内存模型:语言、编译器、ISA 与一致性协议如何共同建立跨线程顺序。

单核执行

  • 流水线、ILP 与分支预测:前端、乱序窗口、执行端口和提交如何隐藏延迟。
  • CPU:核心、SMT、NUMA、向量与性能计数器如何组合成现代通用处理器。

多核与加速器

  • 缓存与一致性:私有缓存怎样在共享内存抽象下协作,以及 false sharing 为何昂贵。
  • GPU 与 SIMT:吞吐导向处理器怎样用大量线程、分层存储和掩码执行隐藏延迟。

契约不能混用

问题 应查看的层次 典型误区
某指令是否合法、异常如何报告 ISA/ABI 用某款 CPU 行为代表整个 ISA
两条指令能否同时执行 微架构 从反汇编直接推断周期数
两个核心何时看见写入 语言内存模型 + ISA + 一致性 把 cache coherence 当顺序一致性
虚拟地址为何突然变慢 TLB + 页表 + OS 把 TLB miss 当 page fault
GPU kernel 为何低效 SIMT + 存储层次 + 调度 只看 occupancy 或峰值 FLOPS

从程序到提交

一次典型 CPU 指令经历:

\[ \text{fetch}\rightarrow\text{decode}\rightarrow\text{rename}\rightarrow \text{dispatch}\rightarrow\text{issue}\rightarrow\text{execute}\rightarrow \text{retire} \]

中间可以乱序,架构状态通常按程序顺序提交。load/store 还会经过地址生成、TLB、缓存、一致性和内存控制器。异常必须表现为精确状态,错误预测和未提交的推测结果需要被丢弃。

GPU 走不同路线:它以大量可运行 warp 覆盖延迟,让共同控制流下的多线程成批发射。两者并不是“复杂 CPU 对简单 GPU”的固定二分;现代 GPU 同样有复杂调度、缓存与地址翻译,现代 CPU 也具有宽 SIMD 和大量并行执行资源。

量化视角

硬件峰值只是上界。计算吞吐受执行单元、指令混合和依赖限制;内存吞吐受请求并行度、地址模式与通道限制;实际性能大致受较紧的上界约束:

\[ P\le\min(P_\mathrm{compute}, I\cdot B_\mathrm{memory}) \]

\(I\) 是运算强度,表示每搬运一个字节完成多少运算。这个 roofline 视角适合先判断“优化计算还是数据移动”,再进入具体微架构。

Reference