NoC的图谱结构必须保证每个节点可以发送数据包到其他节点。当没有完善的拓扑结构的时候,路由算法决定数据包从原地址开始选择那一条路径到目的地址。所以,有效的数据算法对NoC网路性能的好坏是至关重要的。
路由算法可以按照不同的标准分为不同的几类。比如说源路由(SOurce Routing)和分布式路由(Distrubuted Routing),确定路由(Deterministic Routng)和自适应路由(Adaptive Routing)。
确定路由(Deterministic Routing)
确定路由是一种常见的路由,它的路由路径只与起点地址和终点地址有关,给定起点和终点地址,路由路径就被确定了,与当前的网络状态无关。而在确定路由中,使用最多的就是维序路由(Dimension-Ordered Routing),因为他有着非常简单易实现的路由逻辑。
在维序路由中,每个数据包一次只在一个维上路由,当在这个维上到达了恰当的坐标之后,才按由低维到高维的顺序在另外的维上路由。因为数据包是按照着严格的单调的维数变化的顺序在通道内路由,所以维序路由也是没有死锁
的。按照在不同拓扑结构的网络中路由,维序路由包括了2D Mesh中的XY路由和在超立方体(HyperCube)中的E-cube路由。
XY路由
关于XY路由算法的具体原理方法,我已经在缓存与XY路由算法一文中有过详细介绍。
具体举例来说,一个源地址(1,2),目的地址(3,4)的微片,采用XY路由算法的路径是不会改变的。
(1,2)->(2,2)->(3,2)->(3,4)-(3,4)
E-cube 路由
E-cube路由和XY路由很相似,都是先在一个方向(维)上路由,然后再在其它方向(维)上路由。具体来说,前面提到了在n维立方体中,每个节点是用一个nbit的二进制编号表示的。每个节点n条输出的通道,其中第i条通道就对应的第i维。在E-cube路由算法中,数据包的头部携带了目的节点的地址 d。当n维立方体中的一个节点v收到一个数据包时·,E-cube路由算法计算路由向量c=d xor v(xor是逻辑运算符号异或)。如果c=0,说明数据包已经到达了目的地,则传给IP核。否则数据包被送往第k纬的输出通道,其中k是c里面最右面或者最左边的‘1’的那一维度。
举例来说,一个由s=Ol10产生的数据包要传向目的地为d=l101的节点。首先计算路由向量cl=d xor s=1101 xor 0110=1011。取最右边的不为零的一位为k,则k=l,说明这是的数据包将会被送往第1维上的通道。然后到达了vl=011l。
再计算路由向量c2=d xor v1=1101 xor 0111=1010,得出k=2,然后送到第2维的通道上。
随即到达v2=0101,再一次计算c3=d xor v2=1101 xor 0101=1000,得出k=4,接着把数据包送到第4维的通道上。
最后到达了目的地d=llOl。
最终,得出的路由过程是:011O一>011l一>0101一>1101
从上面的路由过程可以看出,虽然E-cube路由与XY路由是在不同维数的网络中路由,但是它们都有很相似的共同点:即一次只在一个方向(维数)上路由,直到在该方向(维数)上当到达了与目的地址相同的节点,再按照单调的顺序改变方向在其它维上路由,XY路由是由X方向改变到Y方向的顺序,E-cube路由是从低维到高维(或者从高维到低维)的顺序。而这正是维序路由算法的典型特征。
自适应路由(Adaptive Routing)
确定路由优点是,路由算法简单,在网络低拥塞环境下能获得较低延迟。但是由于其不能响应动态的网络状态变化,所以当网络拥塞增加时,性能迅速降低。
所谓的自适应路由,就是指数据包的路由路径不只与起点地址和终点地址有关,还要考虑网络的状态。也就是说,有同一对起/终点的地址的数据包,在不同的网络状态下,它们的路由路径也可能不同。
自适应路由的优点是采用自适应路由的路径,避免了网络拥塞,可以得到更高的网络带宽饱和值;但是它的路由逻辑较复杂,在网络低拥寨的情况下开销较大,而且还存在死锁问题。
在片上网络中,由于路由器结构所限,一般都采用的是比较简单的自适应算法,如带有一定自适应性的维序路由。所以,下面将着重介绍一下这种算法。
自适应性的维序路由
一般的维序路由是在维序路由中,每个数据包一次只在一个维上路由,当在这个维上到达了恰当的坐标之后,才按由低维到高维的顺序在另外的维上路由。
而这里带有一定自适应性的维序路由则是,当数据包沿某一维(如X方向),从最低维到最高维路由的过程中发生阻塞的时候,即向另一维(Y方向)发出传送请求,如果请求得到应答则向该方向传送数据,否则又转回X方向请求,如此循环,直到请求得到应答。同时规定,不允许数据向远离目的节点的方向运动,所以这种带有一定自适应性的维序路由也是没有死锁
的。
下面以4×4的2DMesh网络中的带有一定自适应性的XY路由为例,具体解释一下这种算法的路由过程。
假设一个数据包路由的起点为(1,4),终点为(4,1)。如果按照一般的XY路由的话,它的路由路径应该是(1,4)一>(2,4)一>(3,4)一>(4,4)一>(4,3)一>(4,2)一>(4,1)
。这时如果假设数据包在节点(3,4)发生了阻塞,不能继续向(4,4)发送。如果按照原来的XY路由,数据包就不能在往下发送,被阻塞在了(3,4)中。这时如果采用的是带有一定适应性的XY路由,在向节点(4,4)发送传送请求没有被允许之后,则它就会向Y维方向上的(3,3)节点发送传送请求,被允许之后,数据包就被发往节点(3,3)了。到达(3,3)后,又会先向X维方向上的(4,3)发送请求。就这样最终的路由路径为(1,4)一>(2,4)一>(3,4)一>(3,3)一>(4,3)一>(4,2)一>(4,1)
。
从上面的路由路径可以看出,带有一定自适应性的XY路由和一般的XY路由的差别就是在某个节点发生阻塞之后,它可以不按照先X维再Y维的顺序路由,而可以是向另一个维发送数据包。这样就可以从一定程度上缓解网络的拥塞