本文大部分内容来源于王志英老师主编的《片上网络原理与设计》以及网络,部分内容是本人理解所得,若有不当之处请指教
一、概述
片上网络将报文交换的思想引入芯片内部通信机制中,尽管片上网络和片外网络具有一定相似性,但二者在延迟、功耗和面积等方面有本质区别。片上网络要与计算核一起竞争芯片宝贵的功耗和面积资源。为了在有限的功耗和面积开销下获得较高的性能,设计者更应关注片上网络的优化,包括底层逻辑实现的优化,网络层路由和流控的优化,以及面向高层编程模式的优化。
片上网络的结构
众核处理器中各节点通过某种互联拓扑构成的网络系统即为片上系统。
每个网络节点包含一个计算核和一个路由器,计算核也可以是加速器或者存储控制器等其他硬件;路由器包括输入单元、交叉开关、交叉开关分配器、虚通道分配器和路由计算单元。
输入单元
输入单元由输入缓存和对应的控制逻辑组成。
缓存单元被组织成多个队列,每个队列是一条虚通道。
计算单元
根据报文携带的目的节点信息,计算出输出端口和输出虚通道
虚通道分配器
完成路由计算后,报文头申请输出虚通道,虚通道分配器手机所有输入虚通道的请求,并将输出虚通道分配给提出请求的输入虚通道。
虚通道分配器和交叉开关分配器都有多个仲裁器组成。
交叉开关分配器
当输入虚通道获得输出虚通道的授权后,路由器会检查授权的输出虚通道是否由空闲的缓存单元;
如果有,报文会向交叉开关分配器提出交叉开关传输的请求。
交叉开关
交叉开关通常由多个多路选择器组成,这些堕落选择器的控制信号由交叉开关分配器生成。
一旦一个报文传输到交叉开关的输出端口,交叉开关就向上有路由器反馈一个信元消息,通知已经释放了一个缓存单元。
输出单元
输出单元使用多个寄存器记录下游虚通道状态
片上网络的设计空间
片上网络的设计空间包括拓扑结构、路由算法、流控机制和路由器结构的设计。
拓扑结构
拓扑结构决定了网络节点和链路的物理分布以及它们之间的连接关系,也决定了消息的传输跳数和每跳链路长度,因此拓扑结构对延迟和功耗影响很大;同时由于拓扑结构决定了节点之间的可用传输路径条数,因此还影响了网络流量的分布,以及网络带宽和传输性能。
路由算法
一旦确定了片上网络的拓扑结构,路由算法便负责为报文计算源节点到目的节点之间的传输路径。好的路由算法有更高的饱和吞吐率,可以降低报文传输延迟,实现全局负载均衡和网络容错,在一定程度上可以避免网络拥塞和死锁。
路由算法可以根据传输路径长度分为最短路由和非最短路由,也可以根据路径条数分为确定性路由算法和非确定性路由算法,非确定性路由算法又可以根据是否考虑网络状态分为非感知路由算法和自适应路由算法。
流控机制
流控为报文分配网络资源,包括链路带宽、路由器缓存和控制状态
片上网络的死锁和堵塞
死锁、活锁、饥饿锁、无锁在多线程、片上网络等领域概念基本一样,可参考这篇文章的描述。
多线程中死锁、活锁、饥饿锁、无锁问题
死锁的定义和原因
死锁指在系统中的多个资源彼此等待对方释放资源而无法继续执行的状态。
无死锁要求网格资源之间没有循环依赖,这些资源包括缓存和链路。
死锁产生的条件:
- 互斥条件:所谓互斥就是节点在某一时间内独占资源。
- 请求与保持条件:一个节点因请求资源而阻塞时,对已获得的资源保持不放。
- 不剥夺条件:节点已获得资源,在末使用完之前,不能强行剥夺。
- 循环等待条件:若干节点之间形成一种头尾相接的循环等待资源关系。
解决死锁的方法
通过虚通道将请求分流
完全自适应算法允许报文使用源节点和目标节点间的所有传输路径,通过虚通道消除路由子函数内部的资源循环依赖,从而消除网络死锁。
通过虚通道解除死锁除了需要一个虚拟网络,还需要协议级的避免死锁方法1。
限制报文传输的部分转向消除资源循环依赖
知乎中的死锁描述博客
参考文献
- Jieming Yin, Zhifeng Lin, “Modular Routing Design for Chiplet-based Systems” ISCA.