关于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

你可能感兴趣的:(硬件,计算机组成原理)