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.hqwc.cn/news/691827.html

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

相关文章

Linux开发--Linux内核开发移植

Linux内核开发移植 Linux内核版本变迁及其获得 Linux是最受欢迎的自由电脑操作系统内核, 是一个用C语言写成, 并且符合POSIX标准的类Unix操作系统 Linux是由芬兰黑客Linus Torvalds开发的, 目的是尝试在英特尔x86架构上提供自由免费的类Un…

英语复习之英语形近词总结(四)

英语形近词总结复习第四部分: 单词 释义例句 genuine 英 /ˈdʒenjuɪn/ 美 /ˈdʒenjuɪn/ adj.真实的,真正的;诚恳的 1.Only genuine refugees can apply for asylum. 只有真正的难民才能申请政治避难。 《牛津词典》 2.This isnt a genui…

牛客NC343 和大于等于K的最短子数组【困难 前缀和 Java/Go】

题目 题目链接: https://www.nowcoder.com/practice/3e1fd3d19fb0479d94652d49c7e1ead1 思路 本答案利用前缀和解答,Java,Go答案通过,但是同样的代码用PHP的话有一个测试用例超时 应该还有更优秀的答案,后面找到更优…

QT6 android程序界面强制横屏显示不旋转

QT6开发的Android程序有时候旋转后程序会变形,比如想让其固定位横屏显示,就需要进行特殊设置,本文提供一种简便的设置方法。 一.AndroidManifest.xml文件介绍 Android的Manifest.xml文件是一个重要的配置文件,用于描述应用程序的…

LINUX 精通 1——2.1.1 网络io与io多路复用select/poll/epoll

LINUX 精通 1 day12 20240509 算法刷题: 2道高精度 耗时 107min 课程补20240430 耗时:99 min day 13 20240512 耗时:200min 课程链接地址 前言 杂 工作5-10年 够用 费曼:不要直接抄,自己写;不要一个…

【计算机网络篇】数据链路层(10)在物理层扩展以太网

文章目录 🍔扩展站点与集线器之间的距离🛸扩展共享式以太网的覆盖范围和站点数量 🍔扩展站点与集线器之间的距离 🛸扩展共享式以太网的覆盖范围和站点数量 以太网集线器一般具有8~32个接口,如果要连接的站点数量超过了…

SpringBoot框架

💕喜欢的朋友可以关注一下,下次更新不迷路!💕(●◡●) 目录 一、为什么使用SpringBoot 简化依赖配置 简化配置类和Bean 简化部署 简化监控 二、Spring Boot开发环境搭建和项目启动 新建项目 配置maven 三、Spring Boot返…

RAG讲解

现有的LLM已经具备了理解、生成、逻辑和记忆能力,RAG(Retrieval Augmented Generation)则是为其套上外挂,使LLM能够访问训练数据来源之外的权威知识库,并生成领域特定的内容,而无须重新训练模型。 RAG的优势 经济高效&#xff1a…

【CMU 15-445】Proj4 Concurrency Control

Concurrency Control 通关记录Task1 TimestampsTask2 Storage Format and Sequential ScanTask3 MVCC ExecutorsTask3.1 Insert ExecutorTask3.2 CommitTask3.3 Update and Delete ExecutorTask3.4 Stop-the-world Garbage Collection Task4 Primary Key IndexTask4.0 Index Sc…

打印图案(金字塔)头歌作业

题目: 任务描述 本关任务:编写一个程序,输出堆叠式的金字塔图案。 输入n个字符,按以下原则输出:【参考样例】 1)第1个字符为一层金字塔图案,第2个字符为两层金字塔图案,第3个字符为三层金字塔图案&#x…

一文弄懂 Linux 系统调用函数之 exec 函数族

目录 简介函数原型参数说明返回值函数区别使用示例采用参数列表传递参数,以 execl 为例采用参数数组传递参数,以 execv 为例调用 PATH 下可执行文件,以 execlp 为例使用新的环境变量给新进程,以 execle 为例 更多内容 简介 exec …

每日OJ题_贪心算法四④_力扣397. 整数替换

目录 力扣397. 整数替换 解析代码 力扣397. 整数替换 397. 整数替换 难度 中等 给定一个正整数 n ,你可以做如下操作: 如果 n 是偶数,则用 n / 2替换 n 。如果 n 是奇数,则可以用 n 1或n - 1替换 n 。 返回 n 变为 1 所需…