Skip to content

底层 / SIMD / 硬件视角(Low-level)专题 ​

HPC/AI Infra 最“硬核”的一块:SIMD 向量化、cache/storage、CPU 流水线、NUMA、硬件内存序。这些能把“会用”的候选人筛出去。

问题清单(含答案) ​

1. SIMD 是什么 / SSE/AVX 指令族?为什么加速?

答案

单指令多数据,一条指令同时算多个元素。SSE 128 位(4×float)、AVX 256 位(8×float)、AVX-512 512 位。详见 simd.md。

2. 自动向量化 vs intrinsic vs 手写?

答案

自动向量化写简单循环让编译器识别(省事、先试);intrinsic 用 _mm* 内置函数精确控制(不够再用);手写汇编只在极端/特殊指令时。一般自动 → 不够再 intrinsic。

3. SGEMM/点积怎么向量化 + FMA + 展开?

答案

向量化一次算多个乘加,用 FMA(乘加融合)减少指令数,循环展开隐藏访存延迟、提升 ILP。详见 simd.md。

4. 硬件内存序:为什么 release/acquire 够用?

答案

CPU 有 store buffer 和 invalidate queue 导致可见乱序;release/acquire 通过必要的屏障只限制需要的顺序(成对建立 happens-before),比 seq_cst 全序省开销。见 atomic-memoryorder.md。

5. NUMA / cache-coherent 多核:跨 NUMA 代价 / 亲和性?

答案

多 socket 各带本地内存,跨 NUMA 访问延迟高。本地分配 + 绑核(pinning)保持亲和性。详见 numa-coherence.md。

6. CPU 流水线:分支预测、乱序、ILP、依赖链?

答案

分支预测错误代价大(冲刷流水线);乱序执行靠 ILP 并行执行不相关指令;依赖链限制 ILP。代码上减少分支、打破依赖链。详见 cpu-hardware.md。

7. RDTSC / steady_clock 测时精度与陷阱?

答案

RDTSC 读时间戳计数器、极快但可能漂移/跨核不准;steady_clock 单调、适合测时间间隔。详见 measure-timing.md。

8. 什么时候超线程能帮?

答案

一个线程访存停顿时另一线程可执行,利于隐藏访存延迟;但两线程会争执行单元,纯计算密集时反而受限。

9. 内联 asm 何时必要?

答案

需要编译器无法生成的指令时(cpuid、特殊 SIMD、原子定序、系统调用等)才用。

10. 现代 CPU uarch 差异对 code 的影响?

答案

不同厂商/代际的乱序深度、SIMD 宽度、缓存大小、分支预测能力不同,影响优化策略(说常见差异即可,不必背死型号)。

子文档 ​

文件内容
index.md本总览
simd.mdSIMD/向量化/intrinsic
cpu-hardware.md乱序/分支/依赖链/ILP/超线程
numa-coherence.md缓存一致性、NUMA、亲和性
measure-timing.md测时、RDTSC、clock 精度

糌粑的面经笔记 · VitePress 版