片上网络路由算法综述

一、 片上网络概述

  在半个多世纪以来,半导体工业一直遵循着“摩尔定律”发展,即集成电路上可容纳的晶体管数目,约每隔两年便会增加一倍。截至目前,处理器中的晶体管数量最多已达到了上百亿。晶体管数量的增加一方面极大提升了单核处理器的性能,但另一方面却为处理器架构的设计带来了许多问题与挑战,包括功耗增加、资源利用率减少、可靠性降低等。此外,利用提高处理器主频、使用先进指令集和采用大容量高速缓存阵列等提高单核处理器性能的方式与急剧增加的功耗相比,其收益在逐步下降。因此,为了有效利用如此庞大数目的晶体管,并且能在保证较低功耗的前提下进一步提高处理器性能,多核处理器的设计成为了解决这一问题的关键方向。尽管业界在众核(核数大于8)处理器的研究与实践方面取得了显著突破,但是众核处理器仍然面临着许多设计难题。高效且低能耗的片上互联方式是难题之一。传统的总线型或交叉开关(crossbar)等互联结构有可扩展性差、带宽较低、延迟较大和功耗较高等缺点。片上网络为解决这些难题提供了新的途径。
  片上网络(Network-on-Chip,NoC)是片上系统的一种新的互联方法。同时它也是面向多核片上系统的主要技术组成部分。NoC带来了一种全新的核与核之间的片上通信方式,并且其性能显著优于传统总线式系统。基于NoC的系统能更好地适应复杂多核SoC设计中使用的全局异步局部同步的时钟机制。NoC构架主要基于电子或光学技术,分别称为片上电网络(Electrical Network-on-chip,ENoC)及片上光网络(Optical Network-on-chip ,ONoC)。随着半导体工艺技术的进步和芯片集成度的提高,NoC 的设计已有理论逐步成为现实,并展现出非常广阔的前景。图1
图1:典型的Mesh拓扑结构的片上网络系统

  图1展示了典型的拓扑结构为Mesh结构的片上网络系统。在此基于片上网络的系统中,处理器中的16个核由一个4×4的网格网络相连。每一个网络节点(node)包含一个计算核(IP核)核一个路由器(router)。路由器和相应的链路组成了片上网络。
相比于传统的SoC上多核的通信方式,NOC架构有以下几点优势:
 (1)良好的可扩展能力。相比于其他SoC通信方式,NoC不再受限于总线架构,因此可以扩展任意数量的计算节点。此外,在需要对片上系统功能进行扩展时,只需要将设计好的功能模块通过网络接口接入,无需重新设计网络整体架构。
 (2)较高的通信效率。NoC将IP核之间的数据传输变为路由器之间的数据转发,因此IP核节约了一部分的计算资源。此外,NoC避免了总线架构在同一时刻只能有一对通信节点进行通信的问题,可以实现同一时刻多对节点的通信。
 (3) 较低的功耗。NoC中采用全局异步局部同步的时钟机制,其功耗开销远低于其他SoC。NoC中局部模块运用同步时钟域,而全局上采用异步时钟,降低了由于全局时钟同步所带来的动态开销,同时,NoC中的时钟树设计复杂度也低于SoC。

二、 片上网络路由算法分类

  片上网络路由算法是旨在使发送数据能够从源节点在各种复杂条件下(网络拥塞、死锁、活锁、故障等),以满足设计要求(最低迟延传输、最小功耗传输等)的方式顺利传输到目标节点的一类算法。对于所涉及的路由算法,一般有一下几点要求:

  • 节点两两互通。为了满足用户需要,在无故障的情况下,网络上任意两节点间需要至少有一条通路。因此要求设计的路由算法能够实现网络上节点间的路径规划,使得发送数据能够在任意节点间进行传输。
  • 避免死锁和活锁。死锁是指当多个分组争用网络中的缓冲资源,分组一方面请求使用缓冲区资源,一方面又占用当前缓冲区,使得其他分组无法获得前进至下一跳所需的缓冲,进而造成的阻塞问题。活锁是指尽管网络中没有死锁现象的发生,某些数据包也无法到达目的节点[1]。为了避免死锁和活锁,路由算法应当包含合理的分组缓存资源管理机制,结合全局分组传输状况为分组的传输链路上预留足够的缓存空间;应当为分组预定合理的传输路径,避免环形死锁。
  • 算法简单,复杂度低。为了降低算法实现的成本,降低对于软硬件平台的运行压力,要求设计的路由算法要尽量简单,且算法的复杂度尽可能低。
  • 公平对待所有用户,防止饿死。为了能够满足所有用户的服务需要,设计的路由算法需要综合考虑用户优先级和公平性的问题,规划合理的数据分配方案,防止饿死问题的发生。
  • 具有一定容错性在实际应用中,由于各种内在和外在因素的影响,网络设备难免会出现故障损坏的问题。因此当存在网络故障的情况下,路由算法需要能够以延迟、效率等为代价,通过使用一些列方式避开故障区域,实现数据的顺利传输。

  依据目的节点数分类,片上网络路由算法可分为单播路由和多播路由两种,两者分别是应用在目的节点有一个或多个的情况下。对单播路由算法的研究是本文的重点。依据路由决策方式的不同,单播路由算法又可分为无关路由、自适应路由以及无关路由和自适应路由相结合三种。无关路由是指路由决策是固定的,与网络状态无关。自适应路由是指路由传输能够依据网络的不同状态自动调整路径选择,从而有效避开热点、拥塞或故障等问题区域。
  本节将按照路由决策方式分类介绍几种典型的路由算法。

1. 无关路由

  无关路由是指一类路由决策与网络状态无关的路由算法。无关路由可分为确定性路由和随即路由两种。

(一) 确定性路由

  在使用确定性路由算法时,分组将按照预设的固定路径在网络中传输。维序路由是典型的确定性路由算法。依据维序路由算法思想,分组每次只在片上网络中沿一个维度传输。
  对于二维片上网络结构,例如Mesh拓扑结构来说,XY路由是最常见的维序路由算法之一。分组先沿X(Y)轴方向传播,当所到达节点的X(Y)坐标与目的节点的相同时,则开始沿Y(X)轴

  • 20
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网络路由算法是一种计算机网络中常用的算法,可以用Java语言进行实现。下面是一个简单的示例代码,演示了如何使用Java语言实现Dijkstra算法: ```java import java.util.*; public class DijkstraAlgorithm { private static final int MAX_VALUE = 1000000; public static void main(String[] args) { int[][] graph = { {0, 3, 2, MAX_VALUE}, {3, 0, 1, 5}, {2, 1, 0, 6}, {MAX_VALUE, 5, 6, 0} }; int[] dist = dijkstra(graph, 0); System.out.println(Arrays.toString(dist)); } public static int[] dijkstra(int[][] graph, int start) { int n = graph.length; int[] dist = new int[n]; boolean[] visited = new boolean[n]; for (int i = 0; i < n; i++) { dist[i] = MAX_VALUE; visited[i] = false; } dist[start] = 0; for (int i = 0; i < n - 1; i++) { int u = minDistance(dist, visited); visited[u] = true; for (int v = 0; v < n; v++) { if (!visited[v] && graph[u][v] != MAX_VALUE && dist[u] != MAX_VALUE && dist[u] + graph[u][v] < dist[v]) { dist[v] = dist[u] + graph[u][v]; } } } return dist; } public static int minDistance(int[] dist, boolean[] visited) { int min = MAX_VALUE; int minIndex = -1; for (int i = 0; i < dist.length; i++) { if (!visited[i] && dist[i] < min) { min = dist[i]; minIndex = i; } } return minIndex; } } ``` 在这个示例代码中,我们使用一个二维数组表示图的邻接矩阵,然后实现了Dijkstra算法来计算从起点到图中所有节点的最短路径。我们首先初始化距离数组和访问标记数组,然后将起点的距离设为0,接着按照Dijkstra算法的流程循环更新距离数组,最后返回距离数组即可。 当然,实际应用中,我们可能需要根据具体情况修改算法的实现细节。但是这个示例代码可以作为一个简单的参考,帮助我们理解算法的基本思路和实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值