最近在研究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、寄存器、主存之间的联系与区别相关推荐

  1. 理解CPU/寄存器/内存之间的关系

    CPU/寄存器/内存 因为要了解多线程,自然少不了一些硬件知识的科普,我没有系统学习过硬件知识,仅仅是从书上以及网络上看来的,如果有错误请指出来. CPU,全名Central Processing U ...

  2. 如何提高cpu和主存之间的数据交换速率

    cache存储器是为了解决cpu与内存之间速度不匹配的问题. Cache存储器,电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM之间,规模较小,但速度很高的存储器,通常由SRAM组成.它是位于C ...

  3. 理解CPU/寄存器/内存三者关系

    CPU/寄存器/内存 CPU,全名Central Processing Unit(中央处理器).这是一块超大规模的集成电路,包含上亿的晶体管,是一台计算机的运算核心(Core)和控制核心(Contro ...

  4. CPU/寄存器/内存

    因为要了解多线程,自然少不了一些硬件知识的科普,我没有系统学习过硬件知识,仅仅是从书上以及网络上看来的,如果有错误请指出来. CPU,全名Central Processing Unit(中央处理器). ...

  5. linux系统堆、栈及内存分配、CPU寄存器

    堆和栈: 栈主要用来存放局部变量, 传递参数, 存放函数的返回地址.esp 始终指向栈顶, 栈中的数据越多, esp的值越小. 堆用于存放动态分配的对象, 当你使用 malloc , new 等进行分 ...

  6. “Cache-主存”和“主存和辅存”的区别

    最近在学习的时候碰到了一个关于"Cache-主存"和"主存和辅存"的区别,平时学习都只是大概了解一下,但是具体的区别没有深入学习,所以这次既然碰到了就仔细了解一 ...

  7. CPU和cache之间,cache和主存之间,主存和辅存之间数据交换的单位分别是什么?

    计算机考研-408-知识点梳理 操作系统 & 组成原理 CPU和cache之间,cache和主存之间,主存和辅存之间数据交换的单位分别是什么? CPU和cache之间单位是"字&qu ...

  8. 【操作系统】计算机中内存、cache和寄存器之间的关系及区别

    1. 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC).在中央处理器的 ...

  9. 主存,cache ,寄存器

    寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC).在中央处理器的算术及 ...

最新文章

  1. 看完 50000 张专辑封面,AI 设计师开始疯狂输出
  2. 你的厨房被水淹了!别担心,这只是3D深度估计做出的特效
  3. 用T-SQL得到数据库的可视化结构
  4. mysql 查询表总行数字段_mysql中怎么查询表中的字段个数
  5. 怒卸python3.4.1
  6. Redis__WindowsServer主从服务部署及调用实例
  7. phpexcel删除行_使用PHPExcel删除行
  8. 矩量法 惠更斯 matlab,矩量法分析振子天线粗细对天线的影响毕业设计(论文).doc...
  9. Vue源码解析:虚拟dom比较原理
  10. SPSS统计功能与模块对照表
  11. Win10系统打开共享文件提示没有权限使用网络资源怎么处理?
  12. CentOS8使用network.service服务管理网络
  13. macos安装盘第三方工具制作_简单制作 Mac OS X USB 启动盘的方法教程
  14. 执念斩长河专栏线代概率--目录
  15. 农业纺织品市场现状研究分析与发展前景预测报告
  16. camera Intrinsic and Extrinsic
  17. 全网最通俗的条件随机场CRF
  18. Java回文数代码(初学者易懂)
  19. Java web项目目录介绍
  20. edx平台搭建(基于Ubuntu搭建edx)

热门文章

  1. lumen 分页_lumen 中实现分表
  2. SQL SERVER CLR Trigger功能
  3. 2018年第九届蓝桥杯 第五题:快速排序 (满分9分)
  4. dataframe 列名重新排序
  5. UVa 208 - Firetruck (回溯)
  6. win10系统下载-靠谱推荐
  7. 【数据结构作业—01】用单循环链表解决约瑟夫问题
  8. [Python爬虫] scrapy爬虫系列 一.安装及入门介绍
  9. 【数据结构与算法】之深入解析“两数相加II”的求解思路与算法示例
  10. LeetCode Algorithm 剑指 Offer 28. 对称的二叉树