mcpField
M
memory-hierarchy-and-caches

memory-hierarchy-and-caches

github.com/mohitmishra786开发269334 次安装18 周前更新
代码仓库

关于 memory-hierarchy-and-caches

面向 Agent 的 CPU 内存层次与缓存原理指南,涵盖关联度、一致性、伪共享和预取。它将架构知识与性能测量、数据布局选择结合,用于分析性能和扩展性问题。

主要功能

  1. 01缓存层级与关联度
  2. 02缓存一致性与伪共享
  3. 03硬件及软件预取
  4. 04使用 perf 测量缓存未命中
  5. 05结构体布局与 NUMA 考量

适用场景

  1. 01诊断多核扩展性下降
  2. 02解读缓存未命中计数
  3. 03选择多核数据布局
  4. 04理解嵌入式 SoC 中 CPU 与 DMA 缓存行为

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill memory-hierarchy-and-caches

安装后在 Claude Code 中输入/memory-hierarchy-and-caches确认已加载。

详细介绍

内存层次结构与缓存

用途

讲解 CPU 内存层次结构:缓存级别、相联度、缓存行大小、一致性协议、伪共享和预取行为,从架构层面补充 skills/low-level-programming/cpu-cache-opt 中的优化实践。

适用场景

  • 解释填充为何能提升可扩展性
  • 选择适合多核的结构体布局
  • 解读缓存未命中计数器
  • 理解嵌入式 SoC 上的 DMA 与 CPU 缓存

工作流

1. 层次结构(典型桌面端/服务器)
Registers
├── L1d / L1i (per core, ~32 KiB, ~4 cycles)
├── L2 (per core, ~256 KiB – 1 MiB)
├── L3 (shared last-level, MiB – tens of MiB)
├── DRAM (hundreds of cycles)
└── Storage / NUMA remote (much slower)

嵌入式 MCU 可能只有紧耦合内存(没有 L2/L3)。

2. 缓存行与相联度
  • 缓存行大小:x86/ARM64 上通常为 64 字节(使用 getconf LEVEL1_DCACHE_LINESIZE 验证)
  • 组相联:缓存行映射到一个组,并在各路之间竞争
  • 冲突未命中:多个别名映射到同一组
3. 伪共享
/* Bad — two atomics on same cache line */
struct {
    atomic_int counter_a;
    atomic_int counter_b;
} stats;

/* Good — pad to cache line */
struct alignas(64) {
    atomic_int counter_a;
    char pad[64 - sizeof(atomic_int)];
    atomic_int counter_b;
} stats;
4. 一致性(多核)

MESI 状态:Modified(已修改)、Exclusive(独占)、Shared(共享)、Invalid(无效)。写入会使其他核心上的该缓存行副本失效——这就是原子操作和锁为何会让缓存行在核心间来回传递。

5. 预取
#ifdef __builtin_prefetch
for (int i = 0; i < n; i++) {
    __builtin_prefetch(&data[i + 8], 0, 3);
    process(data[i]);
}
#endif

硬件步长预取器会检测顺序访问;随机访问则会导致未命中。

6. 测量
perf stat -e cache-references,cache-misses,L1-dcache-load-misses ./app
7. Agent 用法
/memory-hierarchy-and-caches Diagnose false sharing in this per-thread stats array

常见问题

现象原因解决方法
扩展性骤降伪共享按缓存行对齐每个线程的数据
LLC 未命中率高工作集大于缓存容量对算法分块;绑定 NUMA 节点
DMA 不一致CPU 缓存与设备不一致在 MCU 上刷新/失效缓存;在 Linux 上使用 dma_sync
预取反而有害访问模式不规则移除手动预取
结构体复制量很大AoS 导致缓存行利用率低采用 SoA 布局——参见 cpu-cache-opt

相关技能

  • skills/low-level-programming/cpu-cache-opt — 实用优化
  • skills/computer-architecture/cpu-pipelines-and-hazards — 加载使用停顿
  • skills/computer-architecture/virtual-memory-paging-and-tlb — TLB 未命中
  • skills/allocators/numa-programming — 远程内存延迟
  • skills/profilers/hardware-counters — perf 计数器事件

评论

支持 Markdown