前言:本内容根据《片上互联网络——多核/众核处理器关键技术》中文版自行整理
导论
片上网络(On-Chip Networks),也即NoC,是一种新型的芯片内通信结构,它采用类似计算机网络的设计思想,将片上系统内部的各个处理器、存储器、I/O等单元连接起来,形成一个可重构的、高效的、灵活的通信网络。
片上网络之前
在NoC出现之前,片上系统主要采用总线架构(Bus)或者交叉开关(Crossbar)。
- 总线是一种共享的物理通道,所有处理器核通过同一线路进行通信,同一时间仅允许一对核进行数据传输
- 交叉开关通过矩阵式开关实现任意两个核间的直接连接,支持多对核同时通信
但随着多核处理器(如MPSoC)和复杂SoC的发展,传统架构的局限性愈发明显。总线和交叉开关都无法满足高并发、低延迟、低功耗的需求,促使研究者借鉴计算机网络的分组交换思想,提出了片上网络。
片上网络优势
- 高可扩展性:模块化设计,通过添加路由器和链路可线性拓展节点数量,避免总线架构因节点增加导致的带宽竞争问题
- 高带宽:并行传输
- 低延迟:短距离片上通信和分布式路由算法
片上网络基本构建模块
- 拓扑:在网络中各个节点(各个模块连接一个路由器,路由器作为与网络中其他节点的直接对接节点)和通道形成的形状
- 路由:在某种拓扑结构中,消息从源节点到目的节点的走法
- 流控制:消息在传输时需要资源(谁先谁后,通过哪一条路径),流控制规定了给消息分配资源的策略
- 路由器微体系结构:整个路由器工作时需要输入缓冲区、路由器状态、路由逻辑、分配器和交叉开关等部分,这些部分工作的逻辑通常设计为流水线结构
- 链路结构:全摆幅逻辑和带有中继器的连线
片上网络的系统架构接口
共享缓存
在大规模并行处理系统中,结合消息传递接口(Message Passing Interface, MPI)单芯片多处理器(Chip Multiprocessor, CMP)技术,将统一的地址空间划分为多个地址空间分区,每个分区对应多个共享存储的节点,各个分区之间的数据交互通过 MPI 进行统一管理。
实现共享存储的一种方式是共享存储模型:
缓存一致性协议
多核系统中常用两种缓存一致性协议:
- 基于广播(broadcast)的协议,常采用 MESI 协议
- Modified
- Exclusive
- Shared
- Invalid
- 基于目录(directory)的协议:中心化目录记录缓存状态
协议级死锁
不同类消息之间存在资源依赖时,就可能导致死锁。
多级缓存
基于目录的协议中的内存控制器
未命中/事物状态保持寄存器 MSHR(Miss Status Holding Register)
- 功能:跟踪未完成缓存未命中请求
- 工作流程:
- 缓存未命中时分配MSHR条目
- 合并后续相同地址请求
- 数据返回后批量响应
片上网络接口标准
- 基于总线的事务语义
- 乱序事务
拓扑
- 直连拓扑
- ring
- mesh
- torus
- 非直连拓扑
- crossbar
- butterfly
- clos
- fat tree
- 不规则拓扑
路由
路由算法种类
确定性路由(Deterministic Routing)
- 特点:路径选择仅依赖源目地址
- 典型算法:
- XY路由(2D-Mesh)
- 维度序路由(DOR)
- 优势:无死锁、实现简单
- 缺点:负载不均衡
无关路由(Oblivious Routing)
- 特点:路径随机选择,不感知网络状态
- 典型实现:
- Valiant’s随机路由
- ROMM(随机最小路由)
- 适用场景:容错需求高的系统
自适应性路由(Adaptive Routing)
- 特点:根据网络状态动态选择路径
- 高级算法:
- Duato协议(虚拟通道+逃生通道)
- DBAR(动态缓冲分配路由)
- 优势:负载均衡、高吞吐量
设计考量
死锁避免机制
- 通道依赖图(CDG)分析
- 虚拟通道分区技术
- 转向限制(如West-First策略)
服务质量(QoS)支持
- 优先级通道划分
- 延迟敏感型数据优先路由
实现复杂度
- 路由计算单元(RCU)面积开销
- 流水线深度影响(典型3-5级)
性能对比
算法类型 | 吞吐量 | 路径多样性 | 硬件开销 | 典型延迟 |
---|---|---|---|---|
确定性路由 | 低 | 无 | 低 | 30-50ns |
无关路由 | 中 | 随机 | 中 | 40-60ns |
自适应性路由 | 高 | 高 | 高 | 20-40ns |
流控制
消息、数据包、flit和phit
- 消息(Message):应用层逻辑单元(如缓存行请求)
- 数据包(Packet):包含路由信息的传输单元(头flit+体flit+尾flit)
- flit(Flow control digit):流控制基本单元(典型大小:128-256bit)
- phit(Physical unit):物理链路传输单元(与链路宽度相等)
层级关系:消息 → 拆分为多个包 → 包拆分为多个flit → flit拆分为多个phit
流控制机制
- 电路交换(Circuit-Switching)
- 级别:消息级
- 工作原理:建立专用物理通路后传输完整消息
- 特点:
- 高延迟(建立+拆除时间)
- 低链路利用率
- 适合长消息传输(如DMA操作)
- 存储转发(Store-and-Forward)
- 级别:数据包级
- 工作流程:完整接收数据包后才向下一跳转发
- 缺点:缓冲区需求大(需存完整包)
- 虚拟直通(Virtual Cut-Through)
- 级别:数据包级
- 改进原理:收到包头即开始转发,无需等待整个包
- 要求:下一跳节点必须保证有足够缓冲空间
- 优势:减少端到端延迟约30%
- 虫洞交换(Wormhole Switching)
- 级别:flit级
- 流水机制:头flit建立路径,后续flit流水跟进
- 关键特性:
- 缓冲区仅需存储少量flit
- 队头阻塞(HoL)可能造成性能抖动
- 适用场景:小数据包密集场景
- 虚拟通道流控(VC Flow Control)
- 层级:flit级
- 核心机制:多逻辑通道共享物理链路
- 管理策略:
- 静态VC:固定映射业务类型
- 动态VC:集中式分配器管理
- 优势:打破通道依赖,预防协议级死锁
无死锁流控制
- 时间线和虚拟通道划分
- 原理:将网络操作划分为时间片周期(典型5-10个周期)
- 实现:奇数周期使用VC1,偶数周期使用VC2
- 优势:天然打破资源依赖环
- 逃生虚拟通道
- 设计原则:为每个物理通道保留至少1个专用逃生VC
- 工作流程:
- 常规VC发生阻塞时启用逃生通道
- 采用确定性路由确保逃生路径无循环
- 案例:Duato协议使用2个VC(1个自适应+1个逃生)
- 气泡流控制
- 机制:在环形拓扑中保持至少1个空缓冲区(气泡)
缓冲区反压
- 基于 credit 的反压
- 实现原理:
- 接收方初始分配固定credit值(通常8-16)
- 每发送1 flit消耗1 credit
- 返回空credit包补充信用值
- 优势:精确控制流量,适合高带宽链路
- 开销:每个VC需要5-10%的额外带宽
- 基于开启/关闭信号的反压
- 工作方式:
- 接收方缓冲区达到阈值时发送STOP信号
- 空闲缓冲区超过阈值时发送GO信号
- 响应延迟:3-5 cycles
- 优点:实现简单,适合低功耗设计
流控机制性能对比
特性 | Credit-based | ON/OFF | 混合方案 |
---|---|---|---|
反压粒度 | flit级 | 通道级 | VC级 |
实现面积 | 高(12K gates) | 低(4K) | 中(8K) |
最大吞吐量 | 95% | 85% | 92% |
最佳适用场景 | HPC处理器 | IoT芯片 | 移动SoC |
时钟同步要求 | 严格 | 宽松 | 中等 |
多跳累计延迟 | 1.2ns/hop | 2.1ns | 1.5ns |
路由器微体系结构
虚拟通道路由器微体系结构
交叉开关
分配器和仲裁器
- 轮询(round-robin)仲裁器
- 矩阵仲裁器
- 分离式分配器
- 波前分配器
流水线
典型5级流水线工作流程:
- 缓冲区写入(BW)
- 功能:将到达的flit写入输入缓冲区
- 缓冲深度:4-8 flit/VC
- 写入策略:非阻塞式旁路写入
- 路由计算(RC)
- 关键操作:
- 解码头flit的目标地址
- 查询路由表确定输出端口
- 计算延迟:2-3 logic levels
- 虚拟通道分配(VA)
- 分配流程:
- 请求目标端口的可用VC资源
- 仲裁器执行最大匹配算法
- 并行度:支持4-8个并发请求
- 开关分配(SA)
- 仲裁机制:
- 输入VC ↔ 输出端口权重匹配
- 可配置优先级(QoS权重高达30%)
- 交叉开关传输(ST)
- 物理特性:
- 128bit并行传输
- 建立时间:0.3ns @7nm工艺
- 功耗:占总功耗的25-35%
- 链路传输(LT)
- 电气规范:
- 差分阻抗:100Ω ±10%
- 信号摆幅:200mVpp
- 重传机制:基于CRC32的错误检测
优化技术:
- 前瞻路由计算(lookahead routing):将RC阶段提前到缓冲区写入时
- 低负荷旁路(low-load bypassing):低负载时跳过仲裁阶段
- 基于推测的虚拟通道分配:动态合并空闲VC提升利用率