【ARM Cache 系列文章 11.2 -- ARM Cache 组相联映射】


请阅读【ARM Cache 系列文章专栏导读】


文章目录

    • Cache 组相联映射
      • 组相联映射原理
      • 多路组相连缓存的优势
      • 多路组相连缓存的代价
      • 关联度(Associativity)

上篇文章:【ARM Cache 系列文章 11.1 – ARM Cache 全相连 详细介绍】

Cache 组相联映射

ARM核心的主要缓存总是使用一组多路组相连缓存实现的。这显著降低了与直接映射缓存相比出现的缓存抖动(Cache Thrashing)的可能性,从而提高了程序执行速度并使执行更加具有确定性。这种缓存组织方式以增加硬件复杂性和因每个周期比较多个标签而略增加功耗为代价。

直接映射和全相联映射其实很好理解, 直接映射是找车方便,全相联映射是停车方便。而组相联映射正是直接映射和全相联映射的组合解决方案。如下图所示,为一个组相联映射的停车场示意图。组相联映射有setway的概念,我们先简单理解为set就是行,way就是列。

组相联映射的停车规则如下:
在这里插入图片描述
当2号车停在了set2+way1的位置,102号车按照规则必须停在set2,所以102号车可以停在way0、way2和way3中的任意位置。
在这里插入图片描述

不同于直接映射的停车场,同一个set中甚至可以把所有way都填满,才会发生驱逐现象。如下图所示,72号车会根据替换策略,随机选择一个way,将这个way上的车子驱逐出去,然后停进来。
在这里插入图片描述
当要找车时,2号车的车主,根据直接映射规则直接去set2里找,虽然他不知道车子在哪个way中,但是即使是最坏的情况,车主也只需比较4次(停车场的列数)即可发现自己的2号车在不在当前停车场(hit 或者miss)。
在这里插入图片描述

组相联映射原理

如下图所示,为一个组相联cache的结构,其中有三个概念需要理解:

  • way: 组相联cache 将cache分成几个大小相等的几片,每一片称为一个way,下图为一个 4-way的cache。
  • index:cache 的index其实就是cache line的行号。
  • set:index相同的cache line的集合称为一个set。比如way0、way1、way2和way3中index等于0的cache line称为set0。
  • 在这里插入图片描述
    上文组相联映射停车场示例中提到过,组相联映射实际上是直接映射与全相联映射的组合实现。也需要将一个地址分成如下三部分,其中地址的 index部分就是该地址在cache中所在的set 号。主存中index相同的地址将映射到同一个set(直接映射),但是一个set内有多个位于不同way的cache line,地址上的数据可以放入任意一个way中的cache line(全相联映射)。
    在这里插入图片描述
    如下图所示为一个2 way的cache结构。假设主存中地址 0x000x400x80的index都为0,按照组相联映射规则,0x000x400x80上的数据必须要存放在set0,但是可以在way0和way1中任意选择:
    在这里插入图片描述

多路组相连缓存的优势

  1. 降低缓存抖动:通过允许每个内存位置可以映射到多个位置而非单一位置,多路组相连缓存降低了多个热点数据争用同一缓存行的几率。
  2. 提高程序执行速度:减少缓存未命中的几率意味着处理器可以更快地访问数据和指令,从而加快了程序的执行速度。
  3. 更确定性的执行:缓存的行为更加可预测,有助于实现更加一致的性能,特别是在实时系统中非常重要。

多路组相连缓存的代价

  1. 硬件复杂性增加:实现多路组相连缓存需要更复杂的硬件逻辑来管理多个“路”的数据和标签的比较。
  2. 功耗略增:由于每个访问周期都需要比较多个标签,这增加了功耗。

关联度(Associativity)

  • 关联度指的是缓存中每个集合包含的行数。关联度高意味着每个内存地址有更多的缓存行可以映射到,从而降低冲突和提高缓存命中率。
  • L1、L2和L3缓存的关联度可能不同,通常更高层级的缓存(如L3)具有更高的关联度以优化性能和容量。

提高缓存的关联度可以降低抖动(Thrashing)的概率。理想情况下是全相连(Fully Associative)缓存,任何主存储器(Main Memory)位置都可以映射到缓存中的任何位置。然而,除了非常小的缓存之外(例如,与MMU的TLBs(Translation Lookaside Buffers)相关联的缓存),构建这样的缓存在实践中是不切实际的。

在实践中,当关联度超过8路时,性能提升是最小的,而16路关联度对于更大的L2缓存来说更加有用。这意味着,虽然增加缓存的关联度确实可以提高缓存效率和减少冲突的可能性,但关联度的增加并不总是带来线性的性能提升。达到一定的关联度后,继续增加关联度所带来的性能提升将变得较小,同时硬件成本、复杂性和功耗可能会显著增加。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

笔记1--Llama 3 超级课堂 | Llama3概述与演进历程

1、Llama 3概述 https://github.com/SmartFlowAI/Llama3-Tutorial.git 【Llama 3 五一超级课堂 | Llama3概述与演进历程】 2、Llama 3 改进点 【最新【大模型微调】大模型llama3技术全面解析 大模型应用部署 据说llama3不满足scaling law?】…

Deep learning Part Five RNN--24.4.29

接着上期,CBOW模型无法解决文章内容过长的单词预测的,那该如何解决呢? 除此之外,根据图中5-5的左图所示,在CBOW模型的中间层求单词向量的和,这时就会出现另一个问题的,那就是上下文的单词的顺序…

Redis Zset的底层原理

Redis Zset的底层原理 ZSet也就是SortedSet,其中每一个元素都需要指定一个score值和member值: 可以根据score值排序后member必须唯一可以根据member查询分数 因此,zset底层数据结构必须满足键值存储、键必须唯一、可排序这几个需求。之前学…

ZooKeeper知识点总结及分布式锁实现

最初接触ZooKeeper是之前的一个公司的微服务项目中,涉及到Dubbo和ZooKeeper,ZooKeeper作为微服务的注册和配置中心。好了,开始介绍ZooKeeper了。 目录 1.ZooKeeper的基本概念 2.ZooKeeper的节点(ZNode) 3. ZooKeep…

【Java笔记】第5章:函数

前言1. 函数的理解2. 函数的基本使用3. 函数的参数4. 函数的返回值5. 函数的执行机制6. 函数的递归调用结语 ↓ 上期回顾: 【Java笔记】第4章:深入学习循环结构 个人主页:C_GUIQU 归属专栏:【Java学习】 ↑ 前言 各位小伙伴大家好&#xff…

[随记]Mac安装Docker及运行开源Penpot

下载Docker Desktop for Mac:https://www.docker.com/products/docker-desktop/ 安装Docker Desktop for Mac,安装完成后,启动Docker,然后在终端输入: docker version 在Mac电脑的Desktop,随便创建一个文…

【真实体验】使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试【YashanDB迁移体验官】

一、前言 说一下我和崖山数据库的结缘,大概在去年吧,因为我经常在墨天轮写文章,看到崖山数据库推出了一崖山体验官的活动,我就报名参加了。第一次体验了崖山数据库,也测试了我司数据库到崖山数据库的兼容性&#xff0…

钉钉手机端调试前端H5项目流程

此流程以Vue项目为例 一、操作步骤 在根目录下 vue.config.js 文件中将 devServer.host 设置为 0.0.0.0 // vue.config.js module.exports {devServer: {host: 0.0.0.0,...},...}本地启动项目,获取 Network App running at:- Local: http://localhost:8080/ -…

JAVA 学习·泛型(二)——通配泛型

有关泛型的基本概念&#xff0c;参见我的前一篇博客 JAVA 学习泛型&#xff08;一&#xff09;。 协变性 泛型不具备协变性 在介绍通配泛型之前&#xff0c;先来看一下下面的例子。我们定义了一个泛型栈&#xff1a; import java.util.ArrayList; class GenericStack<E>…

全新TOF感知RGBD相机 | 高帧率+AI,探索3D感知新境界

海康机器人在近期的机器视觉新品发布会上推出的全新TOF感知RGBD相机,无疑是对当前机器视觉技术的一次革新。这款相机不仅融合了高帧率、轻松集成、体积小巧以及供电稳定等诸多优点,更重要的是,它将AI与3D感知技术完美结合,通过高帧率+AI算法,实现了对不同场景的快速捕捉与…

Android Studio报错:Constant expression required

【出现的问题】&#xff1a; 使用JDK17以上版本&#xff0c;switch语句报错&#xff1a;Constant expression required 【解决方法】&#xff1a; 在gradle.properties配置文件下添加代码&#xff1a; android.nonFinalResIdsfalse 如图&#xff1a; 接着再点击右上角的Sync…

asyncionetworkxFuncAnimation学习--动态显示计算图的运行情况

asyncio&networkx&FuncAnimation学习--动态显示计算图的运行情况 一.效果二.代码 一.目的 1.动态显示计算图的运行状态(点或边是否已完成) 二.步骤: 1.定义计算图 2.asyncio 并行计算 3.networkx 显示计算图 4.FuncAnimation 动态更新 三.依赖: conda install pygraphv…

Linux shell编程学习笔记48:touch命令

0 前言 touch是csdn技能树Linux基础练习题中最常见的一条命令&#xff0c;这次我们就来研究它的功能和用法。 1. touch命令的功能、格式和选项说明 我们可以使用命令 touch --help 来查看touch命令的帮助信息。 purpleEndurer bash ~ $ touch --help Usage: touch [OPTION]…

pyqt 按钮常用格式Qss设置

pyqt 按钮常用格式Qss设置 QSS介绍按钮常用的QSS设置效果代码 QSS介绍 Qt Style Sheets (QSS) 是 Qt 框架中用于定制应用程序界面样式的一种语言。它类似于网页开发中的 CSS&#xff08;Cascading Style Sheets&#xff09;&#xff0c;但专门为 Qt 应用程序设计。使用 QSS&am…

数据分析--客户价值分析RFM(分箱法/标准化)

原数据 原数据如果有异常或者缺失等情况&#xff0c;要先对数据进行处理 &#xff0c;再进行下面的操作&#xff0c;要不然会影响结果的正确性 一、根据RFM计算客户价值并对客户进行细分 1. 数据预处理 1.1 创建视图存储 R、F、M的最大最小值 创建视图存储R 、F、M 的最大最小…

力扣练习题(2024/5/2)

1填充每个节点的下一个右侧节点指针 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个…

C#知识|Dictionary泛型集合的使用总结

哈喽,你好,我是雷工! 以下是C#Dictionary泛型集合的学习笔记。 01 Dictionary泛型集合 1.1、Dictionary<K,V>通常称为字典, 1.2、其中<K,V>是自定义的,用来约束集合中元素类型。 1.3、在编译时检查类型约束, 1.4、无需装箱拆箱操作, 1.5、操作与哈希表(Ha…

C++ string类

目录 0.前言 1.为什么学习string类 1.1 C语言字符串的局限性 1.2 C string类的优势 2.标准库中的string类 2.1 字符串作为字符序列的类 2.2 接口与标准容器类似 2.3 基于模板的设计 2.4 编码和字符处理 3.string类的常用接口说明 3.1构造函数 3.1.1默认构造函数 3…

前端Web开发基础知识

HTML定义 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用于创建网页的标准标记语言。 什么是 HTML? HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言: HyperText Markup LanguageH…

ELK Stack 8 接入ElasticFlow

介绍 Netflow v5 / v9 / v10&#xff08;IPFIX&#xff09;&#xff0c;支持大部分网络厂商及VMware的分布式交换机。 NetFlow是一种数据交换方式。Netflow提供网络流量的会话级视图&#xff0c;记录下每个TCP/IP事务的信息。当汇集起来时&#xff0c;它更加易于管理和易读。…
最新文章