Skip to content

内存与性能专题(HPC 核心) ​

HPC/AI Infra 面试里,「性能」绝不是锦上添花,而是主考点。考的往往是:缓存与访存模型、假共享、内存分配器、对齐、locality of reference、profiling 手段。

问题清单(含答案) ​

1. 什么是 cache line?缓存层级大小/延迟?

答案

cache line 是缓存与内存交换的最小单位,通常 64 字节。量级:L1 ~32KB/4 周期、L2 ~256KB~1MB/~10 周期、L3 几 MB~几十 MB/~40 周期、内存 ~100ns。详见 cache-model.md。

2. 为什么遍历方向影响这么大?

答案

行优先按内存顺序访问 → 命中 cache、预取友好;列优先跳跃访问 → 大量 cache miss。访存模式决定缓存命中率。

3. 假共享 false sharing 是什么、怎么消除?

答案

多线程写同一 cache line 的不同变量,缓存一致性协议使该行互相失效、造成伪争用。用 alignas(64) 或 padding 把各线程变量隔离到不同 cache line。

4. 内存池/对象池/自定义 allocator 什么时候写?SSO?

答案

频繁分配固定大小对象、或小块分配是热点时值得写内存池;SSO(小对象优化)如 string/function 把小于阈值的对象内联存放、避免堆分配。

5. new 慢在哪?jemalloc/tcmalloc 好在哪?

答案

new→malloc 有锁竞争、元数据开销、可能 syscall。jemalloc/tcmalloc 用线程本地缓存(TLS)、更少碎片、并发分配更快。详见 allocator-pool.md。

6. 对齐 alignas(64)、padding 为什么 HPC 大量用?

答案

保证变量对齐到 cache line,避免假共享、利于 SIMD 对齐加载、避免跨 cache line。

7. cache blocking / tiling 与矩阵乘法?

答案

把大矩阵分块,让子块留在 cache 内复用,减少访存次数、大幅提升矩阵乘性能。

8. 如何 profiling?

答案

perf 采样看热点/分支预测/cache miss;valgrind cachegrind 模拟缓存;vtune/火焰图可视化。重点关注 cache miss、branch miss、热点函数。详见 perf-bottlenecks.md。

9. 减少堆分配的手法?

答案

复用 buffer、monotonic arena 一次性分配、小对象放栈/内联(SSO)、移动语义减少临时拷贝。

子文档 ​

文件内容
index.md本总览
cache-model.md缓存层级、局部性、cache line、写策略
allocator-pool.md内存池、对象池、arena、自定义 allocator、tcmalloc/jemalloc
perf-bottlenecks.md常见性能瓶颈与 profiling 工具
data-layout.mdSoA/AoS、缓存块计算、对齐与 padding

糌粑的面经笔记 · VitePress 版