try ai
科普
编辑
分享
反馈
  • 维度顺序路由

维度顺序路由

SciencePedia玻尔百科
核心要点
  • 维度顺序路由 (DOR) 是一种确定性算法,它通过对数据包可遍历的维度强制执行严格的顺序来防止网络死锁。
  • 虽然 DOR 在网格网络上简单且无死锁,但它会产生限制性能的热点,并且在更复杂的环形拓扑上需要虚拟通道来避免死锁。
  • DOR 是用于多核处理器、超级计算机和像 Intel Loihi 这样的神经形态芯片的片上网络 (NoC) 中的一种基础路由策略。
  • 先进技术可以通过将 DOR 用作专用的逃逸网络,来将自适应路由的高性能与 DOR 的无死锁保证相结合。

引言

在并行计算的复杂世界里,从多核处理器到大型超级计算机,最大的挑战不仅仅是计算,而是通信。我们如何在数千个处理单元之间高效、可靠地路由数据,而不会造成数字交通堵塞或灾难性的僵局?这个问题是片上网络和互连设计的核心,它要求解决方案能够平衡简单性、性能和鲁棒性。本文将探讨针对此问题的一个最优雅和基础的答案:维度顺序路由 (DOR)。

我们将开启一段旅程,始于 DOR 的核心原则与机制。您将学习到这个看似简单的规则如何驾驭网络路由令人困惑的复杂性,提供无死锁这一至关重要的保证,并适应更复杂的网络拓扑。在这一理论基础之后,我们将探索 DOR 广泛的应用和跨学科联系,发现其作为现代微处理器、高性能计算集群乃至类脑神经形态芯片架构支柱的关键作用。通过这次探索,一个简单的路由决策对整个现代计算领域的深远影响将变得清晰。

原理与机制

想象一下,您正在为一座庞大的、布局在硅芯片上的网格状城市设计邮政服务。这座城市是一个​​片上网络 (NoC)​​,其建筑是需要相互发送邮件——即数据包——的处理核心。街道是导线,交叉路口是小巧的智能路由器。您的任务是给每个路由器一套简单的指令来转发数据包。这就是路由游戏,您选择的规则将决定您的城市是繁华高效的大都市,还是交通瘫痪的噩梦。

迷宫般的选择

将一个数据包从源核心 sss 发送到目标核心 ddd 的“最佳”方式是什么?最显而易见的答案是走最短路线。在我们的网格状城市中,这意味着水平行进一定数量的街区,垂直行进一定数量的街区。总街区数 ∣Δx∣+∣Δy∣|\Delta x| + |\Delta y|∣Δx∣+∣Δy∣ 是著名的​​曼哈顿距离​​,任何恰好覆盖这个距离的路径都是​​最短路径​​。

但第一个意外就在这里。即使遵循“总是走最短路径”这一简单规则,交叉路口的路由器仍然面临着数量惊人的选择。如果一个数据包需要向东走 Δx\Delta xΔx 个街区,向北走 Δy\Delta yΔy 个街区,存在多少条不同的最短路径?这是一个经典的组合数学谜题。在每一步,数据包都可以向东或向北移动(只要它仍需要朝该方向行进)。总行程长度为 Δx+Δy\Delta x + \Delta yΔx+Δy 步。唯一路径的数量,就是从这些总步数中选择哪 Δx\Delta xΔx 步是向东移动的方式数量。答案是一个惊人的大数:(Δx+ΔyΔx)\binom{\Delta x + \Delta y}{\Delta x}(ΔxΔx+Δy​)。对于一个仅需向东移动10个街区、向北移动10个街区的数据包,就有超过184,000条不同的最短路径!在更复杂的网络拓扑(如超立方体)上,选择的数量增长得更快,与距离的阶乘 h!h!h! 成正比。

要求一个简单的路由器根据全城的交通报告在数千条路径中做出智能选择,就像要求一个十字路口的交警预测和管理整个曼哈顿的交通流量一样。这太复杂了。我们需要一个更简单的规则。

一个简单而优雅的规则:顺序的暴政

让我们提出一个优美简单,近乎“专制”的规则:​​维度顺序路由 (DOR)​​。在其最常见的二维网格形式中,它被称为 ​​XY 路由​​:首先,完成所有水平(X维度)的移动,然后才开始任何垂直(Y维度)的移动。数据包以一个简单的L形路径行进。

这条规则立即带来了极好的结果。首先,它是​​确定性的​​。对于任何给定的源和目的地,路径都是唯一且固定的。这意味着如果您从同一源向同一目的地发送两个数据包,它们将遵循完全相同的路径。由于它们按顺序进入路径,并且在狭窄的通道队列中无法相互超越,因此它们保证按发送顺序到达。对于像流媒体视频或神经形态计算这类对脉冲时序至关重要的应用来说,这种由路由算法免费提供的按序交付是一个巨大的优势。

但这种刻板的简单性也有其阴暗面。如果许多人想向同一个热门地址发送邮件,这种现象被称为​​内向广播 (incast)​​,会发生什么?想象一下,在一个 k×kk \times kk×k 网格中,每个核心都向一个单一的目的地(比如一个角节点)发送一个数据包。使用XY路由,数据包首先沿着各自的行移动,以到达目的地的列。然后,它们全部转向,试图涌入那唯一的一列。目的地之前的那个链路变成了一个巨大的瓶颈。仔细分析表明,这个单一通道可能需要处理来自将近半个芯片的流量,拥塞程度随网络规模呈二次方增长,约为 k(k−1)k(k-1)k(k−1) 个数据包的量级。那些看似优雅的L形路径,共同造成了一场大规模的交通堵塞,即​​热点​​。

看不见的威胁:网格中的僵局

所以,DOR 可能会效率低下。但它真正的天才之处,也是它存在的深层原因,是它能防止一种更具灾难性的故障:​​死锁​​。

在我们的芯片城市里,数据包不像礼貌的司机;它们更像长长的货运列车。在一种称为​​虫洞路由​​的通用方案下,一个数据包是由一长串“流控单元”(flits)组成的。列车头会预留一条通道路径,其余的车厢紧随其后。一个关键规则是“持有并等待”:列车头在成功获取路径上的下一个通道之前,不会释放它当前占用的通道。

现在,想象四个交叉路口形成一个正方形。再想象四列火车,每列占据正方形的一条边。1号列车想直行,但前方的交叉路口被2号列车堵住了。2号列车被3号列车堵住,3号列车又被4号列车堵住,而4号列车,又被1号列车堵住。你得到了一个依赖循环。没有一列火车能前进,因为它需要的空间被另一列等待的火车占据。也没有一列火车会后退,因为规则不允许。这就是死锁。系统被永远冻结了。

这不仅仅是一个理论上的恐怖故事。在一个环绕式网络(​​环形网络​​)上,如果你允许路由器简单地选择任何最短路径方向,你很容易就能构造出完全相同的情景。四个数据包可能会陷入致命的拥抱,每个都持有着下一个数据包所需的通道,使你的芯片的一个象限陷入瘫痪。

这就是维度顺序路由的简单“暴政”成为我们救星的地方。在一个简单的网格(没有环绕链路)中,XY 路由禁止任何数据包从Y方向通道转向X方向通道。每条路径都是一系列X方向移动,后跟一系列Y方向移动。你可以为通道定义一个顺序:所有X通道都“先于”所有Y通道。数据包总是从一个序号较低的通道移动到一个序号较高的通道。因为你永远不能在这个顺序中“后退”,所以形成依赖循环是不可能的。死锁被完全地、结构性地避免了。这是一个深刻而优美的结果:一个简单的局部规则产生了一个至关重要的全局属性。

当世界是圆的:环形网络及其麻烦

简单的网格有硬边界,这可能效率不高。一种更优雅的拓扑是环形网络(torus),它的边缘环绕连接,形成一个无缝的表面,就像视频游戏《爆破彗星》中的屏幕一样。现在,每个节点在某种意义上都处于中心位置。但这种优雅的对称性带回了我们刚刚驱逐的怪物。

在环形网络上使用维度顺序路由,数据包可能需要在X维度上“绕一整圈”。环绕链路创建了一个物理的通道环。这个环本身在资源依赖图中就是一个循环。一组数据包可以填满整个环,每个数据包都在等待前方的通道,而该通道又被环中的下一个数据包占用。禁止Y到X转向的规则不足以拯救我们。

我们如何打破这个新的循环?我们需要一个新技巧。​​虚拟通道 (VCs)​​ 登场。一个VC不是一条新的物理线路;可以把它想象成在同一条物理道路上创建多个独立的“车道”。每个车道都有自己的小缓冲区,自己的排队等候的汽车队列。

通过两个VC(车道),我们可以强制执行一个新规则,称为​​日期线方法​​。我们将环绕链路指定为“日期线”。一个数据包沿着常规道路(VC 0)行进。如果它需要跨越日期线,它必须切换到“快速通道”(VC 1)。关键规则是:一旦你进入快速通道,你就永远不能在那个维度上切换回常规车道。这就打破了循环。一个数据包不能在VC 0上绕环一周,穿过日期线到VC 1,然后又以某种方式回到VC 0上以完成一个依赖循环。这就像一座通往更高层道路的单向桥,一旦上去就无法返回。这个优雅的技巧,只需为逃逸路径配备两个虚拟通道,就为我们的环形网络恢复了无死锁的特性。

打破规则:绕道的智慧

我们现在已经设计了一个复杂的、无死锁的路由系统。但它总是最好的吗?让我们回到热点问题。我们僵化的XY规则迫使数据包陷入交通堵塞,即使有空闲的旁路可用。如果我们允许数据包更聪明一些,走一小段弯路呢?

这不仅仅是直觉;这是可以被证明的。想象一条最短路径为3跳的路径,其中中间一跳的链路非常拥堵。一个链路的延迟,就像高速公路一样,不仅取决于它的长度;还取决于有多少其他汽车试图使用它。利用排队论的数学,我们可以将每个链路建模为一个服务站。当顾客的到达率 (λ\lambdaλ) 接近服务率 (μ\muμ) 时,在服务站花费的平均时间会急剧增加。预期时间与 1/(μ−λ)1/(\mu - \lambda)1/(μ−λ) 成正比。

现在考虑一条非最短的、5跳的绕行路径,它完全避开了拥堵的链路,只在车流量小的道路上行驶。虽然路径更长,但在五个“服务站”中的每一个花费的时间都很短且可预测。然而,最短路径涉及两跳快速通行和一跳极其缓慢的通行。随着那条拥堵链路的拥塞加剧,其延迟会趋近于无穷大。存在一个精确的、可计算的拥塞阈值 (λc⋆\lambda_c^{\star}λc⋆​),超过这个阈值,5跳的绕行路径会比3跳的“捷径”更快。对于一个服务率为 μ\muμ、背景流量为 λ0\lambda_0λ0​ 的系统,这个阈值是 λc⋆=(2μ+λ0)/3\lambda_c^{\star} = (2\mu + \lambda_0)/3λc⋆​=(2μ+λ0​)/3。对于任何比这更严重的拥塞,打破规则才是更明智的选择。

这有力地推动了​​自适应路由​​的发展,即路由器可以根据局部拥塞情况从多条路径中进行选择。但这又重新引入了死锁的风险!我们是否被困在僵局和交通堵塞之间?

不。最后的综合方案,由 José Duato 提出的一个优美的网络理论,表明我们可以兼得两者。我们可以使用多个虚拟通道。大多数VC构成一个“自适应”网络,数据包可以在其中自由路由以避开热点。但我们保留少数VC——在环形网络上至少两个——作为运行我们僵化的维度顺序路由算法的无死锁​​逃逸网络​​。数据包可以在自适应通道上飞速前进,但如果被卡住,它总能切换到逃逸路径上,这保证了它最终能够取得进展并到达目的地。在环形网络上,这种“两全其美”的解决方案要求每个链路至少有三个虚拟通道:两个用于基于日期线的DOR逃逸路径,至少一个用于自适应路由的“狂野西部”。

一个激进的想法:拥抱随机性

最后还有一个激进的哲学。与其精心规划路线以避开热点,不如干脆拥抱混乱?这就是​​Valiant 随机路由 (VRR)​​ 背后的思想。

规则非常反直觉:要从源 sss 到达目的地 ddd,首先从整个网络中完全随机地选择一个中间节点 rrr。然后,只需从 s→rs \to rs→r 进行最短路径路由,再从 r→dr \to dr→d 进行最短路径路由。

最直接、最明显的缺点是路径长度的大幅增加。平均而言,对于均匀随机的流量,这段两段式的旅程恰好是直接最短路径的两倍长。那为什么还会有人这么做呢?

原因很深刻。因为中间目的地 rrr 是均匀随机选择的,所以每个数据包旅程的第一段的流量模式在统计上是完美均匀的。无论初始流量模式是多么糟糕、会诱发热点的噩梦(比如每个节点 (i,j)(i,j)(i,j) 都向 (j,i)(j,i)(j,i) 发送的“转置”模式),VRR都会将这种对抗性模式“清洗”成遍布整个芯片的、温和而均匀的流量雨。它在任何潜在的热点形成之前就主动将其消除。

这给我们带来了最后一个鲜明的设计哲学选择。我们是选择DOR那种僵化、可预测且局部高效的秩序,并用巧妙的机制来弥补其局限性?还是选择随机路由那种崇高、鲁棒的混乱,牺牲个体路径长度来换取最终的系统级吞吐量和弹性?答案,如同所有伟大的工程问题一样,取决于你想要构建什么。但在从简单的L形路径到这些宏大策略的旅程中,我们揭示了支配我们硅基城市中信息流动的深刻而优美的原理。

应用与跨学科联系

在掌握了维度顺序路由的优雅机制后,我们可能会想把它当作一个精巧的理论奇趣束之高阁。但这样做将只见树木,不见森林。这个简单的算法——“先在X方向走完全程,再在Y方向走完全程”——不仅仅是一项学术练习;它是为复杂、混乱的并行计算世界带来秩序的基本原则。其可预测性和无死锁的特性使其成为我们一些最先进技术内部默默无闻的“老黄牛”。让我们开启一段旅程,从单个微处理器的核心到人工智能的前沿,看看这个不起眼的路由方案如何塑造我们的数字世界。

现代芯片的心脏:片上网络

窥探现代计算机处理器的内部,你不会找到一个单一、庞大的大脑。你会发现一个由数十甚至数百个处理核心组成的繁华都市,每个核心本身都是一台微型计算机。为了让芯片作为一个整体运作,这些核心必须以惊人的速度通信、交换数据和指令。这个通信网络,被编织在硅片的结构之中,被称为片上网络 (NoC)。

在这个微观城市中,维度顺序路由扮演着街道网格的角色。它为数据包从任何核心 (xs,ys)(x_s, y_s)(xs​,ys​) 导航到任何其他核心 (xd,yd)(x_d, y_d)(xd​,yd​) 提供了一种简单可靠的方式。数据包必须行进的“街区”数量是其曼哈顿距离,H=∣xd−xs∣+∣yd−ys∣H = |x_d - x_s| + |y_d - y_s|H=∣xd​−xs​∣+∣yd​−ys​∣。为什么这很重要?因为数据包的每一跳都会消耗时间,以及至关重要的能量。芯片设计师们一直在与延迟和功耗这两个恶魔作斗争。

维度顺序路由的美妙之处在于,它给了我们一把衡量这一成本的简单标尺。对于一个流量均匀分布的 k×kk \times kk×k 核心网格,平均行程是可预测的——延迟随网格大小 kkk 呈线性增长。这提供了一个基本的扩展定律,架构师们用它来设计我们笔记本电脑和手机中的芯片。

但我们可以做得更好,而不仅仅是接受平均值。如果我们知道四个特定的核心将共同完成一项任务,它们之间会频繁地通信,该怎么办?把它们放在芯片的四个角落是愚蠢的。常识告诉我们,应该把它们紧密地放在一起,放在它们自己的 2×22 \times 22×2 小邻域里。这个被称为局部性的原则至关重要。通过将有通信需求的任务映射到物理上相邻的核心,我们可以大大缩短数据包的平均行程。在一个典型场景中,这种简单的、考虑局部性的布局行为可以将平均通信距离——以及因此产生的通信能耗——减少一半。维度顺序路由的简单几何特性使得这种智能映射的好处显而易见且易于量化。

编排超级计算机:高性能计算

让我们将视野从芯片的平方毫米尺度放大到超级计算机的房间尺度。在这里,成千上万的处理器被用来解决人类最宏大的计算挑战:预测气候变化、设计新药或模拟星系的诞生。这些处理器通过高速互连网络连接在一起,通常是3D网格或其近亲环形网络(带有环绕链路的网格)。

维度顺序路由再次提供了管理数据洪流所需的纪律。考虑一个在具有3D环形互连的集群上运行的计算流体动力学 (CFD) 模拟。该模拟在逻辑上将一个3D空间划分为一个单元格网格,每个处理器负责一个单元格块。为了计算其块边缘发生的情况,处理器需要来自其邻居的数据。如果计算块到物理处理器的映射是随意进行的——比如说,1号处理器负责1号块,2号处理器负责2号块,依此类推——一个逻辑上的邻居在网络中物理上可能相距甚远。一条消息可能需要跨越整个机器走一条漫长而曲折的路径,才能与其“邻居”通信。

然而,如果我们使用巧妙的映射,比如像消息传递接口 (MPI) 等标准提供的笛卡尔拓扑,我们就可以将模拟的逻辑网格与超级计算机的物理网格对齐。在模拟中朝 +x+x+x 方向的逻辑一步,变成了网络中朝 +x+x+x 方向的单次物理跳跃。结果是惊人的:仅仅通过确保软件的通信模式尊重硬件的地理结构,通信开销就可以减少三倍或更多。

维度顺序路由的可预测性还使我们能够成为性能的预言家。我们可以分析一个算法的通信模式,并预见交通堵塞将发生在哪里。想象一个“角落收集”模式,这是一个压力测试,其中每个处理器都向位于角落 (0,0)(0,0)(0,0) 的一个主处理器发送数据。使用维度顺序路由,我们可以追踪每一条路径,并精确地看到哪些链路将被淹没。从邻居节点进入最终目标角落的链路将承受来自机器整行或整列的流量冲击。我们可以在运行任何一行代码之前,就精确计算出这个峰值拥塞。同样的远见也适用于其他要求苛刻的模式,比如在快速傅里叶变换等算法中发现的*转置*模式,它会产生其自身独特的瓶颈集合,而维度顺序路由使我们能够识别和分析这些瓶颈。

构建硅基大脑:神经形态计算

也许最激动人心的跨学科应用之一是在神经形态计算领域——即努力构建模仿生物大脑结构和功能的计算机芯片。在大脑中,通信不是CFD模拟中那种整齐的网格状模式。它是一个由稀疏、长距离和大规模扇出连接组成的复杂网络。一个神经元可以向数千个其他神经元广播一个信号(一个“脉冲”)。在硅片上复制这一点,使得通信网络成为设计中最关键和最具挑战性的部分。

在这里,维度顺序路由,如在 Intel 的 Loihi 芯片等架构中实现的,提供了一个鲁棒且可预测的基础。

  • ​​距离的暴政:​​ 就像在标准的多核芯片中一样,布局决定一切。当将一个人工神经网络映射到硅片上时,目标是将突触连接的神经元尽可能地放置在一起。一项引人入胜的研究揭示了忽略这一规则的严重后果。对于一个给定的网络,紧凑、集群化的神经元布局可能导致平均脉冲延迟仅为1.7跳。而将相同的神经元分散到芯片的各个角落,则会导致延迟爆炸性增长到9跳以上——通信延迟增加了五倍多。

  • ​​终极速度极限:​​ 一个神经形态芯片能处理多少流量?这不是一个学术问题;它决定了它能模拟的大脑的最大规模和速度。使用一个强大的概念——对剖带宽(即跨越将芯片一分为二的切面的总数据速率),我们可以找到芯片的饱和点。在均匀随机流量的假设下,我们可以精确计算出必须跨越这个对剖面的脉冲比例。当这个提供的负载等于硬件的容量时,芯片就饱和了。维度顺序路由的可预测性使得对这个临界极限进行清晰的分析计算成为可能,为工程师提供了一个关于系统能持续的最大放电率的硬性数字。工程师可以利用这一点进行详细分析,计算每个链路上的负载,以确保对于特定的神经网络映射不会出现热点。

  • ​​一个充满选择的世界:​​ 维度顺序路由不是唯一的解决方案,它的选择反映了一种深刻的架构哲学。审视其他著名的神经形态系统,揭示了一系列权衡。例如,SpiNNaker 架构使用一个高度灵活的、基于表的组播系统,它在处理脉冲的大规模扇出方面异常出色,但需要复杂的配置。IBM 的 TrueNorth 使用静态配置的网络,优先考虑效率和低功耗。BrainScaleS 系统甚至使用物理模拟线路进行局部广播。Loihi 选择维度顺序的网格 NoC 代表了一种平衡:它牺牲了 SpiNNaker 的部分灵活性,以换取我们一直在探索的无死锁的铁定保证和优雅的可预测性。

展望未来:拥抱随机性

到目前为止,我们的旅程都依赖于一个简化的假设:流量是平稳流动的,延迟是确定性的。但现实世界的网络有交通堵塞。数据包到达路由器时,如果输出链路繁忙,可能需要排队等候。这给延迟引入了一个随机、不可预测的成分。

这就是故事与另一个优美的数学领域——排队论——联系起来的地方。我们可以创建更复杂的性能模型来拥抱这种随机性。我们可以不把拥堵的路由器看作一个固定的延迟,而是将其建模为一个随机服务器,就像银行的出纳员一样。一个到达这个路由器队列的数据包可能很幸运,立即得到服务,也可能需要等待。

值得注意的是,即使存在这种随机性,我们也不会失去预测的能力。通过将维度顺序路由的确定性路径延迟与排队论的随机等待时间相结合,我们可以推导出端到端延迟的完整统计特征。我们不仅可以回答“平均延迟是多少?”,还可以回答“第99百分位的延迟是多少?”或“一个脉冲在其实时截止期限内到达的概率是多少?”这种从确定性平均值到概率分布的飞跃,对于设计下一代高性能和实时系统(包括大规模晶圆级计算机)至关重要。

从微处理器上能耗的最小细节到模拟人脑的宏大挑战,维度顺序路由提供了一条清晰和秩序的线索。它优美的简单性不是弱点的标志,而是力量的源泉,赋予我们理性分析、预测并最终驾驭并行计算深奥复杂性的能力。