Cortex-A510——Cache

Cortex-A510——Cache

小狼@http://blog.csdn.net/xiaolangyangyang


1、Cortex-A510 Cache组织结构

        以cache-size为32k,cache-line为32Byte为例:

  • 组相连(常用结构):4-way,256-set
  • 直接映射:相当于1-way,1024-set的组相连
  • 全相连:相当于1024-way,1-set的组相连

2、组相连

        如果一个数据可以放在n个line,则称这个Cache是n路组相连的Cache(n-wayset-associativeCache),如下图所示为4-way,4-set的Cache。

组相连结构图

组相连映射图

  • offset:确定cache-line中数据位置,offset为图中Word+Byte
  • set:确定way中cache-line位置,即哪个组,如果数据被缓存,则V标志为1;
  • tag:确定cache中way的位置,如果数据被缓存,tag中保存有地址信息,与处理器地址进行比对;
  • V:cache-line有效标记;
  • D:脏数据标记。

组相连映射硬件逻辑图

3、VIVT/VIPT/PIPT

        VIVT(Virtual Index Virtual Tag):使用虚拟地址Index域和虚拟地址Tag域
        多个VA可能映射到同一PA,导致多个cache line组(VA不同,index域不同,查找到的cache 组则不同)映射到同一物理地址,这种现象叫做cache alias(高速缓存别名)。一旦一个VA到PA的映射关系改变,cache内容将会写回物理内存。此时,由于物理内存内容的变化需要同步到cache,就需要clean和invalidate(这两个操作结合起来就叫做flush)其余同名cache line,导致系统性能下降。
        VIPT(Virtual Index Physical Tag):使用虚拟地址Index域和物理地址Tag域
        如果index域位于地址的bit0~bit11(因为linux kernel以4KB(12bit位宽)大小为页面进行物理内存管理),就不会引起cache alias,否则还是会引起该问题。因为对于一个页面来说,虚拟地址和物理地址的低12bit是完全一样的,如果index域位于bit0~bit11,此时VIPT等价于PIPT。
        PIPT(Physical Index Physical Tag):使用物理地址Index域和物理地址Tag域
        就不会存在cache alias问题,但是结构更复杂。ARM Cortex-A系列处理器使用的是PIPT方式。

4、Cache硬件替换策略

        常用策略有:PLRUNRUFifo、Round-Robin

5、Cache一致性

        MESI协议:

  • M:这行数据有效,数据已被修改,和内存中的数据不一致,数据只存在于该高速缓存中
  • E:这行数据有效,数据和内存中数据一致,数据只存在于该高速缓存中
  • S:这行数据有效,数据和内存中数据一致,多个高速缓存有这行数据的副本
  • I:这行数据无效

6、Cache操作指令

7、Cache寄存器

8、提高Cache命中率

  • 优化数据访问模式,是得数据的访问更加局部化、减少Cache Miss的次数;
  • 合理配置Cache的大小和映射方式,以满足特定应用程序的需求;
  • 使用高效的替换算法,如LRU(Least Resently Used),以最大程度地保留对最近访问数据的缓存;
  • 避免频繁的写入操作,尽可能地延迟写操作以提高写入命中率。

9、疑问

  1. Cache的内部组织架构是怎么样的?能否画出一个cache的layout图?什么是set,way?
  2. 直接映射,全关联和组相联之间有什么区别?优缺点是啥?
  3. 重名问题是怎么发生的?
  4. 同名问题是怎么发生的?
  5. VIPT会不会发生重名问题?
  6. 什么是inner shareability 和outer shareability?怎么区分?
  7. 什么是PoU?什么是PoC?
  8. 什么是cache一致性?业界解决cache一致性都有哪些方法?
  9. MESI状态转换图,我看不懂。
  10. 什么cache伪共享?怎么发生的,如何避免?
  11. DMA和cache为啥会有cache一致性问题?
  12. 网卡通过DMA收数据和发数据,应该怎么操作cache?
  13. 对于self-modifying code,怎么保证data cache和指令cache的一致性问题?

Cache知识记录
Arm64 Cache
Linux内存管理:ARM64体系结构与编程之cache(3):cache一致性协议(MESI、MOESI)、cache伪共享

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

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

相关文章

supOS浅度集成

一、浅度集成介绍 浅度集成是根据项目或者演示要求而做的集成工作,通过接入supOS的单点登录,UI调整,菜单栏的集成,从而达到客户使用supOS平台来使用各个应用的能力。 二、浅度集成的作用 通过较少的研发投入使APP应用浅度融入到…

Chrome 报错: ERR_ACCESS_DENIED

ERR_ACCESS_DENIED - Search 在阅读了提供的 Chromium 代码搜索结果后,以下是关于 ERR_ACCESS_DENIED 错误的一些详尽笔记: 定义与值: ERR_ACCESS_DENIED 是一个错误代码,通常表示访问资源(非网络资源)的权…

“==“和 equals 方法究竟有什么区别?

操作符 操作符用于比较两个变量的值是否相等。在比较基本数据类型时, 比较的是它们的值是否相同。在比较引用类型时, 比较的是它们在内存中的地址是否相同,即两个引用是否指向同一个对象。 基本数据类型示例: int a 5; int b …

第3天:模型设计深入

第3天:模型设计深入 目标 设计数据模型,理解关系数据库设计原则。 任务概览 定义数据模型及其关系。编写模型字段。运行迁移命令makemigrations和migrate。 详细步骤 定义数据模型及其关系 数据模型是Django应用中的核心部分,用于定义…

uniapp 自定义页面顶部导航栏

效果图 1.移除原生导航栏 {"path": "pages/common/homePage/homePage","style": {"navigationBarTitleText": "","navigationStyle": "custom"} } 2.获取不同手机顶部自带 电量高度、信号、时间导航栏…

比较两个对象相同对象不同值

/** * param newValue 新值 * param oldValue 旧值 * return key 字段名 value 旧值 */ public static Map<String, Object> compare(Object newValue, Object oldValue, List<String> filterList) { Map<String, Object> compareMap new HashMap<>()…

课程设计——基于FPGA的交通红绿灯控制系统(源代码)

摘要&#xff1a; 本课程设计旨在设计一个基于FPGA&#xff08;现场可编程门阵列&#xff09;的交通红绿灯控制系统。该系统模拟了实际道路交叉口的红绿灯工作场景&#xff0c;通过硬件描述语言&#xff08;如Verilog或VHDL&#xff09;编写源代码实现。系统包含三个主要部分&a…

我又学会了使用Range实现网络文件下载的断点续传

文章目录 前言1、Range请求头1.1、概述1.2、使用限制1.3、范围请求1.4、预防资源变更 2、断点续传下载实现2.1、流程设计2.2、代码实现2.3、运行结果 3、RandomAccessFile4、思维拓展参考资料 前言 在某次摸鱼的过程中&#xff0c;老大突然后面冒出来说要做一个拉取文件到本地…

复位电路。

复位电路一般用到 电容电阻。 有的 是低电平复位&#xff0c;有的是高电平复位。 这里的电容的作用&#xff0c;上电自动复位。 参考&#xff1a; 此时 电容还能起到 抗干扰的作用。吸收 噪声。 电阻的作用&#xff0c;不是很理解&#xff0c;感觉是 在 上拉没有形成之前&am…

ninja构建笔记

在ninja构建系统中&#xff0c;“rule”和“build”这两个词通常关联但扮演着不同的角色。下面我会详细解释它们的区别&#xff1a; ### Rule (规则) 在构建系统中&#xff0c;“rule”通常指的是构建系统用来指导如何构建文件或者目标的指令集。它定义了一组转换输入到输出的…

数据库-单表查询-基本查询

查询数据表中指定字段的内容&#xff1a; SELECT 字段名 FROM 表名; 同时查询多个字段下的内容: SELECT 字段名1, 字段名2 FROM 表名; 查询数据表中的所有内容: SELECT * FROM 表名; 带IN关键字的查询: SELECT 字段名 FROM 表名 WHERE 字段名 IN (n1,n2,n3,...); IN关键字…

lora 继续训练

lora 继续训练 一般正常lora训练完模型后我们只保存其lora参数&#xff0c;然后与base模型进行合并。记录一下训练完保存lora后&#xff0c;继续再对lora训练的步骤。 base_model AutoModelForCausalLM.from_pretrained(base_model_id) base_model.enable_input_require_gra…

Multi-Head RAG:多头注意力的激活层作为嵌入进行文档检索

现有的RAG解决方案可能因为最相关的文档的嵌入可能在嵌入空间中相距很远&#xff0c;这样会导致检索过程变得复杂并且无效。为了解决这个问题&#xff0c;论文引入了多头RAG (MRAG)&#xff0c;这是一种利用Transformer的多头注意层的激活而不是解码器层作为获取多方面文档的新…

@Transactional实现原理及失效的三种情况

Transactional实现原理 Transactional是spring中定义的事务注解&#xff0c;在方法或类上加该注解开启事务。主要是通过反射获取当前对象的注解信息&#xff0c;利用AOP&#xff08;代理模式&#xff09;对编程式事务进行封装实现 // // Source code recreated from a .class f…

Win11版本21H2怎么升级为23H2?升级详细步骤在此!

在Win11电脑操作中&#xff0c;用户目前使用的版本是21H2&#xff0c;现在想体验23H2版本的先进功能&#xff0c;但不知道要怎么操作才能将系统版本升级为23H2&#xff1f;接下来小编给大家介绍详细的升级方法步骤&#xff0c;助力大家轻松完成系统版本升级操作。 方法一&#…

PostgreSQL源码分析——CHECKPOINT

checkpoint源码分析 因为检查点checkpoint相关的代码不是一篇文章就能分析完的&#xff0c;所以&#xff0c;相关的代码与逻辑可能会不连续&#xff0c;需要后续结合上下文理解。这里只列出了其中一部分。 其核心代码在&#xff1a;src/backend/postmaster/checkpointer.c以及…

05眼动识别软件详情2波形优化-滤波

对应视频链接点击直达 01项目点击下载&#xff0c;可直接运行&#xff08;含数据库&#xff09; 05眼动识别软件详情2 对应视频链接点击直达期望的数据展示数据波形对比如何实现几种常用滤波介绍维纳滤波巴特沃斯滤波器中值滤波排序滤波 推荐 结语其他以下是废话 原始数据的波…

CentOS 7.9上创建的JBOD阵列恢复(二)

系列文章目录 CentOS 7.9上创建JBOD&#xff08;一&#xff09; CentOS 7.9检测硬盘坏区、实物定位&#xff08;三&#xff09; 文章目录 系列文章目录前言一、用命令查看是否认到盘二、直接组JBOD三、挂载到新目录四、查看原数据总结 前言 在CentOS 7.9上创建了一个软阵列JB…

代码随想录算法训练营第四十二天| 1049. 最后一块石头的重量 II、 494. 目标和

LeetCode 1049. 最后一块石头的重量 II 题目链接&#xff1a;https://leetcode.cn/problems/last-stone-weight-ii/description/ 文章链接&#xff1a;https://programmercarl.com/1049.%E6%9C%80%E5%90%8E%E4%B8%80%E5%9D%97%E7%9F%B3%E5%A4%B4%E7%9A%84%E9%87%8D%E9%87%8FII…

SQL触发器基本结构

1. 修改分隔符的符号 delimiter $$ $$或者//都可以 2.创建触发器的名称 create trigger 函数名称 3. 什么样的操作会触发&#xff0c;操作的那个表 after&#xff1a;....之后触发 befor&#xff1a;....之前触发 insert&#xff1a;插入被触发 update&#xff1a;修改被触发 …