最近在研究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中找到有用的数据被称为命中,当Cach