moe

GPU NoC Physical Foundation

GPU NoC Physical Foundation

Posted by George Lin on June 21, 2026

引言:170 个周期的延迟差意味着什么?

在 MoE 训练中,我们通常把通信的焦点放在 GPU 之间——NVLink 够不够快、InfiniBand 有没有阻塞、All-to-All 要不要走 NVSwitch。但在这一切发生之前,token 的 hidden state 必须先在本 GPU 内部从计算核心(SM)走到高速缓存(L2),再从 L2 走到片外 HBM 的发送缓冲区。这一段路程——片上网络(Network-on-Chip, NoC)——经常被视为”固定成本”而被忽略。

它不应该被忽略。

2024 年,KAIST、UBC 和 Microsoft 的研究者在 MICRO 上发表了一项研究,首次系统地实测了 NVIDIA V100、A100、H100 三代 GPU 的片上网络特性。他们在实测中发现了一个惊人的数字:从同一个 SM 访问不同物理位置的 L2 分片,延迟可以差到 70%。在 V100 上,最快 175 个周期,最慢 248 个周期——差了 73 个周期。在 A100 上,跨 GPU 分区的 L2 访问延迟可以从 ~200 个周期跳到 ~400 个周期。

这些数字对 MoE 有直接影响。在 All-to-All dispatch 的第一步,每个 SM 上的 token 数据从寄存器走到 HBM 发送缓冲区的过程中,要穿过这个 NoC。如果某些 token 的路径比其他 token 长——物理上更长——那么 dispatch 操作的完成时间就不是均匀的。在同步通信模型下,发完最快的一批 token 的 SM 必须等待最慢的那个 SM 完成——因为 All-to-All 在所有参与 GPU 间有一个隐式的 barrier。

这就是我们要从芯片内部开始讲通信的原因:你无法在 node 间消除一个从 chip 内部就没有解决的延迟问题。


第一层:GPU NoC 到底是什么?

不仅仅是”连线”

GPU 的 NoC 不是一个简单的全互联矩阵(crossbar)——至少在现代 GPU 上不是。随着 GPU 规模的扩大(V100 80 SM → H100 132 SM),单纯的全互联 crossbar 需要 O(n²) 的连线,面积和功耗都无法接受。

因此,NVIDIA 采用了层次化互联拓扑。虽然 NVIDIA 没有公开过内部 NoC 的精确拓扑图,但基于芯片照片(die photo)、性能实测和结构推断,学术界达成了相对一致的认知:

                     ┌─── HBM stack ───┐
                     │                  │
        ┌────────────┤  Memory Controller (MC) + L2 slices  ├────────────┐
        │            │                  │            │
        │            └──────────────────┘            │
        │                                            │
   ┌────┴────────────────────┐              ┌────────┴───────────────────┐
   │   GPU Partition Left    │              │    GPU Partition Right     │
   │   ┌─── GPC 0 ───────┐  │              │   ┌─── GPC 4 ───────┐      │
   │   │ TPC0 TPC1 ... │  │              │   │ TPC0 TPC1 ... │      │
   │   │ [SM0][SM1]... │  │              │   │ [SM64][SM65]..│      │
   │   └────────────────┘  │              │   └────────────────┘      │
   │   ┌─── GPC 1 ───────┐  │              │   ┌─── GPC 5 ───────┐      │
   │   │ ...            │  │              │   │ ...            │      │
   │   └────────────────┘  │              │   └────────────────┘      │
   └────────────────────────┘              └────────────────────────────┘

这个层次结构的关键层级是:

层级 V100 A100 H100 说明
SM 80 108 132 基本计算单元
TPC 2 SM/TPC 2 SM/TPC 2 SM/TPC 2 SM 通过 mux 共享 NoC 入口
CPC 2-3 TPC/CPC H100 新增的中间层级
GPC 6 GPC, 最多 14 SM/GPC 7 GPC, 最多 16 SM/GPC 8 GPC, 最多 18 SM/GPC 图形/计算处理集群
GPU Partition 无(单分区) 2 分区(左右) 2 分区(左右) A100/H100 引入,中央 crossbar 分割
L2 Cache 6MB, 32 分片 40MB, 80 分片 50MB, 80 分片 L2 分片分布在 Memory Controller 附近

每一级之间的带宽不是线性的。 SM 的输出带宽在 TPC 层被 2:1 共享,在 GPC 内被进一步共享。这种层级化带宽共享意味着——物理上靠近某个 L2 分片的 SM 在通信路径上比远离那个分片的 SM 有结构性的优势。

Hierarchical Crossbar + 输入加速(Input Speedup)

实测数据表明,GPU NoC 的带宽供给遵循一个关键原则:输入加速(input speedup)

输入加速是指:当多个 SM 同时向 NoC 注入流量时,NoC 提供的总带宽并不简单等于”SM 数 × 单个 SM 的带宽”。因为 SM 共享 TPC 和 GPC 级别的带宽入口,如果 input speedup 不够,多个 SM 同时通信时每个 SM 能拿到的带宽会下降。

论文的实测结果:

  • TPC speedup(读):V100/A100/H100 三代都达到了满带宽——即 2 个 SM 同时读取时,每个 SM 都能获得和单独读取时相同的带宽
  • TPC speedup(写):V100 只有 ~1.09×(远不到满带宽的 2×),而 A100 和 H100 达到了满带宽——说明写入带宽共享在 V100 代是个瓶颈,后来被修复了
  • GPC 级 speedup(local):V100 只达到 ~50% 的满带宽(即 7 个 TPC 全部注入时,平均每个 TPC 只有单独时的一半带宽),H100 接近 85%
  • GPC 级 speedup(global,跨分区):A100 和 H100 相比 V100 有显著提升——说明新一代 GPU 的跨分区 NoC 带宽被大幅加强

这对 MoE 的启示:在 All-to-All dispatch 的节点内阶段,所有 SM 上的 token 都在竞争 NoC 入口。如果 dispatch kernel 的设计没有考虑 input speedup 的限制——比如让太多 SM 同时写 L2——实际的通信带宽可能远低于理论的 L2 带宽,导致 dispatch 延迟被人为拉长。


第二层:延迟的非均匀性 —— 实测数据

V100:同一个 GPC,同一个人,不同的命运

论文中的 Figure 1(a) 是整篇研究最核心的一张图。它展示了从 V100 上的 SM24 到所有 32 个 L2 分片的访问延迟分布:

  • 最低延迟:~175 cycles
  • 最高延迟:~248 cycles
  • 平均延迟:~212 cycles
  • 差值:73 cycles,约 33% 的非均匀性

同一个 SM,同样的访问类型(L2 hit),同样的数据大小——唯一不同的就是 L2 分片的物理位置。73 个周期在 1.38GHz 的 V100 上大约是 53 纳秒。对于一个 GPU kernel 来说这就是几个 warp 切换的开销,但对于一个紧耦合的通信循环来说,这 53ns 在几千次重复后累积成可感知的延迟差异。

更值得注意的是 GPC 间的差异。论文的 Figure 1(b) 和 Figure 2 显示:

  • GPC0 的延迟分布:μ = 213 cycles, σ = 13.9 cycles——宽分布,延迟变化大
  • GPC2 的延迟分布:μ = 209 cycles, σ = 7.5 cycles——窄分布,延迟更均一

为什么 GPC2 的延迟更均一?因为它位于芯片中间(根据芯片照片的推断),物理上到达所有 L2 分片的路径长度差异更小。而 GPC0 位于芯片边缘,离一侧的 L2 分片近但离另一侧远。

这意味着,一个 GPU kernel 在 GPC2 上运行和 GPC0 上运行,其通信延迟的确定性是不同的。 对于 MoE dispatch,如果你不幸把通信密集的 SM 线程块调度到了 GPC0,你会观察到比 GPC2 更大的 tail latency。而在同步 All-to-All 中,tail latency 决定全体的等待时间。

V100 的物理布局:延迟的地图

论文通过系统地测量 SM-L2 分片的延迟对,并结合 V100 的芯片照片(die photo),推断出了近似的逻辑布局(Figure 4)。关键发现:

  • 延迟由 SM 在 GPC 中的位置 + L2 分片在 Memory Partition 中的位置共同决定
  • 物理上靠近的 SM-L2 对(如 SM64 和 L2 slice 17)延迟最低(180 cycles)
  • 物理上远离的 SM-L2 对(如 SM4 和 L2 slice 15)延迟最高(217 cycles)
  • 同一个 GPC 内的 SM 具有高度相关的延迟分布——Pearson 相关系数可达 0.998

论文使用了 Pearson 相关系数热力图(Figure 6)来展示 SM 之间的延迟模式相似性:

  • V100:同一 GPC 内的 SM 几乎完美相关(r ≈ 1.0),相邻 GPC 间高度相关(r ≈ 0.8-0.9),远处的 GPC 间相关性显著降低
  • 特别是两组 GPC(GPC0&1 和 GPC4&5)在延迟模式上相似——它们很可能在芯片的两端对称位置——而中间的 GPC2&3 具有不同的延迟特征

这个物理布局信息对 MoE kernel 的启发是直接的:如果你能控制 token dispatch 时 SM 的分配——比如让处理 dispatch 操作的 SM 尽量靠近目标 L2 分片——你可以节省显著的单跳延迟。这不是一个容易的优化(SM 分配通常由 GPU 线程块调度器自动决定),但在设计 kernel 时值得考虑。

A100:GPU 分区的代价

A100 引入了 GPU 分区(partition)的概念——芯片被一条中央 crossbar 分成左右两个分区,每个分区有自己的 GPC、L2 分片和 Memory Controller。

论文的 Figure 6(b) 显示 A100 的 Pearson 相关热力图相比 V100 有显著变化:同一个 GPC 内的 SM 不再具有完美相关性,延迟分布更加碎片化。芯片变大了,物理距离的差异也变大了。

但真正的发现在 Figure 8(b) 中:跨分区 L2 访问的延迟惩罚

当 SM 访问同分区(near partition)的 L2 分片时,延迟约 200-250 cycles——与 V100 类似。但当 SM 访问跨分区(far partition)的 L2 分片时,延迟跳到约 400 cycles——几乎翻倍。这 150-200 cycles 的额外延迟来自数据在 GPU 内部穿越中央 crossbar 的往返路径。

换句话说,A100 的 NoC 实际上是一个两跳网络:SM → 同分区 L2 是一跳,SM → 中央 crossbar → 跨分区 L2 是两跳。这种两级延迟结构意味着一个 SM 的”通信带宽”取决于它访问的数据分布在哪个分区。

H100:新层级(CPC)和分布式共享内存

H100 引入了一个新的层级——CPC(Compute Processing Cluster)——在 TPC 和 GPC 之间。这是 NVIDIA 官方文档没有明确标注的层级,但论文通过详细的延迟和带宽测量确认了它的存在:

  • 一个 GPC 包含 3 个 CPC
  • 每个 CPC 包含 2-3 个 TPC(4-6 个 SM)
  • CPC 内部有 SM-to-SM 网络——支持 H100 新引入的分布式共享内存(Distributed Shared Memory, DSM)

论文的 Figure 7(b) 展示了 CPC 间的 SM-to-SM 通信延迟:

  • CPC0 内部 SM 间通信:196 cycles
  • CPC2 内部 SM 间通信:~213 cycles
  • CPC 间通信的延迟随 CPC 的距离增加而增加

这个 SM-to-SM 网络是 H100 的一个重要创新——它允许一个 SM 直接访问另一个 SM 的共享内存(shared memory),而不需要通过 L2。对于 MoE 来说,这意味着如果两个 token 的专家碰巧在同一个 CPC 内(或者更理想,同一个 SM 的不同 warp),token 的 hidden state 可以通过 SM-to-SM 网络快速传递,而不走完整的 L2 路径。

H100 在跨分区延迟上也做了优化。论文的 Figure 8(c) 显示 H100 的 L2 延迟分布比 A100 更均匀——NVIDIA 的 Hopper 架构白皮书提到 H100 的 L2 “caches data for memory accesses from SMs in GPCs directly connected to the partition”,这意味着 L2 缓存策略被设计成倾向于缓存本分区的数据,减少了跨分区访问的频率。

但在 L2 未命中时的跨分区惩罚仍然存在——Figure 8(f) 显示 H100 的 L2 miss penalty 不是恒定的,而是依赖于数据被缓存在哪个分区。这为 MoE dispatch 的缓冲区放置增加了一层复杂性:如果你把 dispatch 发送缓冲区放在”错误”分区控制的 HBM 区域,你在 L2 miss 时会付出额外的往返延迟。


第三层:带宽的均匀性 —— 好消息和坏消息

好消息:带宽基本均匀

论文的一个核心发现是:延迟虽然不均匀,但带宽基本是均匀的。

  • V100 上单个 SM 对一个 L2 分片的带宽:平均 ~34 GB/s,σ = 0.147 GB/s——分布极窄
  • V100 上一个 GPC 对一个 L2 分片的带宽:平均 ~85 GB/s,σ = 0.06 GB/s——分布更窄

这说明 GPU NoC 的带宽分配被精心设计成对所有 SM-L2 对公平——即使某些路径有更高的延迟,带宽并没有被牺牲。这是通过在 NoC 内部提供足够的输入加速(input speedup)来实现的——更远的路径使用更宽的内部链路来补偿额外的延迟。

带宽均匀性对 MoE 的意义:All-to-All dispatch 是一个带宽密集操作(每次传输大量 token 数据),而不是延迟敏感操作。因此,只要带宽是均匀的,延迟的非均匀性对 dispatch 总吞吐量的影响比我们直觉上想象的要小——除非延迟差异造成了 SM 级别的负载不均。

坏消息:跨分区带宽下降

A100 引入了 GPU 分区后,跨分区 L2 的带宽不再是均匀的。

论文的 Figure 12 揭示了这一现象:

  • SM0(位于左分区)访问左分区 L2(near partition):~39.5 GB/s
  • SM0 访问右分区 L2(far partition):~26 GB/s——下降约 34%
  • SM2(位于右分区)访问左分区和右分区的带宽互换——但模式相同

这种带宽不对称在小并发场景下尤为明显。论文的 Figure 14 显示,当只有 1-2 个 SM 发送流量时,跨分区带宽的降幅可达 28%。只有当足够多的 SM 同时发送流量(~8 个 SM 以上)时,跨分区带宽才能饱和到和同分区相近的水平。

根据 Little’s Law,带宽 = 并发请求数 / 平均延迟。跨分区延迟更高 → 单个 SM 在远端 L2 上的”飞行请求”(in-flight requests)更少 → 带宽更低。当更多 SM 同时发送请求时,飞行请求总量增加,带宽才得以饱和。

这对 MoE dispatch 的启示是:如果 dispatch kernel 只使用了少量的 SM 和少量的通信 warp(比如 DeepSeek-V3 只用 20 个 SM 做通信),那这些 SM 的物理位置和它们访问的 L2 分片的位置关系就很重要——如果通信 SM 集中在左分区但 dispatch 缓冲区的数据在右分区的 HBM 上,跨分区带宽的下降会让 dispatch 吞吐受到惩罚。

H100 的”补丁”:局部化 L2 缓存

H100 对这个问题做了一个架构级的修补——L2 缓存被配置为倾向于缓存来自”直接相连的 GPC”的数据。这意味着如果 MoE dispatch kernel 处理的数据碰巧被缓存在本地分区的 L2 中(这在 dispatch kernel 刚写入数据后是常见的——数据还在 L2 中),H100 的延迟和带宽都会很优秀。但如果数据需要从另一个分区的 HBM 读取(L2 miss),惩罚依然存在。


第四层:从 NoC 到 MoE —— 为什么这对你很重要

1. Token dispatch 的 tail latency 问题

在 All-to-All dispatch 中,所有参与 GPU 执行一个逻辑上同步的操作:每个 GPU 把自己的 token 分发到其他 GPU。在节点内(NVLink 域),这个分发是并行的——GPU 0 向 GPU 1、2、3… 同时发送数据。但发送的完成时间由最慢的一条链路决定

内部 NoC 的非均匀延迟在这条链路的最前端引入了一个变数:GPU 0 上的 SM 在把数据从 register file 搬到 NVLink 发送缓冲区时,经过的 NoC 路径不同,延迟也不同。如果某些 SM 的路径延迟比其他 SM 高 30-50%,dispatch 的有效完成时间就会被这些”慢 SM”拖累。

在 NVSwitch 的全互联架构下(所有 GPU 同时收发),这个问题被放大了:所有 GPU 上的最快 SM 都在等最慢的 SM。

2. 通信 SM 的放置策略

DeepSeek-V3 的经验是:把 20 个 SM 专门划出来做通信。这些 SM 不做计算,只做数据搬运(IB↔NVLink 转发)。那么这 20 个 SM 应该选哪些?

根据论文的分析,最佳策略是:选择分布在不同 GPC 上的 SM,而不是把通信 SM 集中在一两个 GPC 中。原因有两个:

  • NoC 带宽共享:同一 GPC 内的 SM 共享 GPC 级的 NoC 入口带宽(input speedup 有限)。如果通信 SM 集中在同一个 GPC,它们的有效总带宽会被 input speedup 瓶颈限制。分散到多个 GPC 可以利用更多并行的 NoC 入口。
  • L2 分片覆盖:不同 GPC 到达不同 L2 分片的延迟不同。分散通信 SM 可以让延迟分布更均匀,减少 tail latency。

论文的 Figure 15(b) 给出了实证:当 14 个 SM 集中在 1 个 GPC 时,相比分散在 6 个 GPC,性能下降约 62%。这是一个巨大的差异——仅仅来自 SM 的物理位置选择。

3. H100 的分布式共享内存(DSM)机会

H100 引入了跨 SM 的共享内存访问(通过 SM-to-SM 网络)。对于 MoE dispatch,这意味着:

如果 token 的目标专家在同一个 GPC 内的另一个 SM 上(这需要专家的 GPU 内部分布信息),理论上可以通过 DSM 直接传递,绕开 L2 和 HBM 路径。SM-to-SM 网络的延迟(~200 cycles CPC 内,~213 cycles CPC 间)远低于 L2 访问(212-400 cycles),而且不需要占用 L2 带宽。

这是一个尚未被大规模探索的优化方向。目前没有公开的 MoE 训练系统利用 DSM 做 token dispatch——都走标准的 L2/HBM 路径。但在未来,随着 H100/B200 的 DSM 变得更成熟,GPU 内部的 MoE token 路由可能成为节点内层次化 All-to-All 的第一跳。

4. MoE kernel 设计的 NoC 感知

目前的 MoE dispatch kernel(包括 DeepSeek-V3 的那些)在设计时主要考虑的是:如何最大化 NVLink 和 IB 的利用率。GPU 内部的 NoC 被视为”足够快”而不被专门优化。

但论文的数据告诉我们,这个”足够快”的背后有不均匀的结构。未来的 MoE kernel 设计可以考虑:

  • 亲和性感知的 SM 绑定:如果编译时知道哪些 SM 靠近哪些 L2 分片(通过类似论文的 micro-benchmarking),可以把通信密集的 SM 绑到”有利”的物理 SM ID 上
  • 分区间负载均衡:在跨分区场景下,确保通信 SM 均匀分布在两个分区,避免所有通信流量只走一个分区的 NoC
  • 利用 CPC 的 SM-to-SM 网络:对于 GPU 内部的 token 路由(如果多个专家在同一个 GPU 上),通过 DSM 绕开 L2 路径

第五层:NoC 设计的未来方向

更大的芯片,更大的非均匀性?

从 V100 → A100 → H100,芯片面积在持续增长。H100 的芯片面积约 814mm²(TSMC 4N),Blackwell B200 更大(双 die 方案)。随着芯片面积增长,NoC 的物理距离也在增长——延迟的非均匀性只会加剧,不会消失。

论文在结论部分指出:“随着 GPU 规模的持续增长,理解 NoC 的非理想特性对确保整体系统不被 NoC 瓶颈所限变得至关重要。” 基于模拟的 NoC 研究(假定矩形 2D Mesh 或 crossbar)不再能准确反映真实 GPU 的 NoC 行为。真实 GPU 的 NoC 是层次化的、通过 input speedup 精心平衡过的、但存在显著非均匀性的混合架构。

Designing AI Chip 的视角

Bjarke Hammersholt Roune(前 Google TPU 技术负责人)在他的技术指南中从另一个角度讨论了芯片互联的设计:

“对于面向 AI 的芯片,片内互联应该是可预测的——确定性路由、均匀延迟、充足的带宽——因为 AI 工作负载的通信模式是被编译时已知的,不需要适应动态流量变化。”

这与 GPU NoC 的现实形成了有趣的对比。GPU 的设计哲学来自图形处理,需要适应各种不规则的数据访问模式——因此 NoC 被设计成具有弹性带宽分配能力但牺牲了延迟均匀性。TPU 的设计哲学来自张量处理,编译时已知通信模式——因此可以使用更确定性的互联(如 TPU v4 的 Torus)。

哪种哲学更适合 MoE?在这个问题上,DeepSeek-V3 的经验更偏向 TPU 的哲学——MoE 的通信模式是半确定的(token 路由在运行时已知,但可以通过容量和负载均衡来控制),一个更可预测的 NoC 会让通信 kernel 的设计和优化变得更容易。


关键技术决策 Checklist

1. 你做过 GPU NoC profiling 吗?

在你的 GPU 集群上运行类似论文中的 micro-benchmark(算法 1 和 2),确认 NoC 的非均匀延迟和跨分区带宽在你的具体 GPU 型号上的实际值。论文的数据是在 V100/A100/H100 上测的,但你的具体硬件可能因为芯片变体(如 H800 vs H100)而有差异。

2. 通信 SM 是分散分布还是集中分布?

如果你像 DeepSeek-V3 那样使用专用的通信 SM,检查它们是否分散在不同的 GPC 上。如果通信 SM 集中在 1-2 个 GPC 中,考虑重新绑定它们。论文的 Figure 15(b) 显示集中分布可能导致 62% 的性能下降。

3. 通信缓冲区的物理位置在哪里?

dispatch 缓冲区的 HBM 物理地址落在哪个分区?如果它恰好是通信 SM 所处分区的”远分区”,跨分区带宽下降(A100 上最多 28%)会影响 dispatch 吞吐。考虑使用 GPU 的 NUMA 感知内存分配(如果平台支持)。

4. MoE kernel 是否可以利用 H100 的 DSM?

如果多个专家在同一个 GPU 的不同 SM 上(当专家数足够多时会自然发生),现有的代码是通过 L2/HBM 路径做数据交换。评估是否可以利用 H100 的 SM-to-SM 网络(distributed shared memory)来做 GPU 内部的 token 路由——这可以省去 L2 带宽和延迟。


下一篇预告

第三篇将跨越芯片边界,进入层级 1-2:NVLink 和 NVSwitch。从 NVLink 1.0 (P100) 的裸线直连到 NVLink 5.0 (B200) 的 1.8TB/s 交换架构,每一代带宽翻倍背后的 SerDes 演化、物理取舍、以及对 MoE All-to-All 通信模式的直接适配。紧接着第四篇将深入 NVSwitch 4.0 的芯片级设计——251 亿晶体管、72 条 200Gb/s 端口、14.4Tb/s 交换芯片——以及 NVL72 的机柜工程极限。


本文引用的主要资料

  1. Jin et al., “Uncovering Real GPU NoC Characteristics: Implications on Interconnect Architecture”, MICRO 2024. DOI: 10.1109/MICRO61859.2024.00070
  2. Roune, B. H., “Designing AI Chip Hardware and Software”, 2026(个人技术指南)
  3. NVIDIA, “NVIDIA H100 Tensor Core GPU Architecture”, Whitepaper, 2022
  4. NVIDIA, “NVIDIA A100 Tensor Core GPU Architecture”, Whitepaper, 2020