关于DRAM、SRAM、cache、cpu、寄存器、主存之间的联系与区别
最近在研究openblas里面用到的gemm矩陣加速思想,涉及到很多cache緩存的問題,便有了這篇文章作為記錄
先一句話說明數據流的流通路徑:計算機的計算數據需要從磁盤調度到內存,然后再調度到L2 Cache,再到L1 Cache,最后進CPU寄存器進行計算。
一、DRAM(動態隨機存取存儲器)和SRAM(靜態隨機存取存儲器)
????DRAM只能將數據保持很短的時間。為了保持數據,DRAM使用電容存儲,所以必須隔一段時間刷新(預充電)一次,如果存儲單元沒有被刷新,存儲的信息就會丟失(關機就會丟失數據)。主要用于系統內存。
????SRAM是一種具有靜止存取功能的內存,不需要刷新電路即能保存它內部存儲的數據,速度快,但是集成度低。主要用于CPU與主存之間的高速緩存。
二、高速緩沖存儲器(Cache)
????Cache通常使用昂貴但較快速的SRAM技術(通常認為cache是靜態隨機存儲器)。在計算機存儲系統的層次結構中,介于cpu和主存儲器之間的高速小容量存儲器(主存屬于DRAM,比如pc上面的內存條,相對SRAM慢一些)。它和主存儲器一起構成一級的存儲器。高速緩沖存儲器和主存儲器之間信息的調度和傳送是由硬件自動進行的。高速緩沖存儲器最重要的技術指標是它的命中率。Cache作為主存局部區域的副本,用來存放當前活躍的程序和數據,它利用程序運行的局部性,把局部范圍的數據從主存復制到Cache中,使CPU直接高速從Cache中讀取程序和數據,從而解決CPU速度和主存速度不匹配的問題。
三、Cache替換算法
??? CPU在Cache中找到有用的數據被稱為命中,當Cache中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問內存。當出現未命中而高速存儲器對應列中沒有空的位置時,便淘汰該列中的某一組以騰出位置存放新調入的組,這稱為替換。為了保證CPU訪問時有較高的命中率,Cache中的內容應該按一定的算法替換。常用的替換算法有:最近最少使用法(LRU)、先進先出法(FIFO)和隨機法(RAND)等。
目前提出的算法可以分為以下三類(第一類是重點要掌握的):
(1)傳統替換算法及其直接演化,其代表算法有:①LRU(Least Recently Used)算法:將最近最少使用的內容替換出Cache;②LFU(Lease Frequently Used)算法:將訪問次數最少的內容替換出Cache;③如果Cache中所有內容都是同一天被緩存的,則將最大的文檔替換出Cache,否則按LRU算法進行替換。④FIFO(First In First Out):遵循先入先出原則,若當前Cache被填滿,則替換最早進入Cache的那個。
(2)基于緩存內容關鍵特征的替換算法,其代表算法有:①Size替換算法:將最大的內容替換出Cache②LRU— MIN替換算法:該算法力圖使被替換的文檔個數最少。設待緩存文檔的大小為S,對Cache中緩存的大小至少是S的文檔,根據LRU算法進行替換;如果沒有大小至少為S的對象,則從大小至少為S/2的文檔中按照LRU算法進行替換;③LRU—Threshold替換算法:和LRU算法一致,只是大小超過一定閾值的文檔不能被緩存;④Lowest Lacency First替換算法:將訪問延遲最小的文檔替換出Cache。
(3)基于代價的替換算法,該類算法使用一個代價函數對Cache中的對象進行評估,最后根據代價值的大小決定替換對象。其代表算法有:①Hybrid算法:算法對Cache中的每一個對象賦予一個效用函數,將效用最小的對象替換出Cache;②Lowest Relative Value算法:將效用值最低的對象替換出Cache;③Least Normalized Cost Replacement(LCNR)算法:該算法使用一個關于文檔訪問頻次、傳輸時間和大小的推理函數來確定替換文檔;④Bolot等人 提出了一種基于文檔傳輸時間代價、大小、和上次訪問時間的權重推理函數來確定文檔替換;⑤Size—Adjust LRU(SLRU)算法:對緩存的對象按代價與大小的比率進行排序,并選取比率最小的對象進行替換。
如果對主存訪問cache的過程感興趣的可以參考這篇文章:https://blog.csdn.net/williamgavin/article/details/78600230
總結
以上是生活随笔為你收集整理的关于DRAM、SRAM、cache、cpu、寄存器、主存之间的联系与区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux系统上传代码到gitlab服务
- 下一篇: arm汇编解析—qnnpack卷积实现