Cache 替换策略--PLRU算法详解

一、引言

       LRU(Least Recently Used)是 cache 的经典替换策略之一,但当  Cache 的路数比较大时(多路组相连结构),实现 LRU 的硬件开销就会变得很大。现代处理器一般会考虑使用 PLRU(pseudo-LRU)作为 Cache 的替换策略而不是 LRU。

       PLRU 是 LRU 的一种优化,本文要介绍的是PLRU中的 tree-PLRU(tree-based pseudo-LRU)。

二、PLRU算法原理

       若当前 Cache 为 n 路组相连结构,即一个 Cache Set 中有n个 Cacheline,则 tree-PLRU 会使用(n-1)位来表示近似访问历史顺序的二叉树。根据二叉树的特性,tree-PLRU 将这 n 个Cacheline划分成不同的区块,并用0/1表示区块的访问时间的远近。

        假设有一个4路组相连的 Cache,Cache 替换时会在一个 Cache Set 中的4条 Cache line 中选择一条进行替换,假设这四条 Cache line 编号分别为line_0~3,则 tree-PLRU 会使用 4-1=3bit 来构建二叉树来反映 Cache line 的历史访问顺序。

是
图2.1 Cache line替换选择情况示意图

        如上图所示,每1bit代表了二叉树的一个分支,假设1表示左侧比右侧最近被访问,0表示右侧比左侧最近被访问,判断最近访问行时,箭头指向是“左1右0”

        第0bit位=1,表示最近访问的是line_0或line_1;

        第0bit位=0,表示最近访问的是line_2或line_3;

        第1bit位=1,表示最近访问的是line_0;

        第1bit位=0,表示最近访问的是line_1;

        第2bit位=1,表示最近访问的是line_2;

        第2bit位=0,表示最近访问的是line_3;

        请注意,这里描述的是最近访问顺序。上图二叉树绘制的是替换选择情况,也即选择访问最少的Cache line,叶子节点表示要被替换的Cache line。

       假设 branch_bits = 3'b011,表示最近访问的是 line_0 或 line_1,并且访问的是 Line_0。line_2和 line_3 中最近访问的是 line_3。这样我们就能近似得到一个最近访问顺序了,也即最近访问了 line_0 和 line_3,但 line_1 和 line_2 的之间的访问顺序不确定。

三、PLRU替换过程举例

       假设state = 3'b000,tree-PLRU的初始状态图如下。

       用 state 绘制的二叉树和我们判断最近访问的 branch_bits 正好相反,因为 branch_bits 是判断最近访问的叶子节点,而二叉树反映的是需要剔除的叶子节点(很久未访问),因此正好相反。选择替换行时箭头指的方向是“左0右1”。此时 state=3’b000 表示需要替换的 Cache line 为 line_0,因此我们往 line_0 中填入 data_0。

       填入 data_0 之后,原本指向 line_0 的箭头,因为 line_0 被访问替换了,因此指向 line_1。同理,根节点原本指向左侧(近期访问 line_0 或 line_1)的,反过来指向右侧,表示接下来要去替换(line_2 或 line_3),此时 state = 3’b110。倘若此时来了一个 data_1,将替换 line_2,如下图所示。

       填入 data_1 之后,原本指向 line_2 的箭头,因为 line_2被访问替换了,因此指向 line_3。同理,根节点原本指向右侧(近期访问 line_2 或 line_3)的,反过来指向左侧,表示接下来要去替换(line_0 或 line_1),此时 state = 3’b011。倘若此时来了一个 data_2,将替换 line_1,如下图所示。

       填入 data_2 之后,原本指向 line_1 的箭头,因为 line_1 被访问替换了,因此指向 line_0。同理,根节点原本指向左侧(近期访问line_0 或 line_1)的,反过来指向左侧,表示接下来要去替换(line_2 或 line_3),此时 state = 3’b101。倘若此时来了一个 data_3,将替换 line_3,如下图所示。

       替换掉 line_3 之后,二叉树替换情况的最新 state=3’b000,回到了一开始的时候。由此我们可以发现,每发生一次 cache miss,从根节点到叶子节点路径上的箭头指向都要换向(从↙到↘或从↘到↙)。


       以上是一个4路组相连结构的 Cache 连续发生4次 Cache miss 的 Cache line 替换情况。倘若中途发生了 Cache hit 该如何处理呢?

       我们以上图情况的二叉树为例,倘若此时来了一个 load 访问请求命中了 line_0,那么从第二层到第三层叶子结点的箭头不用发生改变,但是从根节点到第二层节点的箭头需要发生转换。

       根节点的转换表示:由于 line_0 或 line_1 最近被访问了,接下来要去替换的是 line_2 或 line_3。这是 Cache hit 有别于 Cache miss 的点。

四、参考资料

1.people.computing.clemson.edu/~mark/464/p_lru.txt

2.Cache replacement policies(缓存替换策略)/ LRU 和 LFU等算法

3.Cache替换策略之tree-PLRU 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3270080.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Vue.js 2 项目实战(八):小黑记事本组件版

前言 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的设计初衷是通过采用简洁且强大的结构,使前端开发变得更简单和高效。以下是对 Vue.js 的详细介绍: 核心特性 声明式渲染 Vue.js 使用声明式语法来描述用户界面,通过数据绑…

用Swagger进行后端接口测试的实战操作

目录 一.什么是Swagger? 二.Swagger的使用操作流程: 1.在pom.xml配置文件导入 Knife4j 的依赖: 2.在config配置类中加入 Knife4j 的相关配置并设置静态资源映射(否则接口文档无法访问): 三.Swagger的四个…

xctf--debug

第一眼看着给我吓了一跳 我还以为是什么很牛逼壳 结果就是dnspy打开 这个函数什么ID都没有 只能一个一个点 但是逻辑真的很清晰 之前BUU写的题太复杂了,感觉可以看看这些题静下心 这个时候看着 攻防世界逆向高手题之debug_攻防世界debug-CSDN博客 这个博主的(我好多东西…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 亲子游戏(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

【轨物方案】电气设备数字档案解决方案

需求痛点 传统的电气设备铭牌只能显示固定的名称、日期、型号等信息,不能把与设备相关的其他重要信息展现出来,终端用户想要了解设备信息比较困难。尤其像项目资料类的文件查看,更是有很多不便之处,当设备出现问题后,找…

简要了解sql注入

sql注入安全测试中危害 数据库中的数据,对数据库数据进行操作(查询、删除等);网站的权限,找到注入点后可后门写入; sql注入产生原理详细分析 可控变量,带入数据库查询,变量未存在…

前后端打包部署 虚拟机jdk安装及配置环境变量 +安装nginx

mkdir deploy ll mkdir gateway auth system file 去idea打包 不要先打gateway 上传上去 出现这个问题是因为你jdk环境不一样 我的是17 所以我现在去官网下载一个 官网 :Java Downloads | Oracle 中国 mkdir software cd software/ wget https://download.oracl…

橙单前端项目下载编译遇到的问题与解决

今天下载orange-admin前端项目,不过下载下来运行也出现一些问题。 1、运行出现下面一堆错误,如下: 2、对于下面这个错误 error Expected linebreaks to be LF but found CRLF linebreak-style 这就是eslint的报错了,可能是原作者…

目标检测自顶向下入门

最近在学习Yolo和OpenCV这些计算机视觉的相关领域,把深度学习啃了个大概,准备着手学习一下Yolov5,趁着这个机会入门一下目标检测这个领域,也算是自顶向下地学习一遍吧。 目标检测 什么是目标检测 物体识别(Object de…

百川智能晋升200亿大模型独角兽

百川智能向创投日报记者确认,大模型创企百川智能已完成50亿元A轮融资;百川智能已成为国内第三家估值200亿元的大模型独角兽。 从包括百川智能在内的大模型创业企业的融资情况看,当前,选择出手大模型项目的资方出现从早期VC转向大…

如何穿透模糊,还原图片真实面貌

目录 图像清晰化的魔法棒:AI如何穿透模糊,还原图片真实面貌 前言 论文背景 论文思路 模型介绍 复现过程 演示视频 使用方式 本文所涉及所有资源均在传知代码平台可获取。 图像清晰化的魔法棒:AI如何穿透模糊,还原图片真实面貌 在我…

算法:[递归/搜索/回溯]二叉树的深搜

目录 题目一:计算布尔二叉树的值 题目二:求根节点到叶节点数字之和 题目三:二叉树剪枝 题目四:验证二叉搜索树 题目五:二叉搜索树中第k小的元素 题目六:二叉树的所有路径 题目一:计算布尔…

springboot整合 knife4j 接口文档

第一步&#xff1a;引入依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi2-spring-boot-starter</artifactId><version>4.4.0</version></dependency> 第二步&#xff1a;写入配置 方…

猫头虎分享 || 最全Python的Scapy库基础知识点汇总

&#x1f431;‍&#x1f464; 猫头虎分享 || Python的Scapy库基础知识点汇总 摘要 Scapy 是一个强大的Python库&#xff0c;用于网络数据包的生成、解析和操作。通过Scapy&#xff0c;开发者可以轻松地创建自定义数据包&#xff0c;捕获网络流量&#xff0c;并执行网络扫描。…

二叉树的链式结构和顺序结构的增删查改

树的概念 树是一种非线性的数据结构&#xff0c;它是一个n个节点组成的具有层次关系的集合&#xff0c;一棵树由一个根节点和若干个其余节点构成&#xff0c;除了根节点外&#xff0c;其他的节点都由一个前驱和多个后继&#xff0c;而根节点可以有多个后继&#xff0c;但没有前…

探索 Blockly:自定义积木实例

3.实例 3.1.基础块 无输入 , 无输出 3.1.1.json var textOneJson {"type": "sql_test_text_one","message0": " one ","colour": 30,"tooltip": 无输入 , 无输出 };javascriptGenerator.forBlock[sql_test_te…

没打印机怎么打印东西?

在日常生活中&#xff0c;我们经常会遇到需要打印文件的情况&#xff0c;无论是学习资料、工作文档&#xff0c;还是个人兴趣的资料收集。然而&#xff0c;并不是每个人家里都有打印机&#xff0c;或者打印机出现了故障。在这种情况下&#xff0c;寻找一个高效、经济的打印途径…

通过 C# 写入数据到Excel表格

Excel 是一款广泛应用于数据处理、分析和报告制作的电子表格软件。在商业、学术和日常生活中&#xff0c;Excel 的使用极为普遍。本文将详细介绍如何使用免费.NET库将数据写入到 Excel 中&#xff0c;包括文本、数值、数组、和DataTable数据的输入。 文章目录 C# 在Excel单元格…

Spring AOP(概念、实战、原理)

文章目录 1. 什么是AOP2. AOP体系图3. 术语解释3.1 Aspect&#xff08;切面&#xff09;3.2 Join point&#xff08;连接点&#xff09;3.3 Advice&#xff08;通知&#xff09;3.4 Pointcut&#xff08;切入点&#xff09;3.5 Target&#xff08;目标&#xff09;3.6 Proxy&am…

文本解码原理--MindNLP

前言 根据前文预测下一个单词 一个文本序列的概率分布可以分解为每个词基于其上文的条件概率的乘积 Greedy search 在每个时间步&#x1d461;都简单地选择概率最高的词作为当前输出词: &#x1d464;&#x1d461;&#x1d44e;&#x1d45f;&#x1d454;&#x1d45a;&am…