片上网络NoC(6)——路由算法

目录

一、概述

二、路由算法的类型

三、避免死锁

四、实现

4.1 源路由实现

4.2 基于节点查找表的路由实现

4.3 组合电路实现

五、总结


一、概述

        路由算法(routing algorithm),即决定数据包在网络拓扑中从起点到终点路径的算法。路由算法的目标是尽可能地在网络拓扑中均匀分配网络流量,以避免出现热点(hotspot)并最小化竞争(contention),从而降低网络延迟并提高吞吐量。

二、路由算法的类型

        路由算法总体上可以分成三大类:确定性路由(deterministic routing)、无关路由(oblivious routing)和自适应路由(adaptive routing)

        尽管目前已经提出了各种各样的路由算法,但是在片上网络中应用最广泛的路由算法是简单的维序路由(dimension-order routing,DOR)。维序路由是一种确定性路由算法:所有从节点A向节点B移动的数据包都通过相同的路径。在DOR中,数据包在网络拓扑中按照确定的顺序移动:先在一个维度下移动到与目的节点相匹配的位置,然后在下一个维度下移动到与目的节点相匹配的位置,以此类推,最终抵达终点。

        另一类路由算法是无关路由(oblivious routing):数据包从节点A向节点B移动时可以有多种不同的路径选择,然而路径的选择不考虑网络的拥塞(congestion)。例如,一个路由器能够预先随机挑选一条可选路径然后发送数据包。

        第三类路由算法是更为复杂的自适应路由(adaptive routing):一个数据包从节点A移动到节点B的路径取决于当前的网络流量(traffic)情况。

        路由算法也可以按照最短路由与非最短路由进行分类。最短路由仅选择跳数最小的路径。非最短路由可以选择跳数非最小的路径。在没有拥塞的情况下,采用非最短路由的数据包会通过额外的节点和链路,因此增加延迟与功耗。但是,选择非最短路径来避免或减少拥塞,往往会比选择存在拥塞的最短路径具有更低的传输延迟。

三、避免死锁

        在选择或设计路由算法时,不仅需要考虑延迟、功耗、吞吐量和可靠性,大多数应用也要求网络能够保证无死锁。简单来说,死锁是由多个数据包在传输路径上形成了打结的环路(knotted cycle)造成的"。下图展示了一个由4个数据包的路径形成的死锁,A、B、C和D分别代表有路由器的网络节点,有箭头的折线代表数据包的流动方向。其中,每个数据包都等待着当前被其他数据包所占据的路径释放,因此每个数据包都无法移动,从而形成死锁。可以看到,数据包之间的依赖和占用关系形成了一个环路,每个数据包都无法进一步向自己的目的节点传输。

        死锁可以通过以下两种方式避免:

  • 设计路由算法以避免在网络中形成打结的环路
  • 设计数据流控制协议(flow control protocol)以避免路由器缓冲器(buffer)的占用和请求构成循环依赖。

四、实现

        本节讨论各种路由算法的实现选择。路由算法可以通过在源节点或在路径上每个节点的路由器中使用查找表来实现,另外还可以使用组合电路来替代基于查找表的方式实现。具体实现时,会有各种各样的权衡取舍,并且不是所有的路由算法都能被每一种实现方式所支持。

4.1 源路由实现

        路由算法能够采用很多种方式实现。首先,路由信息可以在源节点处集成到数据包的报头中,这种方式叫作源路由。例如,对于2×3的mesh结构,从左下角到右上角的路由可以编码为<EENNNX>[其中的符号含义:E 表示东(east),N 表示北(north),S表示南(south),W 表示西(west),X 表示弹出(eject)],在数据包的路由过程中,每一跳的路由器将会从路由报头中读取上述编码中最左边的方向信息,并根据这个方向信息将数据包发送到具体的输出链路上,同时去除报头中当前路由器所使用过的方向信息。

4.2 基于节点查找表的路由实现

        许多复杂的算法都是使用路由表来实现的,其中每个节点的路由器都维护了一张表来记录数据包为抵达某个特定的目的地而需采用的输出链路。在这个机制下,数据包在每一跳的路由器处获取路由信息,而不是在起点处获取所有的路由信息。这个机制也支持自适应路由算法,因为每一跳都可以利用网络的拥塞信息进行相应的自适应决策。

4.3 组合电路实现

        数据包可以编码目的节点的坐标,并且在路径上每个节点的路由器中使用比较器来决定是否接收(即从本节点弹出)或传递这个数据包。因为其开销小,简单的路由算法在路由器中一般都以组合电路的形式实现。
        对源路由而言,数据包必须有足够的空间以携带用来指定整条路径的所有数据位。组合电路实现的路由仅要求数据包携带目的节点标识符。实现路由算法的整个电路非常简单,并且具有非常低的延迟。下图展示了一个在2D mesh 拓扑中基于当前缓冲区占用情况计算下一跳的组合电路。其中,路由选择也可以采用维序路由,而不考虑缓冲区中的队列长度。

五、总结

        本文介绍了片上网络的路由设计与实现,路由可以分成确定性路由(deterministic routing)、无关路由(oblivious routing)和自适应路由(adaptive routing)。实现方式可以大体上分成源路由实现、基于节点查找表的路由实现和组合电路实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/468629.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTML】情人节给npy一颗炫酷的爱心

闲谈 兄弟们,这不情人节快要到了,我该送女朋友什么🎁呢?哦,对了,差点忘了,我好像没有女朋友。不过这不影响我们要过这个节日,我们可以学习技术。举个简单的🌰&#xff1…

基于 Python 的大数据的电信反诈骗系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

[Linux开发工具]项目自动化构建工具-make/Makefile

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1.背景2.依赖关系和依…

《区块链公链数据分析简易速速上手小册》第3章:区块链数据结构(2024 最新版)

文章目录 3.1 区块和交易的结构3.1.1 基础知识3.1.2 重点案例:构建简单的区块链3.1.3 拓展案例 1:验证交易签名生成密钥对签名交易验证签名完整的交易签名与验证演示 3.1.4 拓展案例 2:监听和解析区块链事件代币合约示例(Solidity…

电路设计(18)——9路抢答器的设计与制作

1.设计要求 设计、制作一台9路抢答器,抢答器应符合如下工作过程: 每次抢答前,主持人首先按下复位键,将抢答器上“抢答号”数显复位,显示为“0”。接着,主持人念答题内容,念毕即叫“抢答…

详解Vue文件结构+实现一个简单案例

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

【STL】string的模拟实现

string类的模拟实现 一、接口函数总览二、默认成员函数1、构造函数2、拷贝构造函数(1)写法一:传统写法(2)写法二:现代写法 3、赋值运算符重载函数(1)写法一:传统写法&…

【数据结构】链表OJ面试题5《链表的深度拷贝》(题库+解析)

1.前言 前五题在这http://t.csdnimg.cn/UeggB 后三题在这http://t.csdnimg.cn/gbohQ 给定一个链表,判断链表中是否有环。http://t.csdnimg.cn/Rcdyc 给定一个链表,返回链表开始入环的第一个结点。 如果链表无环,则返回 NULLhttp://t.cs…

面向对象2:继承

目录 2.1继承 2.2 继承的好处 2.3 权限修饰符 2.4 单继承、Object 2.5 方法重写 2.6 子类中访问成员的特点 2.7 子类中访问构造器的特点 面向对象1:静态 2.1继承 向对象编程之所以能够能够被广大开发者认可,有一个非常重要的原因,是…

Qt 软件封装与打包

1. Qt 软件封装 1、首先以 release 方式进行编译,将生成的 CloudOne.exe 文件复制到 D:\CloudApp 文件夹(自行创建) 2、打开 Qt 命令行工具(如下图所示),并按顺序输入如下指令 cd D:\CloudApp windeployq…

linux应用 进程间通信之共享内存(POSIX)

1、前言 1.1 定义 POSIX共享内存是一种在UNIX和类UNIX系统上可用的进程间通信机制。它允许多个进程共享同一块内存区域,从而可以在这块共享内存上进行读写操作。 1.2 应用场景 POSIX共享内存适用于需要高效地进行大量数据交换的场景,比如多个进程需要…

【JavaEE】----SpringBoot的创建和使用

目录 1.Spring与SpringBoot的区别(面试) 2. SpringBoot的创建 3.SpringBoot创建时的问题及解决 4.SpringBoot的目录学习 5.创建一个SpringBoot 项目并且启动 1.Spring与SpringBoot的区别(面试) Spring 的诞⽣是为了简化 Java 程…