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

news2024/10/6 12:29:44


请阅读【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.coloradmin.cn/o/1634226.html

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

相关文章

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及多重不确定性的虚拟电厂响应区间评估方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

mysql-sql-练习题-4-标记

标记 连续登录2-7天用户建表排名找规律 最大连胜次数建表只输出连胜结果输出所有连续结果 连续登录2-7天用户 建表 create table continuous_login(user_id1 integer comment 用户id,date_login date comment 登陆日期 ) comment 用户登录表;insert into continuous_login val…

【Java基础】Spring核心之控制反转(IOC)

1. 如何理解IOC 1.1 什么是IOC 在Spring框架中,IOC(Inversion of Control,控制反转)是一种设计原则,它是Spring框架的核心概念之一。IOC的基本思想是将程序的控制权从应用程序代码中转移到框架或容器中,从…

c#数据库: 4.修改学生成绩

将4年级的学生成绩全部修改为100分,。修改前的学生信息表如图所示: using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks;namespace StudentUpdate {internal class Program{s…

C++:运算符重载-加号(+)

在C中,运算符重载允许重新定义已有运算符的行为,以便让它们适用于自定义类型。这样,你可以通过自定义类型使用内置运算符,使得代码更加直观和易读。 此时我在代码中定义一个新类MyString: class MyString { public:i…

MySQL常见问题解决和自动化安装脚本

常见问题 MySQL密码正确但无法登录的情况 这种情况一般都是因为缓存,使用mysql -u root -p123456直到成功登陆为止,并且进入之后重新修改密码,多次重复修改密码的命令并且再一次清除缓存后退出。 ALTER USER rootlocalhost IDENTIFIED WIT…

Microsoft Threat Modeling Tool 使用(二)

主界面 翻译 详细描述 选择了 “SDL TM Knowledge Base (Core)” 模板并打开了一个新的威胁模型。这个界面主要用于绘制数据流图(Data Flow Diagram, DFD),它帮助您可视化系统的组成部分和它们之间的交互。以下是界面中各个部分的功能介绍&a…

CogAgent:开创性的VLM在GUI理解和自动化任务中的突破

尽管LLMs如ChatGPT在撰写电子邮件等任务上能够提供帮助,它们在理解和与GUIs交互方面存在挑战,这限制了它们在提高自动化水平方面的潜力。数字世界中的自主代理是许多现代人梦寐以求的理想助手。这些代理能够根据用户输入的任务描述自动完成如在线预订票务…

Bert基础(二十)--Bert实战:机器阅读理解任务

一、机器阅读理解任务 1.1 概念理解 机器阅读理解(Machine Reading Comprehension, MRC)就是给定一篇文章,以及基于文章的一个问题,让机器在阅读文章后对问题进行作答。 在机器阅读理解领域,模型的核心能力体现在对…

STM32使用PWM驱动直流电机

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. 直流电机和驱动简介 2. 驱动电路原理 3. 代码实现 3.1 PWM.c 3.2 PWM.h 3.3 MOTOR.c 3.4 MOTOR.h 3.5 main.c 3.6 完整工程文件 PWM和OC输出比较详解: STM32定时器的OC比较和PW…

LT6911GX HDMI2.1 至四端口 MIPI/LVDS,带音频 龙迅方案

1. 描述LT6911GX 是一款面向 VR / 显示应用的高性能 HDMI2.1 至 MIPI 或 LVDS 芯片。HDCP RX作为HDCP中继器的上游,可以与其他芯片的HDCP TX配合使用,实现中继器功能。对于 HDMI2.1 输入,LT6911GX 可配置为 3/4 通道。自适应均衡功能使其适合…

使用Github+Picgo+npm实现免费图床

本文参考自 Akilar,原文地址:https://akilar.top/posts/3e956346/ Picgo的配置 Github图床仓库内容不能超过1GB,因为Github原则上是反对仓库图床化的,超过1GB之后会由人工审核仓库内容,如果仓库被发现用来做图床&…

简要说说软分叉和硬分叉。

前言 一、软分叉 二、硬分叉 三、用途 总结 前言 软分叉和硬分叉是区块链技术中的两个重要概念,它们通常与加密货币的网络升级有关。下面我将分别解释这两个概念,并提供一些例子来帮助理解。下面是方便理解软分叉和硬分叉的图 一、软分叉 软分叉是一…

docker学习笔记4:CentOS7安装docker

文章目录 一、安装docker二、配置阿里云加速三、测试镜像安装本篇博客介绍如何在centos7里安装docker,关于CentOS7的安装可以查看本专栏的这篇博客: VmWare CentOS7安装与静态ip配置 centos7里安装docker步骤如下: 一、安装docker 先在终端输入su进入root用户,输入如下命…

Outlook大附件插件 有效解决附件大小限制问题

很多企业都是使用Outlook来进行邮件的收发,可是由于附件大小有限,导致很多大文件发不出去,就会产生Outlook大附件插件这种业务需求。 邮件系统在发送大文件时面临的限制问题主要如下: 1、附件大小限制:大多数邮件服务…

操作系统课程设计-人机交互的模拟操作系统

(一)课设板块 模块划分: (1)、进程管理模块 (2)、内存管理模块 (3)、文件管理模块 (4)、设备管理模块 (5)、界面管理模块…

Elasticsearch中【文档查询】DSL语句以及对应的Java实现

目录 全文检索查询 精准查询 布尔查询 排序、分页查询 高亮 地理查询 复合查询 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测…

C语言:项目实践(贪吃蛇)

前言: 相信大家都玩过贪吃蛇这款游戏吧,贪吃蛇是久负盛名的游戏,它也和俄罗斯方块,扫雷等游戏位列经典游戏的行列,那贪吃蛇到底是怎么实现的呢? 今天,我就用C语言带着大家一起来实现一下这款游戏…

Springboot+Vue项目-基于Java+MySQL的校园疫情防控系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

达梦(DM) SQL聚集函数及日期运算操作

达梦DM SQL聚集函数及日期运算操作 聚集函数MAX、MIN、SUM、AVG、COUNT使用分析函数 sum (…) over (order by…) 可以生成累计和更改累计和的值计算出现次数最多的值 日期运算加减日、月、年加减时、分、秒日期间隔之时、分、秒日期间隔之日、月、年求两个日期间的工作天数确定…