见多识广4:Buffer与Cache,神经网络加速器的Buffer

目录

  • 前言
  • 传统意义上的Buffer与Cache
    • 一言以蔽之
    • 定义与主要功能
      • Buffer
      • Cache
    • 数据存储策略
    • 二者对比
  • 神经网络加速器的buffer
    • Input Buffer
    • Weight Buffer
    • Output Buffer
    • 与传统buffer的核心区别
    • 总结

前言

知识主要由Qwen和Kimi提供,我主要做笔记。
参考文献:
https://zhuanlan.zhihu.com/p/563185831
https://blog.csdn.net/bay_Tong/article/details/108737980
写这篇笔记是因为我在神经网络加速器里面老是看到各种buffer设计,而它和传统的buffer似乎又不一样。另外,一些cache机制也弄得我有点晕。我在这里先贴一张计算机存储层级的图片:
引用地址:https://blog.csdn.net/bay_Tong/article/details/108737980
其中,高速缓存就是cache,而buffer则是在主存(也就是内存)中间开辟的一小块儿存储单元。

传统意义上的Buffer与Cache

一言以蔽之

Buffer是内存中的一块区域,可以暂存数据,匹配不同设备的速度差异,减少数据在CPU和磁盘间的读取次数。
Cache是内存和CPU寄存器之间的一块高速缓存,用来加快CPU的数据读取速度。

定义与主要功能

Buffer

缓冲区(buffer)是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。
高速设备和低速设备的数据读取速度不匹配,这样会让高速设备花很长的时间等待低速设备,那么如果在两者之间建立一个缓冲区,会有以下好处:
(1)解决两者之间的制约关系,提高计算机的效率。比如,从CPU往磁盘中存储数据,可以让CPU存到buffer中,然后CPU就可以去做别的事情了。
(2)减少数据读写次数。如果每次数据只传输一点数据,就需要传送很多次,这样会浪费很多时间,因为开始读写与终止读写所需要的时间很长,如果将数据送往缓冲区,待缓冲区满后再进行传送会大大减少读写次数,这样就可以节省很多时间。另外,这也能够保护磁盘不轻易损坏。
Buffer分为三种类型:全缓冲,行缓冲,不带缓冲。

Cache

Cache主要用来解决CPU与内存读写速度不匹配的问题。由于CPU执行太快,内存读写速度跟不上,所以就设置了一个cache(它的读写速度和CPU几乎一样快),使得CPU需要的数据能被快速获取。
当计算机执行程序时,数据与地址管理部件会预测可能要用到的数据和指令,并将这些数据和指令预先从内存中读出送到Cache。一旦需要时,先检查Cache,若有就从Cache中读取,若无再访问内存,现在的CPU还有一级cache,二级cache。简单来说,Cache就是用来解决CPU与内存之间速度不匹配的问题,避免内存与辅助内存频繁存取数据,这样就提高了系统的执行效率。
磁盘也有cache,硬盘的cache作用就类似于CPU的cache,它解决了总线接口的高速需求和读写硬盘的矛盾以及对某些扇区的反复读取。

数据存储策略

  1. Buffer存储的是即将被处理或传输的数据。它通常是一个先进先出(FIFO)的队列结构,数据按照到达的顺序被存储和取出。它的数据更新通常是由外部数据源驱动的。例如,当磁盘读取数据时,数据被依次放入缓冲区,当数据被处理或传输完成后,缓冲区中的数据会被清空。
  2. Cache存储的是主存储器中数据的副本,通常是最近访问或频繁访问的数据。缓存的大小有限,因此需要采用一定的策略来决定哪些数据应该被存储在缓存中。常见的cache更新策略有:
    (1)最近最少使用(LRU)算法:将最近最少使用的数据替换掉。
    (2)先进先出(FIFO)算法:将最早进入缓存的数据替换掉。
    (3)随机替换算法:随机选择缓存中的数据进行替换。

二者对比

在这里插入图片描述

神经网络加速器的buffer

在神经网络加速器的论文中,我们经常看到各种片上buffer的设计,比如global buffer, weight buffer, input buffer, output buffer。它们的设计概念确实和传统的buffer有所不同。传统缓冲区(如操作系统或存储系统中的Buffer)主要用于 临时存储数据以匹配速度差异 (如磁盘与内存之间的数据传输),而神经网络加速器中的Buffer更注重数据复用、带宽优化和计算流水线效率提升 。以下是具体分类和理解:

Input Buffer

  1. 功能 :存储输入特征图(Feature Map)或激活值(Activations),供后续计算复用。
  2. 设计特点 :通过数据重排 (如Winograd算法中的输入转换)或分块存储 (Tiling)提高局部性,减少外部存储访问。在卷积计算中,输入特征图通常需要被多次复用(例如滑动窗口操作),Input Buffer可暂存这些数据以避免重复从外部DRAM读取。

Weight Buffer

  1. 功能 :缓存神经网络的权重参数(Weights),供计算单元快速访问。
  2. 设计特点 :权重在推理过程中是静态的(不随输入变化),因此可通过预加载 (Prefetching)到片上Buffer中减少外部访存。对于低精度网络(如二值化网络),Weight Buffer可能设计为压缩存储格式以节省带宽。

Output Buffer

  1. 功能:暂存卷积或全连接层的中间计算结果,最终输出到下一层或外部存储。
  2. 设计特点:在并行计算中,Output Buffer需支持多计算单元的结果聚合 (如多个PE的累加结果合并)。部分设计会结合流水线机制 ,在计算未完成时暂存中间结果。

与传统buffer的核心区别

在这里插入图片描述

总结

神经网络加速器的buffer其实和传统的buffer也有点像,也能匹配计算单元(如PE阵列)和外部存储(片外存储)之间的速度。但是,考虑到数据复用,这些buffer内部的数据可能会多次读写,与计算单元绑定关系也很强,这些和传统buffer不一样。

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

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

相关文章

内存的位运算

示例:提取和设置标志位 假设我们有一个32位的整数,其中不同的位代表不同的标志。例如: 位0:是否开启日志(0表示关闭,1表示开启) 位1:是否启用调试模式(0表示禁用&#…

linux -shell原理与运用

1---shell的工作方式和功能 shell的工作方式: shell本身也是一个应用程序,存储在/bin 或者是/user/bin中 登录的时候 会根据/etc/passwd文件载入shell默认执行 shell启动后,就会显示命令提示符,等待用户输入命令 命令的逻辑: 首先会判断时内部命令还是外部命令,如果是内部…

js获取uniapp获取webview内容高度

js获取uniapp获取webview内容高度 在uni-app中&#xff0c;如果你想要获取webview的内容高度&#xff0c;可以使用uni-app提供的bindload事件来监听webview的加载&#xff0c;然后通过调用webview的invokeMethod方法来获取内容的高度。 以下是一个示例代码&#xff1a; <te…

Windows系统升级Nodejs版本

什么是nodejs Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境, 它让开发人员能够创建服务器 Web 应用、命令行工具和脚本。 NodeJs官网 网址&#xff1a;Node.js — 在任何地方运行 JavaScript 可以通过网址下载安装&#xff0c;通过官网可以看到现在最新版本为22…

Relay算子注册(在pytorch.py端调用)

1. Relay算子注册 (C层) (a) 算子属性注册 路径: src/relay/op/nn/nn.cc RELAY_REGISTER_OP("hardswish").set_num_inputs(1).add_argument("data", "Tensor", "Input tensor.").set_support_level(3).add_type_rel("Identity…

【JavaEE】网络原理之初识(1.0)

目录 ​编辑 局域网与广域网 IP地址和端口号 实现简单的服务器客户端交互 简单理解socket TCP和UDP的差别&#xff08;初识&#xff09; socket面对udp DatagramSocket API DatagramSocket 构造方法 DatagramSocket 方法&#xff1a; DatagramPacket API Data…

Redis数据结构ZipList,QuickList,SkipList

目录 1.ZipList 1.2.解析Entry&#xff1a; 1.3Encoding编码 1.4.ZipList连锁更新问题 2.QuickList SkipList跳表 RedisObject 五种数据类型 1.ZipList redis中的ZipList是一种紧凑的内存储存结构&#xff0c;主要可以节省内存空间储存小规模数据。是一种特殊的双端链表…

laravel 12 监听syslog消息,并将消息格式化后存入mongodb

在Laravel 12中实现监听Syslog消息并格式化存储到MongoDB&#xff0c;需结合日志通道配置、Syslog解析和MongoDB存储操作。以下是具体实现方案&#xff1a; 一、环境配置 安装MongoDB扩展包 执行以下命令安装必要的依赖&#xff1a; composer require jenssegers/mongodb ^4.0确…

【STM32项目实战】一文了解单片机的SPI驱动外设功能

前言&#xff1a;在前面我有文章介绍了关于单片机的SPI外设CUBEMX配置&#xff0c;但是要想使用好SPI这个外设我们还必须对其原理性的时序有一个详细的了解&#xff0c;所以这篇文章就补充一下SPI比较偏向底层的时序性的逻辑。 1&#xff0c;SPI简介 SPI是MCU最常见的对外通信…

【挖洞利器】GobyAwvs解放双手

【渗透测试工具】解放双手&Goby配合Awvs渗透测试利器\x0a通过Goby和Awvs 解放双手https://mp.weixin.qq.com/s/SquRK8C5cRpWmfGbIOqxoQ

LangChain4j(15)——RAG高级之跳过检索

之前的文章中&#xff0c;我们介绍了RAG的使用&#xff0c;但是&#xff0c;每次提问时&#xff0c;都会通过RAG进行检索。有时&#xff0c;检索是不必要执行的&#xff0c;比如&#xff0c;当用户只是说“你好”时。于是&#xff0c;我们需要有条件的跳过检索过程。 跳过决策…

【SDRS】面向多模态情感分析的情感感知解纠缠表征转移

abstract 多模态情感分析(MSA)旨在利用多模态的互补信息对用户生成的视频进行情感理解。现有的方法主要集中在设计复杂的特征融合策略来整合单独提取的多模态表示,忽略了与情感无关的信息的干扰。在本文中,我们提出将单模表征分解为情感特定特征和情感独立特征,并将前者融…

Sui 上线两周年,掀起增长「海啸」

两年前的 5 月 3 日&#xff0c;Sui 的主网正式发布&#xff0c;将在开发网和测试网上验证过的下一代技术承诺变为现实。这一新兴网络旨在优化现有区块链技术&#xff0c;结合高性能计算环境与安全性、可验证性及韧性。 随着 Sui 迎来两周年&#xff0c;这股浪潮已成长为「海啸…

深入理解 mapper-locations

mybatis-plus.mapper-locations: classpath*:/mapper/**/*.xml 是 MyBatis/MyBatis-Plus 在 Spring Boot 配置文件&#xff08;如 application.yml 或 application.properties&#xff09;中的一项关键配置&#xff0c;用于指定 MyBatis Mapper XML 文件的存放路径。以下是详细…

电容的作用

使用多个电容是从电容的实际等效模型去考虑的(也就是从SI&#xff0c;信号完整性方面&#xff09;。只考虑一个实际电容时&#xff0c;它的阻抗曲线是一个类似于倒三角形的形状&#xff0c;只在谐振频率点(与等效串联电感形成)处的阻抗最小。因此相当于只在这一个频率点处及附近…

移植的本质是什么

有断时间我就在想&#xff0c;为什么freertos&#xff0c;lvgl等等的移植都是把库文件放进来&#xff0c;直接点击编译&#xff0c;然后把bug都处理完成就移植成功了&#xff0c;为什么呢&#xff1f; 明明我一个函数都没调用&#xff0c;为什么会有一堆错误&#xff0c;莫名其…

广告场景下的检索平台技术

检索方向概述 数据检索领域技术选型大体分为SQL事务数据库、NoSQL数据库、分析型数据库三个类型。 SQL数据库的设计思路是采用关系模型组织数据&#xff0c;注重读写操作的一致性&#xff0c;注重数据的绝对安全。为了实现这一思路&#xff0c;SQL数据库往往会牺牲部分性能&…

高频PCB设计如何选择PCB层数?

以四层板为例&#xff0c;可以第一层和第二层画信号&#xff0c;作为信号层。 第三层可以走电源&#xff0c;然后第四层走GND 但是更可以第一层和第三层画信号。第二层可以走电源&#xff0c;然后第四层走GND 用中间的电源层以及地层可以起到屏蔽的作用&#xff0c;有效降低寄…

[Linux_69] 数据链路层 | Mac帧格式 | 局域网转发 | MTU MSS

目录 0.引入 1.以太网帧格式 2.重谈局域网转发的原理(基于协议) 小结 3.认识MTU 3.1MTU对IP协议的影响 3.2MTU对UDP协议的影响 3.3MTU对于TCP协议的影响 0.引入 在去年的这篇文章中&#xff0c;我们有对网络进行过一个概述[Linux#47][网络] 网络协议 | TCP/IP模型 | 以…

vue2 provide 后 inject 数据不是响应式的,不实时更新

今天用 provide 后&#xff0c;inject 获取数据时不是实时更新的&#xff0c;获取的不是更新后的值 祖父组件 <div style"text-align: left !important;"><button click"change">更改</button> </div>data() {return {name: ini…