多核可扩展性建模:Amdahl 与同步开销
更新时间:2026-10-01。把单核模型复制 N 份不等于 N 倍性能,这篇讲清多核加速的真实约束。
本文要回答的问题
- 为什么核数翻倍,加速常常远不到 2 倍?
- 哪些开销随核数反而恶化?
- 怎么从加速曲线判断瓶颈?
一、Amdahl 串行上界
加速比 = 1/(s+(1−s)/N),其中 s 是无法并行的串行比例。即使 N→∞,上限也被 s 锁死;哪怕只有 5% 串行,无限多核的加速也不超过 20 倍。
二、随核数恶化的开销
- 锁/屏障争用:核越多,等待同一把锁、在屏障处汇聚的时间越长,原子 CAS 失败重试增加。
- 一致性流量:共享可写行在核间弹跳(ping-pong),false sharing(无共享数据却落在同一 cache line)制造额外无效化。
- 共享带宽:多核总需求逼近内存/NoC 带宽上限。
三、扩展性曲线

理想线性之上,效率随核数下降;下降原因不同,对策也不同(减少串行区、换无锁/分片锁、消除 false sharing、减少共享)。gem5 可搭多核 + 一致性协议,注入原子/同步延迟并扫核数。
四、常见坑
- 按线性外推多核性能。
- 只看加速比不看并行效率。
- 忽略 false sharing 和 cache line 弹跳。
- 同步原语按固定延迟建模,不计争用。
- 不扫核数,单点测量掩盖扩展性拐点。
小结
Amdahl 给出串行上界,锁争用、一致性弹跳、带宽墙让效率随核数下降;要靠加速曲线与核数扫描定位拐点。下一篇 DVFS 与频率-功耗权衡建模。
总结
多核性能绝不能按单核 IPC 线性外推:Amdahl 定律的串行比例锁死加速上限,锁/屏障争用、cache line 弹跳与 false sharing、共享带宽墙还会随核数恶化,定位方法是扫 1→N 核的加速比与并行效率曲线,在走平/下降处区分串行、同步还是带宽瓶颈。