片上网络NoC(7)——流控制

2024-02-17 12:20
文章标签 网络 片上 流控制 noc

本文主要是介绍片上网络NoC(7)——流控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、概述

二、消息、数据包、flit和 phit

三、基于消息的流控制

四、基于数据包的流控制

4.1 存储转发流控制

4.2 虚拟直通流控制

五、基于flit的流控制

六、虚拟通道流控制


一、概述

        流控制(flow control)负责管理网络缓冲区和链路的分配。它决定何时为消息分配相应的缓冲区和链路资源,以及分配资源的粒度,另外还决定如何在许多消息之间共享这些网络资源。良好的流控制协议可以在不增大资源分配开销的同时,降低小负载情况下的信息传输延迟,并通过实现消息对缓冲区和链路的有效共享来提高网络吞吐量。借助流控制,我们可以确定数据包访问缓冲区(或完全跳过缓冲区访问)和在链路中传输的频率,进而确定网络的能量和功率消耗。实现流控制协议所需要考虑的复杂因素包括:路由器微体系结构的设计及在路由器之间传输资源信息所需的布线开销。

二、消息、数据包、flit和 phit

        当一条消息被注入网络时,它首先被分段成数据包(packet),然后每个数据包再被分成固定长度的flit(flit 是flow control unit 的缩写,为流控制中最小粒度数据单元)。例如,在多核芯片中,拥有某个数据的共享节点会向请求节点发送一个长度为128字节的缓存行,此缓存行将以消息的形式注入网络。如果128字节小于数据包的长度上限,则整个消息将被编码为单个数据包。数据包由包含目的节点地址的头flit(head flit)、包含数据主体的体flit(body flit),以及指示数据包结束的尾flit(tail flit)组成。flit 可以进一步分解为 phit(phit 是 physical transfer unit 的缩写,其为物理传输最小粒度数据单元)。phit 是对应于物理通道宽度的物理单位。

        消息是网络层面通信逻辑上的基本单位,数据包是网络层面通信物理上的基本单元。由于片上布线资源丰富,片上网络的通道往往采用较大的数据位宽,因此消息可能由单个数据包组成。在片外网络中,通道位宽受引脚位宽的限制,这种限制导致它被分解成更小块,称为phit。迄今为止,在片上网络中,由于片上通道较宽,flit都由单个phit 组成,并且作为消息的最小细分单位。
        流控制技术是根据资源分配的粒度来进行分类的。我们接下来将分别讨论以消息、数据包和flit进行操作的技术。

三、基于消息的流控制

        电路交换是一种在消息级进行控制的技术。电路交换将多跳所需要的资源(链路)预分配给整个消息。一个探测(probe)消息(也称为建立消息)将被发送到网络中,并预留从源节点向目的节点传输数据包所需的所有链路,这些链路将用于传输整个消息(或多个消息)。一旦探测消息到达目的节点(即说明已成功分配必要的链路),目的节点就会向源节点发送确认消息。源节点接收到确认消息后,链路正式建立。以上称为链路的建立阶段。之后,源节点会发送实际待传输的消息,该消息可以快速地通过预先建立的链路在网络中进行传输。一旦消息完成传输后,相关链路资源将被释放。

        异步传输模式(ATM)使用虚拟通道连接,在发送数据之前,从源节点到目的节点的网络资源必须被预留(这一点和电路交换一样)。不同的是,ATM中数据是以数据包粒度而不是消息粒度通过网络进行传输的。

四、基于数据包的流控制

        电路交换将资源分配给消息,并跨多个网络节点进行分配。但是,这样的方案存在一些不足之处;接下来,我们看看以数据包为粒度的资源分配方案。基于数据包的流控制技术首先将消息分解成为数据包,然后在链路上交织传输这些数据包,从而提高链路利用率。与电路交互不同,以下技术均需要在每个节点设置缓冲区来存储在线数据包。

4.1 存储转发流控制

        在基于数据包的技术中,消息被分解成多个数据包,并且每个数据包由网络独立处理。在存储转发流控制中,每个节点在接收到整个数据包之后才会开始将数据包转发到下一个节点,这会导致每跳都造成较高的延迟。因而存储转发流控制技术往往不适合用于对延迟又严格要求的片上网络。此外,存储转发流控制要求每个路由器都有足够大小的缓存区来暂存整个数据包,这对缓存区大小有较高的要求,使得该技术并不似乎用于片上网络。

4.2 虚拟直通流控制

        为了降低数据包在每跳处的等待延迟,虚拟直通流控制允许当前节点在接收到整个数据包之前就开始向下一个节点传输。通过这种方式,数据包经历的延迟相对于存储转发流控制将大大降低。但是,带宽和存储仍然以数据包大小为单位进行分配。只有当下游路由器有足够的缓存区空间来保存整个数据包时,数据包才会向下一个节点移动。当数据包较大时(如64字节或128字节大小的缓存行数据),面积和功耗受限的片上网络将难以提供虚拟直通流控制所需的缓冲区空间。

五、基于flit的流控制

        基于数据包的流控制技术需要大量的存储空间。为了降低对存储空间的需要,基于flit的流控制技术被提出。较低的缓冲区容量要求有助于路由器满足芯片上的面积或功率限制。

        与虚拟直通流控制一样,虫洞流控制将数据划分成不同的flit,允许当前节点在接收到整个数据包之前就将部分flit发往下游节点。对于虫洞流控制,一旦下游节点有可以容纳flit大小的缓冲区空闲,当前节点中的 flit 就可以离开缓冲区并向下游节点传输。但是,与存储转发流控制和虚拟直通流控制不同,虫洞流控制按flit分配存储和带宽,而不是按整个数据包分配存储和带宽,这允许在每个路由器中使用相对较小的flit缓冲区,即使对于大数据包也是如此。需要注意的是,虽然虫洞流控制可以有效地使用缓冲区,但它无法有效利用链路带宽。虽然虫洞流控制以 flit 为单位分配存储和带宽,但是路由器中的链路在整个数据包的传输期间将被占用。这导致当数据包被阻塞时,该数据包占用的所有物理链路仍然无法继续传输,即都处于闲置状态。因为虫洞流控制在 flit 粒度上分配缓冲区,所以由多个 flit 组成的数据包可能跨越多个路由器,一旦发生数据包的阻塞,很多物理链路都将进入闲置状态。此时在被阻塞的数据包后面排队的其他数据包就无法使用闲置的物理链路,从而降低了网络的吞吐量 。

六、虚拟通道流控制

        虚拟通道技术首先被用于避免死锁,但同时也被用于缓解流控制中的队首阻塞(head-of-line blocking)并提高吞吐量。在上述所有的流控制技术中,每个输入端口都只有一个队列,因而都可能发生队首阻塞。队首阻塞:当输入端口只有一个队列时,队列中的数据包只能按照队列顺序一一处理,因此当队首的数据包被阻塞时,队列后续的所有数据包都会被阻塞。(当队首的数据包被阻塞时,即使路由器有能够被队列后续的数据包所利用的空闲资源,队列后续的数据包仍然会被阻塞。)

        本质上,每个虚拟通道(VC)都是路由器中的一个独立的队列。多个虚拟通道通过时分复用的方法共享两个路由器之间的物理链路了。通过赋予每个输入端口多个队列(虚拟通道),可以有效减少队首阻塞。虚拟通道以时钟周期为控制粒度,进行物理链路带宽的分配。当某个虚拟通道的数据包被阻塞时,其他数据包仍然可以通过其他的虚拟通道穿过物理链路。因此,虚拟通道提高了物理链路的利用率,并提高了整体网络的吞吐量。

这篇关于片上网络NoC(7)——流控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717741

相关文章

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

使用 GoPhish 和 DigitalOcean 进行网络钓鱼

配置环境 数字海洋VPS 我创建的丢弃物被分配了一个 IP 地址68.183.113.176 让我们登录VPS并安装邮件传递代理: ssh root@68.183.113.176apt-get install postfix 后缀配置中的点变量到我们在 DigitalOcean 中分配的 IP:mynetworks nano /etc/postfix/main.cf

Linux网络编程之循环服务器

1.介绍 Linux网络循环服务器是指逐个处理客户端的连接,处理完一个连接后再处理下一个连接,是一个串行处理的方式,比较适合时间服务器,DHCP服务器.对于TCP服务器来说,主要阻塞在accept函数,等待客户端的连接。而对于UDP服务器来说,主要阻塞在recv函数. 2.循环服务器模型 TCP循环服务器: 算法如下:          socket(...);

Linux网络编程之简单并发服务器

1.概念 与前面介绍的循环服务器不同,并发服务器对服务请求并发处理。而循环服务器只能够一个一个的处理客户端的请求,显然效率很低. 并发服务器通过建立多个子进程来实现对请求的并发处理,但是由于不清楚请求客户端的数目,因此很难确定子进程的数目。因此可以动态增加子进程与事先分配的子进程相结合的方法来实现并发服务器。 2. 算法流程 (1)TCP简单并发服务器:     服务器子进程1:

Android 扇形网络控件 - 无网络视图(动画)

前言 一般在APP没有网络的情况下,我们都会用一个无网络的提示图标,在提示方面为了统一app的情况,我们一般使用简单的提示图标,偶尔只需要改变一下图标的颜色就一举两得,而不需要让PS来换一次颜色。当然app有图标特殊要求的就另当别论了。 效果图 当你第一眼看到这样的图,二话不说直接让UI给你切一张图标来的快对吧,我其实开始也是这么想的,但是到了做的app越来越多的时候,你就会发现就算是用

poj 2391 Ombrophobic Bovines (网络流)

这是一道很经典的网络流的题目。首先我们考虑假如我们的时间为无穷大。我们吧每个点拆成2个点 i和i' .。虚拟源点s和汇点t。对于每个点建边(s,i, a[i])  (i‘,t,ib[i]) 。 其中a[i]为给点有多少牛,b[i]为容量。i和j连通 建边 (i,j',inf);如果最大流==所有牛的个数,就可能装下所有的牛。那么现在我们考虑时间。假设最大时间为T.那么如果i到j的的最短时间>T

加载网络图片显示大图

1.将图片的uri列表和下标传给ImagePagerActivity public void imageBrower(int position, ArrayList<String> urls2) {Intent intent = new Intent(this, ImagePagerActivity.class); intent.putExtra(ImagePagerActivity

ESP32使用按键配网并通过LED指示网络状态

前言 上面我们已经可以通过 ESPTOUCH 和 Airkiss 给模块配网,并且存储在 nvs 中,重启后仍然可以联网,只是这样仍然不能满足我们实际的应用,这次我们增加按键作为输入,LED作为输出,实现长按按键配网,并可以通过LED指示网络状态。 添加自己的组件 为了让程序结构更加清晰,所以我们在smart_config例程的基础上做了修改,在main文件夹里新建了main.c 、smar