Line Buffer概述

buffer在芯片物理上一般指的是SRAM,也可以指寄存器组。buffer的作用是用来在逻辑芯片上暂时存储数据,但不会是大量的数据。如果是大量数据一般会使用DRAM(典型的指DDR)作为存储芯片,用来存储大密度数据。line buffer可以理解为是存储数据结构为line方式的SRAM,主要用来存储二维行列数据中的行数据,最典型例子的就是图像的一行像素。

目录

一、Line Buffer的实质

(1)缓冲过程

二、使用意义

(1)带宽要求

(2)带宽消耗对比举例


一、Line Buffer的实质

在经典计算机体系结构理论中,系统使用分层的存储器体系结构。越靠近cpu的存储器速度越快容量越小,单位容量的存储成本越高;反之则速度越慢容量越大,单位容量的存储成本越低。概括来说,line buffer就是存储器体系结构中处于寄存器和DRAM之间的缓存(cache)。line buffer与CPU的cahce作用在很大程度上是相似的,就是为了充分利用SRAM和DRAM各自的优点,尤其是在利用数据的局部性原理上是一致的。尤其是在图像信号处理(ISP)领域,图像处理的数据局部性更确定,局部性更高,所以line buffer非常适合在处理过程中来缓存数据。

在图像处理IP中,数据的访问一般非常有规律性,大部分情况下都是行扫描方式处理,不需要像cache那样的复杂数据结构。在CPU体系结构里,cache为寄存器缓存了数据,DDR为cache缓存了数据。而在图像处理IP里,line buffer为寄存器缓存了像素,DDR为line buffer缓存了像素。

再更进一步,在CPU体系结构里,存储系统是由逻辑电路和操作系统共同管理的;而在图像信号处理IP里,存储系统是由逻辑电路和驱动软件共同管理的,例如图像的内存分配交换等过程。

我们都知道buffer在逻辑设计中无处不在,buffer的主要作用是缓冲连接的两端的速度变化,而line buffer也可以起到缓冲的作用。

(1)缓冲过程

仍旧拿ISP举例,假设有master和slave两个模块,master模块处理像素的速度与slave模块处理的速度完全相同,而且是任意时刻的速度和长时间的吞吐量都相等,那么master和slave之间则只需要简单的起始、结束信号来进行握手,就可以完成数据的交互。

假设master和slave两个模块之间一段时间数据吞吐量是一致的,但是某时刻master和slave模块的处理速度不相同,此时就需要一个FIFO来处理这些速度的不同,否则的话slave会时常拿不到master的数据或者master吐出的速度过快而导致丢数据。FIFO可以平滑master模块的速度抖动,使得slave能不停止的运行且数据不被丢弃。当然前提是master的吞吐量小于slave,否则FIFO会出现数据溢出。

假设master是按照行扫描顺序进行运算的,最典型的是卷积运算。为了让master和slave模块对接,必须等待master计算完成N行后,才可以开始slave模块的第一个块的计算,也可以理解为速率匹配。这个时候就可以用line buffer将master和slave连接起来。总结来说,line buffer被用于匹配不同的运算顺序。

二、使用意义

buffer在芯片物理上一般指的是SRAM,也可以指寄存器组。buffer的作用是用来在逻辑芯片上暂时存储数据,但不会是大量的数据。如果是大量数据一般会使用DRAM(典型的指DDR)作为存储芯片,用来存储大密度数据。line buffer可以理解为是存储数据结构为line方式的SRAM,主要用来存储二维行列数据中的行数据,最典型例子的就是图像的一行像素。

(1)带宽要求

我们知道相比SRAM来说,DRAM会更加便宜,导致DRAM更加适合大数据存储。既然line buffer可以理解为是存储数据结构为line方式的SRAM,那么为什么还要使用line buffer呢?

根本原因是对带宽的要求而不是速度。DDR的带宽是有限的,而SRAM的带宽则近乎于无限。这样考虑下来,DDR的带宽成本会要远高于SRAM的带宽成本。

在SoC芯片周围能够摆放的DDR数量肯定是有限的,DDR的频率是有限的,DDR的数据位宽也是有限的,这些诸多因素加起来就意味着一个SoC系统的DDR带宽一定是受到限制的。并且在整个SoC系统中有大量模块抖需要访问DDR,而DDR的带宽是共享的,所以分配给某个模块的带宽就更加是有限的。

相比而言,SRAM的带宽则可以近乎无限。因为SRAM带宽是某个特定模块单独使用的,使用的时候为某个模块开一块buffer,在后续使用过程中只有这一个模块对这部分buffer进行读写。甚至于有需要的话,在该模块内的某个子模块,也会开一块单独的buffer来使用。可以依此类推再继续细分下去,一整个大块的buffer被划分为多个小块buffer。对于SRAM的操作,可以灵活的进行分配组织使用,以获取更高的数据位宽,即带宽。在现在的设计中合理利用line buffer等逻辑结构是非常重要的一环。

(2)带宽消耗对比举例

在图像信号处理中,往往需要对图像进行滤波降噪等处理,这个时候需要对图像进行开窗卷积运算。假设我们使用卷积核为3x3像素,可以对比一下使用和不使用line buffer时分别所使用的带宽:

设图像像素总数为n,讨论以下几种情况:

① 没有line buffer暂存像素数据,也没有寄存器暂存读入像素的情况:每次需要从DDR读3x3=9个像素到卷积计算单元中,然后计算过程才能开始。由于卷积在水平和垂直方向的滑动步长为1,总共需要读取的数据量为n*9,也就是9倍图像带宽。

② 没有line buffer暂存像素数据,但是有9个寄存器暂存读入像素的情况:此时卷积寄存器可以以滑动的方式向右移动(也就是滑窗的过程)。除去每行的开始第一次需要从DDR读取3x3=9个像素数据,之后就只需要读取右边一列3个像素,然后丢弃左边一列3个像素,如此循环直到结束,一行卷积运算完成读取了3行像素。因为没有line buffer可以暂存已经读入的像素,所以在进行下一行卷积时仍然需要从DDR读取3行像素。总共需要读取的数据量为n*3,所以总的带宽是图像像素的3倍,即3倍图像带宽。

③ 有一行line buffer可以暂存像素数据,还有9个寄存器暂存读入像素的情况:依旧是滑窗,但是line buffer可以将第N行像素行保存下来,当卷积到N+1行时,最上面的3个像素可以从这行line buffer中读出,而不再需要从DDR中读取,每次只需要从DDR中读取最右边一列的下面2个像素。总共需要读取的数据量为n*2,所以总的带宽是图像像素的2倍,即2倍图像带宽。

④ 有两行line buffer可以暂存像素数据,还还有9个寄存器暂存读入像素的情况:此时line buffer增加到两行,当卷积到N+1行时,最上面6个像素都可以从这两行line buffer中读出,并不需要从DDR中读取,每次只需要从DDR中读取3x3窗中最右下角的1个像素。总共需要读取的数据量为n,所以总的带宽是图像像素的1倍,即1倍图像带宽。

此时如果再增加line buffer到三行,则不再有意义,除非增大卷积核开窗大小。寄存器可以在水平方向节省卷积运算的DDR带宽,line buffer可以降低垂直方向卷积运算的DDR带宽。卷积核的高度决定了将DDR带宽降低到1倍图像带宽的line buffer行数,即N-1(N为卷积核高度)。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优化资源利用,用C++内存池点亮编程之路

内存池介绍(Memory Pool): 它是一种内存分配方式,通过预先分配和复用内存块。 在真正使用内存之前,先申请一大块内存备用。当有新的内存需求时,就从内存池中分出一部分内存块, 若内存块不够再继续申请新的内存。如果我们不需要…

环形链表(判断链表中是否有环)的讲解

一:题目 二:思路讲解 1:采用快慢指针的方法,一个fast指针一次移动两个节点,一个slow指针一次移动一个节点。 2:两个指针从头指针开始往后遍历,如果fast指针或者fast->next 有一个为空&…

5款可用于LLMs的爬虫工具/方案

5款可用于LLMs的爬虫工具/方案 Crawl4AI 功能: 提取语义标记的数据块为JSON格式,提供干净的HTML和Markdown文件。 用途: 适用于RAG(检索增强生成)、微调以及AI聊天机器人的开发。 特点: 高效数据提取,支持LLM格式,多U…

c++ 入门2

目录 五. 函数重载 1、参数类型不同 2、参数个数不同 3、参数类型顺序不同 C支持函数重载的原理--名字修饰(name Mangling) 为什么C支持函数重载,而C语言不支持函数重载呢? 六. 引用 6.1 概念 6.2 引用特性 6.3 常引用 6.4 使用场景 …

数据结构之排序(上)

片头 嗨,小伙伴们,大家好!我们今天来学习数据结构之排序(上),今天我们先讲一讲3个排序,分别是直接插入排序、冒泡排序以及希尔排序。 1. 排序的概念及其应用 1.1 排序的概念 排序&#xff1a…

图书馆APP开发解决方案

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 框架支持:springboot/Ssm/thinkphp/django/flask/express均支持 前端开发:vue.js 可选语言:pythonjavanode.jsphp均支持 运行软件…

百度云防护如何开启CC攻击防护

百度云防护的最重要的功能是可以CC攻击防护,针对CC攻击,百度云防护有被动的CC攻击拦截规则,也有主动自定义访问策略拦截。 今天百度云来教大家如何开启百度云防护的CC攻击防御功能。 1.进入防护模板功能-创建模板 2.开启CC攻击防御功能&…

李飞飞首次创业!

B站:啥都会一点的研究生公众号:啥都会一点的研究生 最近AI又有啥进展?一起看看吧~ 中国独角兽企业已达369家,六成以上与AI、芯片等硬科技赛道有关 2024中关村论坛“全球独角兽企业大会”上发布全新《中国独角兽企业发展报告&am…

探索互联网医院系统源码:开发在线药房小程序实战教学

今天,笔者将与大家一同深入探讨互联网医院系统的源码结构,并通过开发在线药房小程序的实战教学,为读者提供一种学习和理解这一领域的途径。 一、互联网医院系统源码解析 1.技术选型 互联网医院系统的开发离不开合适的技术选型,…

类和对象-Python-第二部分

师从黑马程序员 多态 抽象类(接口) #演示抽象类 class AC:def cool_wind(self):"""制冷"""passdef hot_wind(self):"""制热"""def swing_l_r(self):"""左右摆风""…

Cloudflare国内IP地址使用教程

Cloudflare国内IP地址使用教程 加速网站: 首先我们添加一个 A 记录解析,解析 IP 就是我们服务器真实 IP: 然后侧边栏 SSL/TLS - 自定义主机名: 回退源这里填写你刚刚解析的域名,保存后回退源状态为有效再来接下的操作…

第十二篇:数据库系统导论 - 探索数据管理的基石

数据库系统导论 - 探索数据管理的基石 1 引言 数据的力量:揭秘数据库系统的核心 在信息时代,数据无处不在,它们成为了企业和社会运作的基础。我们如何储存、检索、更新和维护这些数据,决定了我们能否从这些数据中获得力量。数据…

网络应用层

叠甲:以下文章主要是依靠我的实际编码学习中总结出来的经验之谈,求逻辑自洽,不能百分百保证正确,有错误、未定义、不合适的内容请尽情指出! 文章目录 1.使用协议和序列化1.1.自定义协议,自定义序列化1.2.自…

【网络】网络基础

目录 一、前言 1.计算机网络背景 2.认识协议 二、网络协议初识 1.OSI七层模型 2.TCP/IP五层(或四层)模型 3.网络传输基本流程 4.数据包封装和分用 5.网络中的地址管理 1.IP地址 2.MAC地址 一、前言 1.计算机网络背景 网络之前,我们所有在电脑上的操作都是…

Spring Boot数据映射利器:MapperStruct vs. BeanUtils.copyProperties 一较高下

Spring Boot数据映射利器:MapperStruct vs. BeanUtils.copyProperties 一较高下 在 Spring Boot 应用程序中,常常需要在不同的 Java 对象之间进行数据拷贝。这种拷贝操作在开发中非常常见,比如将 DTO(Data Transfer Object&#x…

5. 简单说一说uniapp中的语法吧

前言 如果你 知道Vue3并且对Vue3的语法有一定了解,请跳过这一章,由于后续项目主要是基于Vue3TypeScript,因此提前简单概述一些Vue3的基础语法~ 本文的目的是 期望通过对本文的阅读后能对Vue3的每个语法有一个简单的印象,至少要知…

二叉搜索数使用,底层原理及代码实现

1:二叉搜索树的定义 二叉搜索树的底层是一个二叉链表 二叉搜索树又称二叉排序树,它或者是一棵空树 ,或者是具有以下性质的二叉树 : 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所…

Redis-配置文件详解

Redis配置文件详解 units单位 配置大小单位,开头定义基本度量单位,只支持bytes,大小写不敏感。 INCLUDES Redis只有一个配置文件,如果多个人进行开发维护,那么就需要多个这样的配置文件,这时候多个配置 文…

docker安装向量数据库milvus

Miluvs Milvus 向量数据库能够帮助用户轻松应对海量非结构化数据(图片 / 视频 / 语音 / 文本)检索。 单节点 Milvus 可以在秒内完成十亿级的向量搜索,分布式架构亦能满足用户的水平扩展需求。 Milvus 向量数据库的应用场景包括:互联网娱乐(图片搜索 / 视频搜索)、新零售…

MATLAB基础—系统环境

1.MATLAB操作界面的组成 (1)MATLAB主窗口(红色) MATLAB主窗口是MATLAB的程序窗口,他除了嵌入一功能窗口外,主要包括功能区(1),快速访问工具栏(2),和当前文件夹工具栏(3)。 在功能区提供了三个选项卡&#…