目錄
- 前言
- 傳統意義上的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機制也弄得我有點暈。我在這里先貼一張計算機存儲層級的圖片:
其中,高速緩存就是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,它解決了總線接口的高速需求和讀寫硬盤的矛盾以及對某些扇區的反復讀取。
數據存儲策略
- Buffer存儲的是即將被處理或傳輸的數據。它通常是一個先進先出(FIFO)的隊列結構,數據按照到達的順序被存儲和取出。它的數據更新通常是由外部數據源驅動的。例如,當磁盤讀取數據時,數據被依次放入緩沖區,當數據被處理或傳輸完成后,緩沖區中的數據會被清空。
- Cache存儲的是主存儲器中數據的副本,通常是最近訪問或頻繁訪問的數據。緩存的大小有限,因此需要采用一定的策略來決定哪些數據應該被存儲在緩存中。常見的cache更新策略有:
(1)最近最少使用(LRU)算法:將最近最少使用的數據替換掉。
(2)先進先出(FIFO)算法:將最早進入緩存的數據替換掉。
(3)隨機替換算法:隨機選擇緩存中的數據進行替換。
二者對比
神經網絡加速器的buffer
在神經網絡加速器的論文中,我們經常看到各種片上buffer的設計,比如global buffer, weight buffer, input buffer, output buffer。它們的設計概念確實和傳統的buffer有所不同。傳統緩沖區(如操作系統或存儲系統中的Buffer)主要用于 臨時存儲數據以匹配速度差異 (如磁盤與內存之間的數據傳輸),而神經網絡加速器中的Buffer更注重數據復用、帶寬優化和計算流水線效率提升 。以下是具體分類和理解:
Input Buffer
- 功能 :存儲輸入特征圖(Feature Map)或激活值(Activations),供后續計算復用。
- 設計特點 :通過數據重排 (如Winograd算法中的輸入轉換)或分塊存儲 (Tiling)提高局部性,減少外部存儲訪問。在卷積計算中,輸入特征圖通常需要被多次復用(例如滑動窗口操作),Input Buffer可暫存這些數據以避免重復從外部DRAM讀取。
Weight Buffer
- 功能 :緩存神經網絡的權重參數(Weights),供計算單元快速訪問。
- 設計特點 :權重在推理過程中是靜態的(不隨輸入變化),因此可通過預加載 (Prefetching)到片上Buffer中減少外部訪存。對于低精度網絡(如二值化網絡),Weight Buffer可能設計為壓縮存儲格式以節省帶寬。
Output Buffer
- 功能:暫存卷積或全連接層的中間計算結果,最終輸出到下一層或外部存儲。
- 設計特點:在并行計算中,Output Buffer需支持多計算單元的結果聚合 (如多個PE的累加結果合并)。部分設計會結合流水線機制 ,在計算未完成時暫存中間結果。
與傳統buffer的核心區別
總結
神經網絡加速器的buffer其實和傳統的buffer也有點像,也能匹配計算單元(如PE陣列)和外部存儲(片外存儲)之間的速度。但是,考慮到數據復用,這些buffer內部的數據可能會多次讀寫,與計算單元綁定關系也很強,這些和傳統buffer不一樣。