【NoC片上网络 On-Chip Network】第四章 Routing 路由

NOC 路由

路由算法决定数据包在网络拓扑中从起点到终点的路径的算法。路由算法的目标是在网络拓扑提供的路径之间均匀分配流量,以避免热点并最大限度地减少争用,从而改善网络延迟和吞吐量。在实现这些性能目标的同时,遵守设计约束,避免关键路径过长、面积过大。虽然路由电路本身的功耗通常较低,但特定的路由算法会直接影响到跳数,从而大大影响到消息传输的能量消耗。此外,路由算法实现的路径多样性对于提高网络故障时的弹性也影响很大。

4.1 路由算法类型

路由算法一般分为三类:确定性路由(deterministic routing)、无关路由(oblivious routing)的和自适应路由(adaptive routing)。片上网络最常用的路由算法是最简单的维度排序路由(DOR),因为它很简单。维度顺序路由 (DOR) 维度顺序路由是确定性路由算法的一个例子,其中从节点 A 到 B 的所有确定性路由消息将始终经过相同的路径。通过 DOR,消息逐维遍历网络,到达与其目的地匹配的纵坐标,然后再切换到下一个维度。在二维拓扑(如图 4.1 中的网格)中,X-Y 维度排序路由首先沿 X 维度发送数据包,然后沿 Y 维度发送数据包。从 (0,0) 到 (2,3) 的数据包将首先沿 X 维度遍历 2 个跃点,到达 (2,0),然后沿 Y 维度遍历 3 个跃点到达目的地。
在这里插入图片描述

另一类路由算法是oblivious的路由算法,其中消息从 A 到 B可以有多条不同的路径选择 ,但选择路径时不考虑网络拥塞。例如,路由器可以在发送消息之前随机选择替代路径。图 4.1 显示了一个示例,其中从 (0,0) 到 (2,3) 的消息可以沿 Y-X 路由或 X-Y 路由随机发送。确定性路由是不经意路由的子集。

更复杂的路由算法可以是自适应的,其中消息自适应路由从A到B所采取的路径取决于网络流量情况。例如,消息最初可能遵循 X-Y 路线,并在 (1,0) 的东传出链路处看到拥塞。由于这种拥塞,消息将选择采用北向传出链路到达目的地(参见图 4.1)。

路由算法也可以分为最小路由算法和非最小路由算法。最短路由算法仅选择源和目标之间需要最少跳数的路径。非最小路由算法允许选择可能增加非最小路由源和目的地之间的跳数的路径。在没有拥塞的情况下,非最小路由会增加延迟,并且还会增加功耗,因为消息会遍历额外的路由器和链路。而存在拥塞时,选择避免拥塞链路的非最小路由可能会降低数据包的延迟。

4.2 避免死锁

简单来说,死锁是由多个数据包在传输路径上形成了打结的环路(knotted cycle)造成的。下图展示了一个由四个数据包的路径形成的死锁。ABCD代表路由器网络节点,折线代表数据包流动方向,从节点A南侧输入的数据包需要从节点A的东侧输出端口离开,但与此同时,另一个正在B节点西侧输入端口的数据包占据着AB之间的链路,依次类推,数据包之间的占用和依赖关系形成了一个环路,每个数据包都无法向前推进。
在这里插入图片描述

死锁可以通过两种方法解决:

  1. 设计路由算法避免在网络中形成环路。
  2. 设计数据流控制协议一笔米娜路由器缓冲区的占用和请求构成循环依赖。

4.3 确定性维序路由

路由算法可以由允许的转向描述。下图a说明了 2D mesh网络中所有可能的转向,而图b则说明了 DOR X-Y 路由所允许的更有限的允许转向集。

允许所有转向会导致循环资源依赖,这可能导致网络死锁。为了防止这些循环依赖性,应禁止某些转向。图b中不存在循环。具体来说,向东或向西传播的消息允许转向北或向南;然而,向北和向南传送的信息是不允许转向的。图中的四个转向中的两个是不允许的,因此不可能形成循环。

或者可以使用 Y-X 路由,其中​​允许向北或向南行进的消息向东或向西转向,但一旦消息向东或向西行进,则不允许进一步转向。根据网络维度,即沿 X 或 Y 是否有更多节点,这些路由算法之一将更好地平衡均匀随机流量的负载,因为沿节点较少的维度,通道负载较高。

维度顺序路由既简单又无死锁;然而,它消除了mesh网络中的路径多样性,从而降低了吞吐量。通过维度顺序路由,每个源和目标对之间都存在一条路径。如果没有路径多样性,路由算法就无法绕过网络中的故障或避开拥塞区域。由于路由限制,维序路由在网络负载平衡方面表现不佳。
在这里插入图片描述

4.4 无关路由

不经意路由算法选择路由路径时无需考虑网络状态。通过不使用有关网络状态的信息,这些路由算法可以保持简单。

如下图,Valiant 的随机路由算法是不经意路由算法的一个例子。Valiant 算法将数据包从源 s 路由到目的地 d,会随机选择中间目的地 d’。数据包首先从 s 路由到 d’,然后从 d’ 路由到 d。通过在路由到最终目的地之前首先路由到随机选择的中间目的地,Valiant 的算法能够对整个网络的流量进行负载平衡;随机化导致任何流量模式看起来都是均匀随机的。使用 Valiant 算法进行负载平衡是以牺牲局部性为代价的
在这里插入图片描述

例如对于终点和起点相邻的情况下,这种路由算法会破坏原有的局部性,跳数增加,进而增加平均数据包延迟和网络中数据包消耗的平均能量。此外,Valiant的算法不仅破坏了局部性,还可以将最大通道负载加倍,使网络带宽减半。

Valiant 的路由算法可以限制为仅支持最少的路由(中间节点限制在最小象限),通过将路由选择限制为仅最短路径以保留局部性。Valiant 路由算法和最短路径 Valiant 路由算法两个阶段都可以采用DOR路由,虽然并非所有路径都考虑,但这种路由的负载会比确定性路由(直接从S-D没有中间节点)更加平衡。

Valiant 路由算法和最短路径 Valiant 路由算法与 X-Y(或DOR) 路由结合使用时不会出现死锁。但如果在 X-Y 或 Y-X 路由之间随机选择的无关路由算法并不是无死锁的,因为允许图 4.2 中的所有四个转弯都可能导致链路获取图中的潜在循环。

4.5 自适应路由

  1. 自适应路由概述
    自适应路由更为复杂,即数据包从A到B所选取的路径动态地取决于网络流量情况。

    通常可以用局部或全局的拥塞信息来完成自适应路由的决策。自适应路由经常使用局部路由器信息(如队列的占用情况或队列延迟情况)来估计拥塞和选择链路。流控制使用反压(backpressure)机制,可以使拥塞信息从拥塞地区沿着网络反向传播。

    在这里插入图片描述

    图4.5展示了一个数据包从(0,0)到(2,3)的所有可能最短路径,总共9条路径。仅利用最短路径的自适应路由算法也能够利用路径多样性来提供负载平衡和故障容错。

    自适应路由选择的路径可以被限制在起点和终点的最短路径中。另一种方案是绕远路由(misrouting),绕远路由即允许数据包沿着非有效方向(non-productive direction)路由并选择非最短路径。(能够缩短当前节点位置和目标节点距离的方向称为有效方向(productive direction),无法缩短的方向称为非有效方向(non-productive direction))

    如果允许绕远路由,则容易产生活锁,即数据包一直被绕远路由,从而无法到达终点。需要加入保证数据包朝目标移动的机制。可以通过设定每个数据包被绕远的次数或最大阈值,并在仲裁中为已经被多次绕远路由的数据包设定高优先级来解决活锁。虽然绕远路由会增大跳数,但可以避免拥塞,从而降低数据包的延迟。

    对于完全自适应的路由算法,死锁可能会成为一个问题。例如,图 4.1 中所示的自适应路由是不经意路由的超集,并且存在潜在的死锁。平面自适应路由(planar-adaptive routing)通过将自适应性限制在一次仅两个维度上来限制处理死锁所需的资源。 Duato 提出了流量控制技术,在加入逃逸通道的情况下允许完全路由自适应,同时确保避免死锁。无死锁流量控制将在第 5 章中讨论。自适应路由的另一个挑战是保持一致性协议可能需要的消息间排序。如果消息必须按照源发出消息的顺序到达目的地,则自适应路由可能会出现问题。可以采用在目的地对消息重新排序的机制,或者可以在其路由中限制给定类别的消息以防止重新排序。

  2. 自适应转向模型路由
    在 4.3 节介绍了转弯模型路由,并讨论了DOR/ X-Y 路由禁止所有的八个转弯中的四个来避免死锁(图 4.3)。在这里,我们解释如何更广泛地应用转向模型来导出无死锁自适应路由算法。

    自适应转向模型路由(简称转向模型路由)消除了实现无死锁所需的最小转弯集,同时较大程度保留了一些路径多样性和自适应。

    对于维序布线,2D Mehs 中可用的八个转弯中仅允许四个可能的转弯。转弯模型路由通过允许八个转弯中的六个来增加算法的灵活性,在顺时针转向和逆时针转向中各有一个转向被禁止。

    图 4.6 展示了三种可能的路由算法。从所有可能的转弯开始(如图4.6a所示),逆时针转向中消除北向西的转弯,然后顺时针中分别禁止三个不同的转向可以推导出三种不同的路由算法,可以得到图4.6所示的三种路由算法。

    图4.6a所示为西优先算法(west-first);除了消除北向西转弯外,还消除了南向西转弯。换句话说,消息必须首先向西方向传播,然后再向其他方向传播。
    North-Last 算法(图 4.6b)消除了从北向西和从北向东的转弯。一旦消息转向北,就不允许再转向;因此,必须最后向北转弯。
    最后,图 4.6c 删除了从北到西和从东到南的转弯,以创建负优先算法(negative-first)。消息首先沿负方向(西和南)传播,然后才被允许沿正方向(东和北)传播。所有这三种转弯模型路由算法都是无死锁的。
    在这里插入图片描述

    以上三种转向模型路由算法都是无死锁的。然而并不是在顺时针和逆时针转向中分别禁止一个方向就可以避免死锁。如图4.7所示。
    在这里插入图片描述

    图4.8中,将负优先算法(negative-first)应用于两个不同的源-目标节点对。在a图中,允许先北后东或者先东后北,因此实际路由具有路径多样性。但是在b图中由于是负优先所以只有唯一可行路径,导致缺失路径多样性。
    在这里插入图片描述

    奇偶转向(odd-even turn)模型路由根据当前节点所在奇数列或偶数列,分别禁止一组不同的转向。例如一个数据包在偶数列中移动,先东后北和先北后西被同时禁止;在奇数列中移动,先东后南和先南后西被同时禁止。在这种限制下,奇偶转向模型路由是无死锁的,不存在180°转弯。与其他转向模型如west-first相比,奇偶转向可以提供更好的适应性。如图4.9所示。

    综上,尽管转向模型路由能够提供比维序路由更好的灵活性和适应性,但仍有些限制。其他的转向模型仅保留八个转向中的六个,而奇偶转向模型存在全部的八个转向,因此能够提供更好的适应性。同时west-first negative-first north-last都存在只有一条路径的情况,而奇偶转向模型中不存在。

    在这里插入图片描述

4.6 多播路由

到目前为止,我们主要关注单播(即一对一)路由算法。然而,经常会出现一个核需要向多个核发送相同消息的情况。这称为广播(如果系统中的所有核心都需要发信号)或多播(如果系统中的核心子集需要发信号)。

在共享内存缓存一致性系统中,这样的例子可以在基于广播和基于有限目录的一致性协议中看到。在消息传递系统 MPI 中,这是 MPI_Bcast 等例程所必需的。多播的一种简单实现是简单地发送多个单播,每个目的地一个。但这大大增加了网络流量,导致网络延迟和吞吐量较差。

已经有一些支持片上多播路由的方案。虚拟电路树多播(Virtual Circuit Multicasting, VCTM)在每个路由器上添加小型路由表。在每个多播开始之前,首先会为每个目的节点以单播的形式发送配置包来配置沿 XY 路由的路由表。同一组播目的地集的所有配置包都携带相同的VCT ID,其对应于路由表中的索引。每个设置数据包将其输出端口附加到路由表中的VCT ID条目,从而设置多播流应该被分叉的方向。到该目的地的所有后续多播都被注入该VCT ID,并在网络中的路由器处适当地分叉。 Whirl是一种针对广播优化的路由算法,它试图动态创建负载平衡的广播树,允许广播使用不同的链路组合,从而提高链路利用率和吞吐量。在这两种设计中,路由器都需要支持从多个方向分叉(forking)。

4.7 不规则拓扑中的路由

不规则网络的常见路由实现依赖于源表路由或节点表路由。指定路由时必须小心,以免引发死锁。例如,如果由于网状网络中存在超大核心而删除了某些连接,则转弯模型路由可能不可行。 Up*/Down*路由是一种流行的用于不规则拓扑的无死锁路由算法,它从根节点开始将每个链路标记为“Up”或“Down”。所有的 flits 只能从 Up 链路转换到 Down 链路,而不能从相反方向转换,这保证了死锁的自由。

源路由:路由信息可以源节点处集成到数据包的报头中,这种方式叫源路由。这个机制支持确定性路由和无关路由。

基于节点查找表的路由:每个节点都维护了一张路由表记录路由条目,数据包在每一跳的路由器处获取路由信息,而不是在起点处获取所有的路由信息。这个机制支持自适应路由算法。

同时也应注意容错路由,这类算法对于软错误(瞬时故障)和硬错误(永久故障)等原因造成的故障设计路由。在检测到故障时,能够重构路由表实现无死锁路由。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在輸入......

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值