当前位置: 首页 > news >正文

多级缓存与局部性原理

参考文献

  • 《计算机组成与体系结构》-黑皮书,第六章 存储器
  • 系统架构设计师教程–第一章

局部性原理

  • Cache改善系统性能的依据
  • 使用少量速度非常快的存储器来加速对系统主要存储器的访问
  • 计算机程序都具有局部性特征

引用的局部性

  • 如果处理器在t时刻访问了存储单元X,那么在不久的将来访问存储单元X+1的可能性会非常高
  • 三种基本形式
    • 时间局部性
      • Temporal locality
      • 最近访问过的内容很可能在不久的将来再次访问
    • 空间局部性
      • Spatial locality
      • 对存储器地址空间的访问形成团簇的集中倾向
      • 例如:在数组或循环中操作
    • 顺序局部性
      • Sequential locality
      • 访问存取器的指令倾向于按顺序执行

一些术语

  • 字域
    • world field
    • 数据字的块内地址
  • 命中
    • hit
    • 请求的数据就驻留在指定访问的存储器层
  • 缺失
    • miss
    • 请求的数据不在要访问的存储层

高速缓存

  • 高速缓存存储器有时也会被称为按内容寻址的存储器(content addressable memory, CAM)
  • 主存和高速缓存都将按块划分
    • 若CPU在高速缓存未发现,会将该数据存放的块加载到高速缓存

高速缓存映射模式

  • 三种模式
直接映射的高速缓存
  • 如图,按顺序映射到高速存储器,块0和块10都映射到高速存储器的块0,它们将通过竞争来决定谁将霸占整个坑位

在这里插入图片描述

在这里插入图片描述

全关联高速缓存

在这里插入图片描述
在这里插入图片描述

  • 允许主存储器存放到高速缓存任意位置
  • 专用硬件,比较昂贵
组关联高速缓存

在这里插入图片描述
在这里插入图片描述

  • 上面两种方式的平衡,折衷方式

替换算法(淘汰算法)

  • 当Cache已存满,且Cache miss hit,新数据将淘汰某些旧数据

  • 三种

    • 随机算法
    • FIFO
    • LRU
      • Least Recently Used, LRU算法

写操作

  • 写直达
    • write through
    • 同时写回Cache和主存
  • 写回
    • write back
    • CPU修改Cache某一块,不直接写入主存,而是等Cache淘汰时写入主存
  • 标记法
    • 只需写入内存
    • 若标志位为"1",则从Cache中取,若为“0”,则从主存中取

提示

  • 内存与Cache之间的映射往往采用硬件完成,软件编程时,完全不用考虑Cache

相关文章:

  • NLP冻手之路(2)——文本数据集的下载与各种操作(Datasets)
  • 【Java】异常
  • 第22章 软件安装 RPM/ YUM
  • 手把手教你如何使用YOLOV5训练自己的数据集
  • 公众号网课搜题接口
  • 八、创建JWT工具类
  • 这家公司只有1个人,年赚一个亿
  • 【前端攻城师之JS基础】02JS对象基础
  • 【C/C++】程序环境,探索程序的执行过程(习得无上内功《易筋经》的第一步)
  • 计算机网络——基于UDP与TCP网络编程
  • 中兴设备18种命令模式总结大全,全网第一篇,强烈建议收藏!
  • 【学生管理系统】权限管理
  • NLP学习之:Bert 模型复现(1)任务分析 + 训练数据集构造
  • 【PTA】《数据结构与算法》线性结构复习题
  • Java利用工具类提升写报表效率
  • [LeetCode] Wiggle Sort
  • [Vue CLI 3] 配置解析之 css.extract
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【翻译】babel对TC39装饰器草案的实现
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • AHK 中 = 和 == 等比较运算符的用法
  • Android开源项目规范总结
  • ES10 特性的完整指南
  • golang中接口赋值与方法集
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Invalidate和postInvalidate的区别
  • JavaScript 奇技淫巧
  • JS专题之继承
  • KMP算法及优化
  • Laravel5.4 Queues队列学习
  • leetcode386. Lexicographical Numbers
  • leetcode388. Longest Absolute File Path
  • maven工程打包jar以及java jar命令的classpath使用
  • OSS Web直传 (文件图片)
  • PHP CLI应用的调试原理
  • PHP变量
  • scrapy学习之路4(itemloder的使用)
  • vuex 笔记整理
  • 七牛云假注销小指南
  • 前端性能优化——回流与重绘
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 数据结构java版之冒泡排序及优化
  • 微信公众号开发小记——5.python微信红包
  • 为视图添加丝滑的水波纹
  • 详解NodeJs流之一
  • C# - 为值类型重定义相等性
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 交换综合实验一
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #define与typedef区别