SICI · 天机门 · 第十五章

多核与多处理器架构 · 结丹四层

你以为多核就是单核×N,共享内存天然一致。但Amdahl定律的串行天花板和缓存一致性的数据分裂让扩展性远非线性。一致性不是天生的,是靠协议一拍一拍抢回来的。

一致性之乱低语:「N条路,N倍快。你说是不是?」
序章

频率之墙

单核主频撞墙,多核是物理逼出来的唯一出路

结丹四层的试炼甬道尽头,是一面巨大的石墙。墙面上刻着一条攀升的曲线——主频曲线——从1MHz爬到4GHz,然后在3.5GHz附近猛然折断,像撞上了一面看不见的壁障。墙根处散落着几块烧焦的晶片残骸,隐隐散发着余热。

并行之阵,多核并行计算
诺依曼老祖 诺依曼老祖

「单核的路,走到这里就断了。2005年,主频停在3GHz附近——不是做不上去,是功耗把它按死了。」

一致性之乱 一致性之乱

「既然一条路走不通——那就多开几条路。N条路,N倍快。你说是不是?」

频率之墙预测挑战器

先下注N倍预测 → 推主频滑块看P∝CV²f功耗墙 → 看暗硅热力图

一致性之乱逼你下注:N个核就是N倍性能?
第一幕 · 自信

多核法阵 · SMP初成

四个对等核心,共享总线连统一内存

石墙后是一座空旷的法阵基座,基座上刻着四条空槽——四个核心位。中央是一座内存塔,四条总线槽从核心位辐射向塔。

诺依曼老祖 诺依曼老祖

「搭起来。四个核心,共享一座内存。这就是SMP——对称多处理。」

一致性之乱 一致性之乱

「对称,共享,多好——每个核看到的内存都一样。对吧?」

SMP架构搭建器

拖核心入位 → 连共享总线到内存塔 → 启动验证UMA

内存 A = 0
第一幕 · 崩塌

天律推演 · Amdahl之壁

4个核,几倍加速?别猜,推。

法阵基座旁升起一座推演台,台上刻着一条公式槽,空的。

诺依曼老祖 诺依曼老祖

「你搭了4个核。那我问你——4个核,几倍加速?别猜。推。」

一致性之乱 一致性之乱

「4倍。你自己说的。」

Amdahl之壁公式组装器

预测四选一 → 双旋钮控制变量实验台 → 六步公式推导 → 极限验证

4个核,几倍加速?
第一幕 · 再崩塌

幻影内存 · 一致性之乱初现

共享内存是个甜蜜的谎言

推演台沉入地下,S1的SMP法阵重新亮起。但这一次,每个核心旁边多出了一面小镜子——L1 Cache。

诺依曼老祖 诺依曼老祖

「你搭的SMP,每个核都有自己的L1。共享内存——你确定它们看的是同一个世界?」

一致性之乱 一致性之乱

「共享?对——它们共享一个'真相'。各自一份。」

双核心读写时序控制器

两核各读A → 各自修改 → 看L1副本分叉 → 法阵裂痕蔓延

内存 A = 5

时序 · 数据分裂

第二幕 · 挣扎

MESI之环 · 一致性协议

M紫·E青·S金·I灰,四态抢回一致性

SMP法阵的裂痕还在。诺依曼老祖抬手,在法阵上方凝出一个四色光环——M紫、E青、S金、I灰。

诺依曼老祖 诺依曼老祖

「MESI。四个状态,一套协议。它不消灭私有缓存——它让多份副本知道彼此的存在。」

一致性之乱 一致性之乱

「修补?好。你修一个,我看着。」

MESI之环状态机交互器

点PrRd/PrWr触发总线事务 → 看四态转换 → S3裂痕逐段修复

Core 0
I
空闲
Core 1
I
内存 A = 5
BusRd = 0 BusRdX = 0 BusWB = 0 总事务 = 0
第二幕 · 再崩塌

同步之锁 · 竞态深渊

一致性≠原子性,锁是串行的代价

MESI光环还在转。法阵上自动运行一段新程序:两个核心各执行counter++一万次。counter初值0,结果应该20000。结果跳出来:17382。

诺依曼老祖 诺依曼老祖

「……」

一致性之乱 一致性之乱

「一致性?你有一致性。每个核读到的值确实是一致的——它们一致地读到了旧值,一致地覆写了对方的结果。」

竞态复现器 · 三种同步原语对比

慢速回放读-改-写 → 套自旋锁/互斥量/屏障 → 看锁竞争是新瓶颈

counter = 0 (应20000)
第二幕 · 调整

NUMA裂土 · 远近之别

总线走不动了,每个核守自己的地盘

S5的自旋风暴还没散尽。诺依曼老祖抬手,SMP的共享总线断裂成四段——每个核心获得了一座自己的内存塔。

诺依曼老祖 诺依曼老祖

「总线走不动了。裂土。每个核守自己的地盘——访自己的内存快,访别人的慢。这就是NUMA。」

一致性之乱 一致性之乱

「平等多好——可平等走不远。那就承认差异吧。远近有别,才是大国的治理之道。」

NUMA拓扑 · 数据放置实验

点NUMA节点发起访存 → 把数据放本地/远端 → 看延迟差数倍

数据块当前在:节点0
延迟 = 80ns 倍数 = 带宽 = 100%
第二幕 · 基础设施

脉络之网 · NoC片上网络

总线断了,用网络替代总线

NUMA的四个节点之间,空荡荡的——没有连线。

诺依曼老祖 诺依曼老祖

「总线断了,你需要新的脉络。片上网络——NoC。不是一根线连所有,是很多根线连很多点。」

一致性之乱 一致性之乱

「连线?好——你连。每多一条路,就多一个我藏身的岔口。」

NoC拓扑博弈探索器

选Mesh/Ring/Tree/Torus → 路由数据包 → 看延迟/带宽/拥塞对比

跳数 = 平均延迟 = 状态 = 就绪
第三幕 · 顿悟

异构之道 · 大小核与向量

同构追求简洁,异构追求效率

NoC的网格上,64个一模一样的核心整齐排列。诺依曼老祖抬手,网格上有一半核心开始变暗——暗硅。

诺依曼老祖 诺依曼老祖

「64个一样的核,你点亮不了几个。功耗墙没消失——它换了个形式。如果——不是所有核都一样呢?」

大小核调度 · SIMD宽度 · 三架构对比

切大小核看功耗 → 切SIMD宽度看吞吐 → 点三架构热区

功耗 = 3W 性能 = 暗硅 = 0%
第三幕 · 最高潮

Boss 战 · 一致性之乱

三问对决 · 排除法收网

NoC的网格灯火齐灭。分裂的光影从所有总线裂缝中涌出,凝成一张巨大的、裂成两半的脸——两半彼此对望,像两个核心各持一份不同的真相。

一致性之乱 一致性之乱

「我是一致性之乱。我不住在多核里——多核救不了我。我住在'共享内存是真的共享'这个谎言里。你每以为它们看的是同一个世界,我就胖了一圈。三问。答错一题,裂缝就宽一分。」

渊账累计 0 笔 · 三问全对后清零

第三幕 · 收束

尾声 · 多核之悟

S=1/(s+(1-s)/N),一个分数,道尽多核悲欢

分裂体消散时法阵重新亮起。你搭的SMP法阵上的裂痕还在——MESI修补的痕迹像一枚枚补丁,铭刻着"一致性是抢回来的"。

诺依曼老祖 诺依曼老祖

「你突破了。不是因为你答对了三问——答对的会忘。是因为你亲手搭过的每一座法阵、推过的每一条公式、修过的每一道裂痕,都刻在你手上了。但——你搭的这座多核法阵,到底有多快?能量化吗?」

知识图谱点亮 · 多核权衡

点亮全章11块碎片 → 看多核架构全景