Archipelago

Lec 16片上网络(二):路由器微架构与路由(On-Chip Networks II: Router Microarchitecture & Routing)

讲义完成更新于 2026-09-29

Lec 16 片上网络(二):路由器微架构与路由(On-Chip Networks II: Router Microarchitecture & Routing)

MIT 6.5900 Fall 2024 · Daniel Sanchez 主题:路由器微架构与流水线、分配器(allocator)、流水线优化、路由算法、死锁与转向模型(Turn Model)

TL;DR

  • 路由器微架构与流水线:片上路由器包含缓冲、分配逻辑与 Crossbar 开关;经典流水线划分为写缓冲(BW)、路由计算(RC)、虚通道分配(VA)、交换分配(SA)、交换穿越(ST)与链路穿越(LT)。
  • 流水线压缩技术:通过前瞻路由(Lookahead Routing)将 RC 转移至上一跳重叠执行,结合推测交换分配(Speculative SA)在低载下并发进行 VA 与 SA,大幅削减路由器单跳延迟。
  • 死锁防范与转向模型:基于信道依赖图(CDG)禁止特定转向(如 West-First、North-Last)或按维序分配虚通道(DOR/VC Partitioning),系统化破除循环依赖环。

一、回顾:虫孔 vs 虚通道流量控制

  • 虫孔(Wormhole):每个路由器以 flit 为单位管理缓冲,包尽快经输出链路转发(不等所有 flit 到齐)。路由器缓冲放不下整包,拥塞时包的 flit 常跨多个路由器缓冲。问题:拥塞时分配给被阻塞包的链路无法被其他包使用。
  • 虚通道(VC):包阻塞时占住虚通道而非物理信道。VC = 信道状态 + flit 缓冲。多个 VC 减少阻塞(虫孔相当于 1 VC/信道)。

VC 优点:显著减少阻塞。缺点:路由器更复杂,需公平的 VC 分配。


二、路由器微架构

基于环的互连

由若干环停(ring stop)串成环。每个环停在输入处判断:若环上无流量则允许新输入进入;若环上有流量,需决定环上流量与新输入谁优先。

  • 旋转规则(Rotary Rule):环上流量优先;
  • 弹回(Bounces):若环上流量无法投递(如输出 FIFO 满),一种做法是让它继续在环上绕(弹回)。后果:环上流量不再是 FIFO 顺序。

更一般的互连(如 Tilera、Knights Landing)用 2-D 网格。

路由器里有什么

路由器本身也是一个系统:

  • 逻辑:状态机、仲裁器(arbiter)、分配器(allocator)——控制数据在路由器内的移动(Idle / Routing / Waiting / Active);
  • 存储:缓冲——转发前存放 flit(SRAM、寄存器);
  • 通信:交换——把 flit 从输入端口送到输出端口(crossbar、多 crossbar、全连接、总线)。

路由器流水线 vs 处理器流水线

虚通道路由器的逻辑级(logical stages):

缩写含义
BWBuffer Write(缓冲写入)
RCRoute Computation(路由计算)
VAVC Allocation(虚通道分配)
SASwitch Allocation(交换分配)
STSwitch Traversal(交换穿越)
LTLink Traversal(链路穿越)

类比处理器流水线 IF/ID/EX/MEM/WB:不同 flit 经历不同阶段,不同路由器有不同变体(推测、前瞻、旁路)。

基线路由器流水线

  • 路由计算每包一次;
  • 虚通道每包分配一次;
  • 体 flit 与尾 flit 继承头 flit 的这些信息(故只需经 BW → SA → ST → LT)。
Head : BW RC VA SA ST LT
Body : BW          SA ST LT
Tail : BW          SA ST LT

路由器中的分配器

  • VC 分配器(VC Allocator):各输入 VC 为一组输出 VC 提出请求。例:East 输入端口的某 VC0 包要去 West 输出端口,希望拿到该输出端口的任一 VC;
  • 交换分配器(Switch Allocator):同一输入端口的各输入 VC 请求不同输出端口(一个去 North,一个去 West);
  • 为效率常用贪心算法;分配失败的周期会产生停顿(VA/SA stall)。

三、流水线优化

1. 前瞻路由(Lookahead Routing)[Galles, SGI Spider]

在当前路由器为下一个路由器做路由计算:头 flit 已携带下一跳的输出端口,RC 只需读出(快,可与 BW 重叠)。预计算路由使 flit 在 BW 后可立即竞争 VC;下一跳的路由计算(NRC)可与 VA 并行。或者直接简化 RC(如 X-Y 路由非常快)。

BW  RC
        VA  NRC  SA  ST  LT

2. 推测交换分配(Speculative Switch Allocation)[Peh & Dally, 2001]

假设 VA 阶段会成功(低到中等负载下成立),则 VA 与 SA 并行完成;若 VA 失败(没返回 VC),下周期重做 VA/SA。优先非推测请求。

BW  RC  VA
        SA  ST  LT

四、路由算法

路由算法的性质(回顾)

确定性/无关、自适应、最小、无死锁。

网络死锁(Network Deadlock)

流 A 持有信道 u、v,但要前进必须拿到 w;流 B 持有 w、x,但要前进必须拿到 u —— 互相等待,死锁。

维序路由(Dimension-Order Routing, DOR)

  • XY 序:先走 X 方向再走 Y 方向,用 4 种转向中的 2 种;
  • YX 序:先 Y 后 X,同样用 2 种转向;
  • XY 无死锁,YX 无死锁——但 XY + YX 混用会死锁!

转向与转向模型(Turn Model)[Glass and Ni, 1994]

  • 判断路由是否无死锁的一种视角:看允许哪些转向;若允许的转向能构成环则可能死锁;
  • 转向模型:系统化地用尽量少的禁止转向生成无死锁路由;
  • 只要路由符合至少一个转向模型(即信道依赖图无环),即无死锁;
  • 常见模型:West-First(先西)、North-Last(后北);允许更多转向可支持自适应路由,但也可能引入死锁(如六转向模型)。

信道依赖图(Channel Dependency Graph, CDG)

  • CDG 的顶点表示网络链路,边对应网络中的转向;
  • 禁止 180° 转向(如 AB → BA);
  • 由拓扑导出的 CDG 可能含许多环——例如沿 AB→BE→EF 与 EF→FA→AB 的两个流会形成环导致死锁;
  • 关键洞见:若各流的路由符合无环 CDG,则不可能死锁;做法是删除 CDG 中某些边(即禁止某些转向)——可以特设(ad-hoc)删,也可按 West-First 等模型删。

用虚通道避免死锁

通过限制 VC 分配可避免死锁:把每条物理链路拆成多个 VC(如 AF0/AF1、FE0/FE1……),让原本会成环的依赖落在不同 VC 上,从而打破环。

随机化路由

  • Valiant:把每个包先路由到一个随机选择的中间节点 IAI_A,再从 IAI_A 到最终目的 DAD_A。有助于网络负载均衡、最坏情况性能好,但牺牲局部性;
  • ROMM(Randomized, Oblivious, Multi-phase, Minimal):为保留局部性,在最小象限内选中间节点,等价于在源到目的的各条最小路径中随机选一条。

路由器微架构与无死锁路由算法总结

  • 路由器是含逻辑(分配器/仲裁器)、存储(缓冲)、通信(crossbar)的小系统,流水线分 BW/RC/VA/SA/ST/LT;
  • 前瞻路由与推测交换分配可缩短流水线关键路径;
  • 维序路由(XY/YX)简单无死锁但混用会死锁;转向模型与无环 CDG是系统化保证无死锁的工具;虚通道可通过限制分配打破依赖环;
  • 随机化路由(Valiant/ROMM)以局部性换取负载均衡与更好的最坏情况性能。

路由无死锁的拓扑数学本质:信道依赖图(CDG)与转向限制的取舍

初学者在设计 NoC 路由算法时,往往直觉地认为「只要每个节点公平仲裁,网络就不会卡死」。然而网络死锁(Routing Deadlock)本质上是一个关于缓冲资源循环等待的图论问题:当一组数据包分别持有一条链路的缓冲并请求下一条链路,且请求路径在拓扑上闭合成环时,任何仲裁策略都无能为力。

经典维序路由(如 XY Routing)通过强制「必须完全走完 X 轴才能转入 Y 轴」,粗暴地消除了 8 种可能转向中的 4 种(严禁 Y 到 X 的转向),从而在信道依赖图(CDG)中彻底截断了形成有向环的可能性。然而,这种严格的维序限制完全抹杀了网络动态规避热点拥塞的自适应能力。

Glass 与 Ni 提出的转向模型(Turn Model) 揭示了无死锁的最小充分条件:在一个 2D Mesh 中,只需禁止 2 种(而非 4 种)特定转向(如 West-First 模型禁止所有东转南、东转北等进入西向的转向),就能恰好破坏所有顺时针与逆时针环路,同时为其余 6 种转向保留丰富的自适应路由路径。如果必须支持全向完全自适应,则必须引入虚通道(VC),将一个物理环路拆分映射到递增的独立虚拟层(如 VC 0 走 X、VC 1 走 Y),通过虚通道维度的偏序关系在数学上杜绝环路闭合。这种在拓扑约束、逻辑信道层与硬件调度复杂度之间的权衡,是片上互连架构最优雅的理论结晶。

下一讲:事务内存(Transactional Memory)