计算机组成原理

CPU Core · Cache/TLB · 流水线/SIMD · Cache一致性/内存模型 · DMA/PCIe/NUMA

当前模块
学习进度0 / 1
Module Switcher
计算机组成原理
内容模块

计算机组成原理

存储层次金字塔

层次典型容量延迟量级带宽谁管理
寄存器~KB(每 core 几十个)1 cycle编译器
L1 Cache(I/D 分离)32KB + 32KB / core~4 cycles>1TB/s硬件
L2 Cache256KB–2MB / core~12 cycles~500GB/s硬件
L3 Cache(LLC)数 MB–数百 MB / socket~40 cycles~100GB/s硬件,多 core 共享
本地 DRAM几十 GB–几 TB / socket~100ns(~300 cycles)~50–100GB/s(DDR5)OS(虚拟内存)
远端 NUMA DRAM其他 socket~200ns(1.5–2x)~30–50% 本地带宽OS + 硬件互联

关键规律

  • 越靠近 CPU:容量越小、延迟越低、带宽越高、成本/bit 越高
  • 延迟差 100x:L1(1ns)到 DRAM(~100ns),相当于从书桌到楼下超市取东西
  • 带宽差 20x:L1(>1TB/s)到 DRAM(~50GB/s)
  • NUMA 惩罚:跨 socket 访问延迟增加 50–100%,带宽下降 30–50%
Q: 为什么加了核数吞吐反而下降?

可能的原因(从硬件到系统):

  • Cache 污染:多线程共享 L3,工作集挤掉彼此的热数据
  • False sharing:独立变量落在同一 cache line(见 Cache/TLB 章节)
  • 内存带宽饱和:所有 core 同时打 DRAM,带宽成为瓶颈
  • NUMA 远端访问:线程被调度到远端 socket
  • 锁竞争 / 上下文切换:软件层面串行化
Q: 怎么判断程序是算力瓶颈还是访存瓶颈?

几个快速判断方法:

  • perf statIPC(instructions per cycle):高 IPC(>1)说明算力用满了;低 IPC(<0.5)通常是访存/分支等待
  • Cache miss rate:L1/L2/LLC miss 高 → 访存瓶颈
  • Roofline 模型:计算 Operational Intensity(FLOPs/Byte),看落在算力拐点左侧还是右侧(见性能预测 / Roofline 章节)
  • 缩数据实验:把工作集缩到 L3 以内,如果吞吐飙升 → 原先是 DRAM 带宽瓶颈