发明名称 一种基于MoT结构的低功耗NoC路由方法
摘要 本发明涉及一种基于MoT(mesh-of-tree,网状树)结构的低功耗NoC(Network-on-chip,片上网络)路由方法,包括针对叶子层路由器的自适应路由方法和针对树干路由器的路由方法。本发明所述的路由方法在每个flit进行路径选择时,通过计算每个临近路由器的拥塞系数,选择位于最短路径上拥塞系数较低的路由器进行转发,既能保证核间通信时的最短路径,又会减少网络中非自适应算法产生的拥塞现象。本发明同时采用了一种简化的地址模式以减小路由器的缓存中flit的大小。从而在运行同一个应用时,使用较小的缓存存储flit,在满足性能的基础上达到降低功耗的目的。
申请公布号 CN103729332A 申请公布日期 2014.04.16
申请号 CN201310717527.1 申请日期 2013.12.23
申请人 北京工业大学 发明人 方娟;于璐;冷镇宇
分类号 G06F15/173(2006.01)I;G06F1/32(2006.01)I 主分类号 G06F15/173(2006.01)I
代理机构 北京思海天达知识产权代理有限公司 11203 代理人 张慧
主权项 1.一种基于MoT结构的低功耗NoC路由方法,其特征在于,在每个flit进行路径选择时,通过计算每个临近路由器的拥塞系数,选择位于最短路径上拥塞系数较低的路由器进行转发,以保证核间通信时的最短路径,减少网络中非自适应算法产生的拥塞现象;所述方法包括针对叶子层路由器的自适应路由方法和针对树干路由器的路由方法;其中,针对叶子层路由器的自适应路由方法包括以下步骤;步骤1,路由器接收flit,将该flit存储在相应输入端口的buffer中;步骤2,计算最优的输出端口;步骤2.1,计算数据包从当前节点到达目的节点所经过的Row_Router个数Δx和所经过的Col_Router个数Δy;步骤2.2,若Δx≠0,且Δy≠0,即源节点与目的节点位于不同的行和列上,选择某一邻居路由器作为flit的下一跳,方法如下:(1)计算数据包从源节点到达目的节点的最短路径的数目P<sub>algorithm</sub>;在MoT结构中,P<sub>algorithm</sub>=2;(2)计算在每个叶子节点L,一个flit转发到每一个邻居路由器Row_Router或Col_Router的概率P<sub>1</sub>和P<sub>2</sub>,公式如下:<img file="FDA0000444273540000011.GIF" wi="504" he="152" /><maths num="0001"><![CDATA[<math><mrow><msub><mi>P</mi><mn>2</mn></msub><mo>=</mo><mfrac><mrow><mi>&Delta;y</mi><mo>+</mo><msub><mi>P</mi><mi>algorithm</mi></msub></mrow><mrow><mi>&Delta;x</mi><mo>+</mo><mi>&Delta;y</mi><mo>+</mo><msub><mrow><mn>2</mn><mi>P</mi></mrow><mi>algorithm</mi></msub></mrow></mfrac></mrow></math>]]></maths>(3)计算除flit转发来的路由器外的每一个邻居路由器的拥塞系数,公式如下:<maths num="0002"><![CDATA[<math><mrow><msub><mi>Con</mi><mi>i</mi></msub><mo>=</mo><msub><mi>P</mi><mi>i</mi></msub><mo>&times;</mo><mfrac><mrow><mi>Buf</mi><mo>_</mo><msub><mi>SIZE</mi><mrow><mi>out</mi><mn>1</mn></mrow></msub><mo>+</mo><mi>Buf</mi><mo>_</mo><msub><mi>SIZE</mi><mrow><mi>out</mi><mn>2</mn></mrow></msub></mrow><mn>2</mn></mfrac></mrow></math>]]></maths>式中,Con<sub>i</sub>为第i个叶子节点邻居路由器的拥塞系数,P<sub>i</sub>为第i个叶子节点邻居路由器一个flit转发到Row_Router或Col_Router的概率,i=1,2;Buf_SIZE<sub>out1</sub>和Buf_SIZE<sub>out2</sub>分别为行或列方向输出端口和下一个可能输出端口的可用buffer数;(4)选择拥塞系数Con<sub>i</sub>最低的邻居路由器作为flit的下一跳,确定相应的输出端口;步骤2.3,若Δx=0,且Δy≠0,即源节点与目的节点在同一行上,选择Row_Router作为flit的下一跳,确定相应的输出端口;步骤2.4,若Δx≠0,且Δy=0,即源节点与目的节点在同一列上,选择Col_Router作为flit的下一跳,确定相应的输出端口;步骤2.5,若Δx=0,且Δy=0,即源节点与目的节点连接在同一路由器上,当Core_id=0时,发送flit至L_Core;当Core_id=1时,发送flit至R_Core;步骤2.6,如果两个或者更多的flit想要经过同一个输出端口转发出去,则优先权高的即跳数更多的flit优先转发出去;步骤3,将flit从选择的输出端口转发给相应的路由器;针对树干路由器的路由方法包括以下步骤:步骤1,路由器接收flit,将该flit存储在相应输入端口的buffer中;步骤2,选择输出端口;步骤2.1,计算目的地址Des_ADDR的l层组地址Gro_ADDR,<img file="FDA0000444273540000021.GIF" wi="246" he="146" />N为一个MoT结构中的列数,公式如下:<maths num="0003"><![CDATA[<math><mrow><mi>Gro</mi><mo>_</mo><mi>ADDR</mi><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>return</mi><mo>_</mo><mi>rowaddr</mi><mrow><mo>(</mo><mi>Des</mi><mo>_</mo><mi>ADDR</mi><mo>)</mo></mrow><mo>,</mo><mi>if flit is in a Row</mi><mo>_</mo><mi>Router</mi></mtd></mtr><mtr><mtd><mi>return</mi><mo>_</mo><mi>coladdr</mi><mrow><mo>(</mo><mi>Des</mi><mo>_</mo><mi>ADDR</mi><mo>)</mo></mrow><mo>,</mo><mi>if flit is in a Col</mi><mo>_</mo><mi>Router</mi></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>步骤2.2,判断路由器的地址Cur_ADDR与Gro_ADDR是否相同,如果相同,转下一步;否则,转步骤2.5;步骤2.3,计算目的地址Des_ADDR的l-1层组地址Up_ADDR,公式如下:Up_ADDR=return_groupaddr(Des_ADDR,l-1)步骤2.4,若Up_ADDR=0,发送flit至L_Router;若Up_ADDR=1,发送flit至R_Router;步骤2.5,将l+1层路由器作为flit的下一跳,确定相应的输出端口;步骤3,转发flit:将flit从选择的输出端口转发到相应的路由器。
地址 100124 北京市朝阳区平乐园100号