Cache Coherence(Cache 一致性)

多核各自持有 Memory Hierarchy and Cache 副本时,P0 写入何时对 P1 可见?Coherence 协议保证同一地址上的 propagation + serialization(Goodman 1983)。跨地址顺序Memory Consistency Model + Memory Fence and Barrier 管辖。

问题定义

单核:写 L1 → 立即可见
多核:Core0 写 X → Core1 L1 仍持旧值 → 读 X 错误

Coherence 只追踪 Cache Line 粒度(主流 64B)——与 False Sharing 直接相关。

MESI 状态机

状态含义
M Modified本地独占,dirty
E Exclusive本地独占,clean(与 memory 一致)
S Shared多核共享 clean
I Invalid无效或无副本

关键转换

事件典型转换Bus 动作
I + PrRd(独占)EBusRd,无其他 hit
I + PrRd(共享)SBusRd,其他降为 S
I + PrWrMBusRdX + invalidate
E + local PrWrM无 bus 消息(E 的价值)
S + PrWrMBusUpgr,其他 → I
M + 远端 PrRdSwrite-back,共享读

E vs MSI:独占读-改-写循环中 E→M 静默升级,避免每次 BusUpgr——OLAP 单线程 update 场景 MESI 比 MSI 快 15–30%

协议族对比

协议状态特点代表
MSIM/S/I简单,invalidate 频繁早期 Pentium
MESI+E独占静默写x86、Apple Silicon
MOESI+O (Owned)dirty 可直接转读,少 write-backAMD Zen

MOESI 场景:Core0 持 M,Core1 读同一行——MESI 需 write-back memory(+~100ns);MOESI 中 Core0→O,Core1 从 O 取数。

Snooping vs Directory

Snooping:  L1 miss → 广播总线 → 所有 cache controller 监听
Directory: L1 miss → 查目录 → 仅通知当前 sharer/owner
核数SnoopingDirectory
≤8✓ 低延迟(ring bus)过重
~16✓ 仍可(Intel ring)可选
64+✗ 广播饱和✓ 必需(Xeon SP、EPYC)
256+✗✗✓✓

Directory 流量 O(sharers);Snooping O(cores)——64 核时 Directory 总流量约为 Snooping 的 5–10%。与 Memory Fence and Barrier 中 invalidate/NoC 路径、Linear and Ring Topology 有序 snoop 相关。

False Sharing

两线程写同一 64B line 内不同字段 → line 在核间 M↔I 反复抖动,单次抖动 ~30–50 ns,吞吐可降 3–5×

struct { int x; char pad[60]; int y; } stats;  // x/y 不同 line

Cache 替换算法无法缓解——由数据布局决定;与 Row Buffer 被动局部性(DRAM and Memory System)形成对比。

WSE:取消 Coherence

通用多核Cerebras WSE
地址空间全局共享无共享;PE 独占 48KB SRAM
协议MESI + Directory/Snoop;显式 NoC 消息
编程pthread 共享变量SpaDA Programming Language 数据流
扩展64 核 Directory 极限900K PE

900K PE × MESI metadata 粗估 ~170 GB 目录状态 + mesh 广播 → 硬件不可行(DSA Processor Design Tradeoffs)。

Hybrid Coherence(研究前沿):控制面小范围 coherence + 数据面消息传递——NPU 8 核 Snooping vs 64 核 Directory 的设计分界取决于目标核数。

相关页面

Citations

[1] arch-study-30d-day-18.md — H&P Ch.5.1–5.3(Day 18)