見多識廣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.pswp.cn/diannao/81945.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81945.shtml
英文地址,請注明出處:http://en.pswp.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…