片上网络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.mzph.cn/news/683585.shtml

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

相关文章

算法训练day30回溯算法总结

文章链接 代码随想录 (programmercarl.com) 回溯是递归的副产品,只要有递归就会有回溯,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。 回溯法就是暴力搜索,并不是什么高效的算法…

第十九篇【传奇开心果系列】Python的OpenCV库技术点案例示例:文字识别与OCR

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例系列 短博文目录前言一、OpenCV 文字识别介绍二、图像预处理示例代码三、文字区域检测示例代码四、文字识别示例代码五、文字后处理示例代码六、OpenCV结合Tesseract OCR库实现文字识别示例代码七、OpenCV结…

算法沉淀——栈(leetcode真题剖析)

算法沉淀——栈 01.删除字符串中的所有相邻重复项02.比较含退格的字符串03.基本计算器 II04.字符串解码05.验证栈序列 栈(Stack)是一种基于先进后出(Last In, First Out,LIFO)原则的数据结构。栈具有两个主要的操作&am…

【王道数据结构】【chapter5树与二叉树】【P159t12】

设一棵二叉树的结点结构为(LLINK,INFO,RLINK)&#xff0c;ROOT为指向该二叉树根结点的指针&#xff0c;p和q分别为指向该二叉树中任意两个节点的指针&#xff0c;试编写算法ANCESTOR(ROOT,p,q,r)&#xff0c;找到p和q的最近公共祖先结点r #include <iostream> #include &…

re:从0开始的CSS学习之路 9. 盒子水平布局

0. 写在前面 过年也不能停止学习&#xff0c;一停下就难以为继&#xff0c;实属不应 1. 盒子的水平宽度 当一个盒子出现在另一个盒子的内容区时&#xff0c;该盒子的水平宽度“必须”等于父元素内容区的宽度 盒子水平宽度&#xff1a; margin-left border-left padding-lef…

QT 工具栏 状态栏 停靠部件 核心部件

添加/删除工具栏 删除工具栏方法和删除菜单栏方法一样&#xff0c;不过工具栏可以有多个&#xff0c;所以每次右键MainWindow对象&#xff0c;都可以看到添加工具栏的选项。 工具栏添加动作 新添加的QAction对象会在动作编辑器里找到&#xff08;Action Editor&#xff09;&a…

计算机组成原理(1)----主存储器

目录 1.基本半导体元件及原理 2.寻址 1.基本半导体元件及原理 一个主存储器可以分为存储器&#xff0c;MAR&#xff08;地址寄存器&#xff09;和MDR&#xff08;数据寄存器&#xff09;&#xff0c;这三个部件由在时序控制逻辑的控制下工作 其中存储体用来存放二进制数据0和…

[字符串] KMP与字符哈希

KMP 首先&#xff0c;要知道在KMP算法里的 next 数组里&#xff0c;对操作的字符串到底存储了什么。 以当前字符为结尾的子串&#xff0c;真前缀与真后缀相同的最长长度。&#xff08;注意&#xff1a;不是说回文&#xff1b;而且是“真”&#xff0c;也就是说&#xff0c;不…

百万级并发分布式锁

需求是要支持春节百万并发高并发抢购红包商品。 架构师经过多方技术调研&#xff0c;整理开发以下几个核心步骤&#xff1a; 1.使用redis缓存icon支持高并发 2.商品数据量先存入缓存icon中 3.抢购商品锁定&#xff0c;并从缓存中读取数量减1 4.释放商品锁 代码 import org.r…

国产制造,欧美品质:爱可声助听器产品质量获国际认可

随着科技的发展和全球化的推进&#xff0c;越来越多的中国制造产品开始走向世界舞台。其中&#xff0c;爱可声助听器凭借其卓越的产品质量&#xff0c;成为了国产制造的骄傲。 国产制造指的是在中国境内生产的产品&#xff0c;欧美品质则是指产品在设计、生产、质量控制等方面…

基于RBF神经网络的自适应控制器simulink建模与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1自适应控制器 4.2 RBF神经网络模型 5.完整程序 1.程序功能描述 在simulink中&#xff0c;使用S函数编写基于RBF神经网络的自适应控制器&#xff0c;然后实现基于RBF神经网络的自适应控制…

手撕链表OJ

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

Vue CLI学习笔记

在看任何开源库的源码之前&#xff0c;必须先了解它有哪些功能&#xff0c;这样才能针对性地分模块阅读源码。 Vue CLI 简介 Vue CLI是Vue.js的官方命令行工具&#xff0c;它是一个基于Vue.js进行快速开发的完整系统。 通过Vue CLI&#xff0c;开发者可以快速搭建和开发Vue.js项…

VC++ 绘制折线学习

win32 有三个绘制折线的函数&#xff1b; Polyline&#xff0c;根据给定点数组绘制折线&#xff1b; PolylineTo&#xff0c;除了绘制也更新当前位置&#xff1b; PolyPolyline&#xff0c;绘制多条折线&#xff0c;第一个参数是点数组&#xff0c;第二个参数是一个数组、指…

QT学习事件

一、事件处理过程 众所周知 Qt 是一个基于 C 的框架&#xff0c;主要用来开发带窗口的应用程序&#xff08;不带窗口的也行&#xff0c;但不是主流&#xff09;。 我们使用的基于窗口的应用程序都是基于事件&#xff0c;其目的主要是用来实现回调&#xff08;因为只有这样程序…

Leetcode 392 判断子序列

题意理解&#xff1a; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde&quo…

WebServer 之 http连接处理(上)

目录 &#x1f33c;基础知识 epoll HTTP 报文格式 HTTP 状态码 有限状态机 &#x1f319;http 处理流程 &#x1f40e;http 报文处理 &#x1f382;http类 &#x1f382;请求报文--接收 &#x1f40e;epoll 相关代码 &#x1f9dc;‍服务器接收 http 请求 &#x1f…

Qt 说明Q_PROPERTY的作用

在Qt框架中,Q_PROPERTY是一种宏,用于声明一个类的属性。Q_PROPERTY宏可以告诉Qt元对象系统(Meta-Object System)关于类的属性信息,比如属性的名称、类型、读写权限、通知信号等。这样可以让Qt的元对象系统能够对类的属性进行动态的查询和操作,比如在运行时动态获取和设置…

HTML快速入门教程

HTML&#xff1a;超文本标记语言&#xff08;Hyper Text Markup Language&#xff09;&#xff0c;是通过标签的形式将内容组织起来然后共享到网络之上供其他电脑访问查看。 大家可以思考一下&#xff0c;怎么将自己电脑上的文件或图片共享给其他电脑&#xff1f; 这时候会说通…

.target勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 网络安全威胁如勒索病毒已经成为企业和个人数据安全的重大挑战之一。.target勒索病毒作为其中的一种&#xff0c;以其高度复杂的加密算法和迅速变化的攻击手法备受关注。本文将深入介绍.target勒索病毒的特点&#xff0c;探讨如何有效地恢复被加密的数据文件…