多核 SoC 片上互连网络--流量控制和路由算法

4.2.3 流量控制

流量控制决定了如何分配资源,例如缓冲区和信道带宽,以及如何解决数据包冲突[1]。每当数据包被缓冲、阻塞、丢弃或错误路由时,这取决于流量控制策略。一个好的流量控制策略应该在减少延迟的同时避免通道拥塞。ON/OFF、基于信用和ACK/NACK 是 NoC 中常用的控制流,本小节将对其进行解释。

4.2.3.1 ON/OFF 流量控制

ON/OFF 流量控制[28] 具有可以管理来自上游路由器的数据流的协议,同时发出最少量的控制信号。它之所以能够做到这一点,是因为它只有两种状态:ON 或 OFF。该控制流具有阈值,该阈值取决于下游路由器中空闲缓冲区的数量。阈值用于决定控制信号的状态。当空闲缓冲区的数量超过阈值时,下游路由器会向上游路由器发出 OFF 信号,停止 flit 的流动。同时,下游路由器向其他节点发送flits,空闲缓冲区的数量变得小于阈值,下游路由器向上游路由器发出 ON 信号,重新启动flit 流。由于ON/OFF 信号只是发送给开关,因此计算时间很短。图 4.7显示了一个带有 ON/OFF 流量控制的传输示例。

图 4.7 ON/OFF 流量控制

4.2.3.2 基于信用的流量控制

在基于信用的流量控制(CB)中,上游节点拥有关于下游缓冲区中空槽数量的信息。我们称此信息为 CN(信用编号)。每当上游节点向下游缓冲区发送一个迁移时,该数字就会减 1。当下游缓冲区向其他节点发送一些flit时,它们也会向上游路由器发送信用控制信号,当上游路由器收到该信号时,与该路径关联的CN适当增加。图 4.8 说明了数据流和传输示例。在此示例中,最初路由器 2 被阻塞,并且 CN 递减。接下来 Router 2 开始发送flits 和 credit 信号被发送到路由器1,路由器 1 接收信号并重新开始向路由器 2 发送 flits。

图 4.8 基于信用的流量控制

4.2.3.3 ACK/NACK流量控制

上述流控将信号从下游缓冲区发送到上游缓冲区,并决定是否发送flits。另一方面,ACK/NACK 流控制[28] 不需要等待和计算来自下游缓冲区的此类信号。在这个流量控制模型中,当 flits 从源发送到目的地时,每个节点缓冲区中都会保留一个副本,以便在必要时重新发送它,以防某些 flits 被丢弃。当接收到迁移时,从下游节点发送ACK信号。当上游节点收到此信号时,它会从其缓冲区中删除其副本。如果下游节点不能或没有收到正确的flit,它发送NACK向上游节点发出信号,上游节点倒回其输出队列并开始重新发送损坏的迁移的副本。图 4.9 描述了这种流量控制的一个例子。

图 4.9 ACK/NACK 流量控制

4.2.4 路由算法

本节将介绍路由算法的一些基本背景和概念。通常,为网络选择的路由算法取决于拓扑结构。本节将仅简要介绍路由算法及其分类。路由算法可以根据几个标准进行分类:

• 目的地数量:根据数据包将被路由到的目的地节点的数量,路由算法可以分为单播路由和多播路由,如图 4.10 所示。单播路由将数据包从单个源节点发送到单个目的节点。组播路由发送从单个节点到多个目标节点的数据包。组播路由算法又可以分为基于树的组播路由和基于路径的组播路由。

图 4.10 路由算法根据目的地的数量分类:a 单播,b 多播

• 路由决策局部性:根据做出路由决策的地方,路由算法(单播或多播路由)可以分为源路由和分布式路由。

如图 4.11 所示,在分布式路由中,将有一个报头探测(对于单播路由情况),其中包含目标节点(可能也是源节点)的地址。每次报头探测进入交换节点时,都会在本地计算路由信息。在源路由中,路径是在源节点计算的。每个中间节点的预先计算的路由信息,消息将传送到的位置,将写入路由探测器。所有路由探测表示从源节点到目标节点的路由路径的信息将被组装为消息的数据包标头。

图 4.11 根据决策局部性的路由算法分类:a 分布式,b源

• 自适应性:在目前看到的所有路由实现案例中,路由算法可以是确定性的或自适应的(如图 4.12 所示)。在确定性路由中,来自源和目标对的计算路径是静态计算的,并且总是相似的。在自适应路由算法中,从源到目的地的路径可以不同,因为自适应路由自适应地选择备选输出端口。根据拥塞信息或备选输出端口的通道状态来选择输出通道。自适应路由算法通常引导消息远离拥塞或网络中的故障区域。自适应路由算法可以根据备选自适应转弯的数量进一步分为完全自适应和部分自适应路由算法。

图 4.12 根据自适应性对路由算法的分类:a 确定性的,b 自适应的

• 最小性:根据路由路径的最小性,路由算法可分为最小算法和非最小算法(见图4.13)。最小自适应路由算法将不允许消息离开其目标节点。换句话说,消息将始终路由到更靠近其目标节点的位置,并通过最少的跳数到达其目的地。在也称为迂回路由算法的非最小算法中,消息可以路由远离其目的节点。这可以随机执行,也可以遵循自适应路由 [29] 中常见的一些规则和限制。

图 4.13 路由算法根据最小化分类:a 最小化,b 非最小化

4.2.4.1 死锁和活锁避免

死锁是由网络中数据包之间的循环依赖引起的。这是NoC 系统中的主要问题之一,当不同缓冲区中的数据包由于相互依赖形成依赖循环而无法前进时引起。它之所以会发生,是因为允许数据包在顺时针和逆时针转向方向上进行所有转向。图4.14 说明了自适应 NoC 系统中的死锁示例。这种依赖性是由R02 和R01 之间的flits 交换引起的。由于故障的存在,最小路由的选择是有限的,并且两种通信相互依赖;因此,他们都没有可以沿着网络取得进展。在同一张图中,我们可以看到分别存储在 R11 和 R01 的输入端口中的 flit Dest10 和 Dest00 是这个死锁的牺牲品;即,即使他们的输出通道是空闲的,他们也必须在缓冲区中等待直到阻塞被解决。

图 4.14 自适应 NoC 系统中的死锁示例

虚拟通道 (VC) [25] 是最常用的死锁避免技术之一。如图 4.15 所示,VC 将输入缓冲区划分为更小的队列,这些队列彼此独立并由仲裁器管理。当一个 VC 发生阻塞时,其他 VC 不受影响,它们会继续请求相应的输出通道。以这种方式,未阻塞的请求得到服务,并且它们的槽被释放以承载其他传入的flit。

另一种用于避免死锁的技术称为虚拟输出队列(VOQ) [30]。在 VOQ 中,如图 4.16 所示,输入缓冲区被分成不同的队列来承载传入的 flit,这些队列根据相应的输出通道进行存储;即,VOQ (i,j) 存储来自输入端口 i 希望访问输出端口 j 的flits。对于每个输出通道,一个 7 × 1 crossbar(i) 专用于处理来自不同输入通道的 flit 的遍历并请求对输出通道 (j) 的授权。

VC和VOQ都保证无死锁;然而,就硬件和实施复杂性而言,采用此类技术的成本很高。这是由处理来自每个输入端口的多个 VC/VOQ 的不同请求所需的仲裁引起的。为了解决这个开销,可以通过在每个顺时针和逆时针方向上应用允许转弯和禁止转弯来实现另一种避免死锁的解决方案。禁止转弯将避免网络中数据包之间的循环依赖。

图 4.15 基于虚拟通道的路由器架构

图 4.16 基于虚拟输出队列的路由器架构

一些路由算法正在基于这些被称为转向模型的禁止来解决死锁问题。文献[31]中介绍了基于转弯模型的自适应路由算法的设计。这项工作展示了基于二维网格的互连网络中自适应路由算法的转弯模型示例。

如果允许数据包进行非最小自适应路由,则可能会出现称为活锁配置的问题。活锁是数据包在目标节点周围移动但从未到达目标节点的情况。可以通过只允许数据包进行最小路由来避免活锁。但是,如果允许非最小路由,则检测活锁的机制必须实施。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值