当前位置: 首页 > news >正文

(六)Virtual-Channel Flow Control and Buffering


Chapter 6: Virtual-Channel Flow Control and Buffering

(本文版权归作者所有,任何形式的转载都请注明出处)

  1. 虚通道(Virtual Channel, VC)的作用类似于多车道,最显著的作用是避免死锁——比如请求和响应分作两路 VC,可以消除资源依赖的环路。常见做法有时分复用或扩展物理通道。其中,时分复用只需要扩展握手信号,Data 通道只留一条,即 1 Cycle 传递 1 包 flit。此外,Buffer 也需要复制多份;若为信用流控,Credit 计数器也要复制多份。

上述多 VC 的信用流控模型可以优化:Data 通路增加isHeadisTail标识,validupdate分别增加VCid标识,其中VCid位宽为 log₂N(N 为 VC 数量)。

  1. Buffer Sharing 优化:时分复用可能造成带宽利用率不足,即某些 VC 可能闲置,VC 数量越多,这种可能性越大。

    举例说明:若存在 VC0/VC1,每个 VC 拥有一个深度为 4 的 FIFO,则 VC0 + VC1 的整体 Buffer 资源数为 8。若 VC0 繁忙、VC1 长期空闲,则 VC1 的 4 深度 FIFO 长期浪费,VC0 只有 4 个资源可用。

对整体资源数 8 重新调配:VC0/VC1 各有深度为 2 的 Private FIFO,其余 4 个资源作为 Shared Buffer。此时,若 VC0 繁忙、VC1 长期空闲,VC0 可使用的 Buffer 资源为 6(2 Private + 4 Shared)。

  • Sender 侧:Credit 计数需要统计 Private 和 Shared,即当(creditCounter[i] > 0) OR (creditShared > 0)时,可以发送对应VC[i]的 flit。
  • Receiver 侧:接收 flit 后会先占用 Private,若 Private 满则占用 Shared;每有 VC 出队,flit 包按Input → Shared → Private → Output次序移动。

显然,Shared Buffer 需要保序,所以需要在 Buffer 内对每个 VC 的 flit 实现串链。Buffer 结构:

  • 每个 VC 记录头指针pH和尾指针pT,空指针为 NULL;
  • Buffer Memory 存储 flit 包,用Available表示 Buffer Entry 是否空闲;
  • Linked List 用于存储next_pointer

最小硬件开销方案:每个 VC 只拥有 1 个 Private 寄存器,所有 VC 共同共享一个 Shared 寄存器。即对于 N 个 VC 场景,只需N + 1个寄存器即可实现。每个 VC 拥有 1 个 Private 寄存器,即可在不插入额外延迟的前提下,若只有单个 VC 活跃,即可满足 100% 吞吐。当有 M 个 VC 活跃时,在未发生阻塞的前提下,每个 VC 可获得 1/M 的带宽。只有当某些 VC 发生阻塞时,Shared 寄存器才会被占用,而其余未阻塞 VC 的吞吐仍能保持 1/M。

  1. 若存在链路延迟(前向延迟Lf,后向延迟Lb):

  • Valid/Ready 流控:每个 Private FIFO 深度至少为Lf + Lb + 1才能保证不丢包;Shared FIFO 深度至少为Lf + Lb + 1保证单个 VC 的 100% 吞吐。若 Private FIFO 深度小于Lf + Lb + 1,当 Private FIFO 满时,就需要 Shared FIFO 有剩余空间才能拉高ready,此时引入了各 VC 之间的依赖,存在死锁风险

  • Credit 流控:每个 Private FIFO 深度为 1 即可保证不丢包;Shared FIFO 深度至少为Lf + Lb - 1保证单个 VC 的 100% 吞吐。


http://www.rkmt.cn/news/1528318.html

相关文章:

  • ML模型上线后监控实战:7类扼喉点与低成本落地方案
  • 在飞腾FT2000+上编译openEuler内核踩坑记:为什么make defconfig后系统起不来?
  • 2026年杭州老酒回收市场深度观察:诚信机构如何选择?价格、鉴定与案例全解析 - 优质品牌商家
  • 别再被Python的TypeError坑了!手把手教你排查‘indices’这类关键字参数错误
  • 2026年6月山东高考分数470到480的民办二本推荐,民办高校金属材料专业/民办二本朝鲜语专业,民办二本哪家名气大 - 品牌推荐师
  • 告别环境配置焦虑:手把手教你用VSCode+CMake搞定K210开发环境(Windows版)
  • 2026年亲子家庭合影摄影哪家便宜,高性价比口碑好的服务商排名 - mypinpai
  • YOLO26姿态估计关键点检测 tensort部署加速
  • wps 灵犀-右键可直接使用-不用复制粘贴到ai网站了,但是速度有些慢,大家觉得呢?
  • 告别手动折腾:用Ansible一键自动化部署Ubuntu 20.04/22.04的NVIDIA驱动和CUDA
  • PyCharm里写pywin32代码没提示?手把手教你配置开发环境与查阅官方文档(以Excel自动化为例)
  • 线性代数是数据科学的底层操作系统:从内存布局到GPU核函数
  • K8s Pod间文件同步延迟?别急着改代码,先试试这个NFS挂载参数(lookupcache=positive)
  • CRF序列标注实战:解决标签不一致与转移约束问题
  • VMvare 安装 Linux CentOS 7
  • 别再手动敲命令了!用Ansible Playbook一键自动化部署Zabbix 6.0到CentOS 8
  • 从‘场图异常’到‘优化失败’:HFSS仿真结果背后的那些‘坑’与正确设置姿势
  • 从WinError 10061到成功安装:一份给Python开发者的网络避坑与加速指南
  • 2026半导体洁净室FFU技术应用与选型参考 - 品牌排行榜
  • 拆解项目管理阶段的核心功能,解决各项目管理阶段的执行与协同难题
  • 红米K50 Ultra秒变‘孤岛’?手把手教你排查小米妙享中心连接失败的三大隐藏坑
  • SAP物料账差异分摊翻车?CKMLCP跑完后余额不为零的5种常见场景与排查手册
  • MPLAB Harmony 3实战:整合EtherCAT协议栈与电机控制代码的避坑指南
  • Parquet过滤四层穿透机制与生产级优化实践
  • Rust内存模型入门:所有权、借用与生命周期三权分立
  • NETDMIS5.0脱机编程避坑指南:从硬件配置到虚拟找正的5个常见错误
  • 新手避坑指南:在Linux虚拟机下用Verilog设计计数器,从仿真到版图你可能会遇到的10个问题
  • 避坑指南:STM32读写AT24C64 EEPROM常遇到的三个问题(时序、WP引脚、0xFF数据)及解决方法
  • 深度解析微信好友关系检测工具架构演进:从模拟协议到Hook技术的3大突破
  • Attention本质是软k近邻搜索:原理、验证与工程应用