Cache基本原理--以TC3xx为例(2)

2024-05-15 20:20

本文主要是介绍Cache基本原理--以TC3xx为例(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.概述

2. Cache映射模式

3.DCache的数据一致性

 4.小结


1.概述

上一篇Cache基本原理--以TC3xx为例(1)-CSDN博客,我们聊了Cache基本概念,接下来我们将继续聊Cache映射模式,DCache的数据一致性问题。

2. Cache映射模式

常见的Cache地址映射模式包括直接映射、组相联和全相联。

直接映射(Direct Mapping):在直接映射中,每个主存地址只能映射到Cache中的唯一一行。这意味着主存中不同块可能会填充到相同的Cache Line里。如下图:

组相联(Set Associative Mapping) :Cache被划分为多个Set,每个Set包含多个Way的Cache Line。主存地址被映射到某个Set,然后在该Set内进行查找。每个Set内的CacheLine数量通常是2的幂次方,例如2、4、8等。组相联映射通过减少冲突提高了缓存的性能。

上面有点晕不要慌,这里就不得不来点术语了。如下图所示:

Way -- 相当于Cache的一页,如上述示例,Cache就有2 Ways

Set -- 每个Way里的同一Cache Line组成Set

这里理解了,英飞凌描述的2-way set associative DCache是不是就手拿把攥了。

英飞凌每个CPU都有16K DCache,Cache Line为32Bytes,因此总共有512个Cache Line。那么针对memory地址就可以分为:

我们计算非Tag后的偏移2^14 = 16KB,这也与Cache Size刚好对上。 

全相联映射(Fully Associative Mapping): 主存地址可以映射到Cache中的任何一行,而不受限制于特定的组。这意味着任何Cache Line都可以存储任何主存地址的数据。全相联映射通常需要更多的硬件支持,如标记比较电路,但可以最大程度地减少冲突,提高缓存的命中率。

3.DCache的数据一致性

谈到DCache的数据一致性,就不得不先讨论Cache的写策略。

常见的Cache写策略分为Write-Through和Write-Back。

Write-Through :修改数据时,该修改会同时作用在Cache和Memory中,如下图:

Write-Back:修改数据时,会先发生在Cache里,Memory中的母本更新会等待一些时间:

以英飞凌TC3xx系列为例,我们来看它是如何出现数据一致性问题的(注意TC3xx是Write Back Cache)。

CPU0\1共享LMU0,CPU0和CPU1同时修改LMU0[3]的值 3->9、LMU0[2]的值 2 -> 8,我们可以看到LMU0里的值确实变为了9,但是思考一下,这时候CPU1去获取LMU0[3],应该是几?当然是Cache里面的3,这里数据就不一致了。紧接着由于CPU1中的Cache数据改变也反映到了LMU0中,此时可以发现,LMU0[3]变为了3,cpu0的修改出现了丢失了。因为Cache的更新至少得以Cache Line为单位。

那么,如何来避免这些问题呢?翻看TC3xx Aurix 内核手册,可以得到以下几种方式:

  • 使用cachea指令:cachea.wi将写策略强制更新为write-through;cachea.i重刷cache
  • 使用英飞凌提供的Non-cache地址,例如LMU使用0xB开头;

 4.小结

以上,我们简述了cache的基本原理,从软件工程师角度,了解Cache,知道Cache通常会带来什么好处,引起什么问题,这对我们在系统层级的性能优化是有巨大帮助的。

这篇关于Cache基本原理--以TC3xx为例(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992822

相关文章

防盗链的基本原理与实现

我的实现防盗链的做法,也是参考该位前辈的文章。基本原理就是就是一句话:通过判断request请求头的refer是否来源于本站。(当然请求头是来自于客户端的,是可伪造的,暂不在本文讨论范围内)。首先我们去了解下什么是HTTP Referer。简言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理

AI学习指南深度学习篇——带动量的随机梯度下降法的基本原理 引言 在深度学习中,优化算法被广泛应用于训练神经网络模型。随机梯度下降法(SGD)是最常用的优化算法之一,但单独使用SGD在收敛速度和稳定性方面存在一些问题。为了应对这些挑战,动量法应运而生。本文将详细介绍动量法的原理,包括动量的概念、指数加权移动平均、参数更新等内容,最后通过实际示例展示动量如何帮助SGD在参数更新过程中平稳地前进。

Zookeeper基本原理

1.什么是Zookeeper?         Zookeeper是一个开源的分布式协调服务器框架,由Apache软件基金会开发,专为分布式系统设计。它主要用于在分布式环境中管理和协调多个节点之间的配置信息、状态数据和元数据。         Zookeeper采用了观察者模式的设计理念,其核心职责是存储和管理集群中共享的数据,并为各个节点提供一致的数据视图。在Zookeeper中,客户端(如

Filter基本原理和使用

https://www.cnblogs.com/xdp-gacl/p/3948353.html 一、Filter简介   Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控

Matlab/Simulink和AMEsim联合仿真(以PSO-PID算法为例)

目录 安装软件和配置环境变量 Matlab/Simulink和AMEsim联合仿真详细流程 非常重要的一点 Simulink模型和AMEsim模型用S-Function建立连接 从AMEsim软件打开Matlab Matlab里的设置 Matlab的.m文件修改(对于PSO-PID算法) 运行程序 我印象中好像做过Matlab/Simulink和AMEsim联合仿真的分享似的

MATLAB中的矩阵在目标规划中的应用_以linprog为例

目标规划是一种数学规划方法,它允许在多个目标之间进行权衡,以找到最优解。 在MATLAB中,可以使用优化工具箱中的函数来求解目标规划问题。例如,`linprog` 函数可以用于求解线性规划问题,而 `fmincon` 函数可以用于求解有约束的非线性规划问题。对于多目标规划,可以使用 `fgoalattain` 函数来求解,该函数允许设置目标函数希望达到的目标值和权重。 在数学方程模型建立完成之

[项目][CMP][Thread Cache]详细讲解

目录 1.设计&结构2.申请内存3.释放内存4.框架 1.设计&结构 Thread Cache是哈希桶结构,每个桶是一个按桶位置映射大小的内存块对象的自由链表 每个线程都会有一个Thread Cache对象,这样每个线程在这里获取对象和释放对象时是无锁的 TLS – Thread Local Strorage Linux gcc下TLSWindows vs下TLS

[项目][CMP][Central Cache]详细讲解

目录 1.设计&结构2.申请内存3.释放内存4.框架 1.设计&结构 Central Cache也是一个哈希桶结构,它的哈希桶的映射关系跟Thread Cache是一样的不同的是它的每个哈希桶位置挂的是SpanList链表结构(带头双向循环链表),不过每个映射桶下面的span中的大内存块被按映射关系切成了一个个小内存块对象挂在span的自由链表中 8Byte映射位置下面挂的是

关于Java中Comparable和Comparator用于排序中的理解,以Comparable为例

在Java中,当一个对象实现了 `Comparable` 接口,这意味着该对象的类定义了一个自然的排序标准。`Comparable` 接口要求实现它的类必须实现 `compareTo` 方法,这个方法定义了对象之间的比较规则。 目录 一、为什么使用 `compareTo` 方法: 二、排序函数如何使用 `compareTo` 方法: 一、为什么使用 `compareTo`