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

目录

1.为什么要使用Cache

2.Memory与Cache如何映射

2.1 地址映射概设

3.小结


为什么要使用Cache?为什么在多核工程里要谨慎使用DCache?Cache里的数据、指令是如何与Memory映射?

灵魂三连后,软件工程师应该都会有模糊的回答:大概是为了运行更快,减小系统负载。但是再往下深入思考上面问题,我自己发现对于Cache原理的理解比较欠缺,网上资料纷繁复杂。

因此,梳理并总结其原理,为后续系统性能优化打下基础。

1.为什么要使用Cache

大家都知道,当系统负载较大时,首先要检查的就是是否打开ICache,那么从硬件层面Cache在MCU\SOC的哪个位置?

这里首先祭出一张包浆的老图:

Cache位于CPU和主存之间,分为了L1-L3 Cache,每种cache访问速度有区别;

回归到MCU中,以TC37x为例,Cache分为了PCache(指令缓存)和DCache(数据缓存)。那么为什么加了Cache就会提供系统运行速度呢?

以实际生活场景为例:超市里面的东西很丰富,但是所需要的存储空间很大,而我要去超市买想要的东西,还得走路、选商品、搬回来,这中间耗费的时间和劳动力可想而知;但是因为有了冰箱,一切就方便了许多;不过冰箱容量就那么大,所以会把常用的东西一次性从超市搬过来暂存至冰箱里,下一次我再想用这些物品时从冰箱里拿取,是不是就节省了很多时间?

这里,人是CPU,超市就是主存,冰箱里放置的常用物品,咱们就可以理解为那些被经常调用的函数、数据等等,这就是Cache的局部性原理之一----时间局部性。

时间局部性:当前正在提取的数据或指令可能很快就需要,因此将数据或指令存储在缓存中,这样可以避免再次在主存中搜索相同的数据。例如代码循环里的数据等。

Cache局部性原理之二 ,即空间局部性---主要是指存储在最近执行的指令附近的所有指令都有很高的执行机会。同时指的是对存储位置相对较近的数据元素(指令)的使用。

我们常常听到的Cache Hit就是我从冰箱里拿到想要的东西(对应CPU),而Cache Miss就是冰箱里没有目标东西了,得到超市进货了,但是这个进货原则需要协商:这个进货原则就是Cache替换算法。 

好了,关于Cache的基本概念我们以超市、冰箱做类比应该比较容易理解。

不过仔细想想,超市东西这么多,如何保证冰箱里的东西和超市的东西一致呢?这就不得不提分类、编号思想了。

2.Memory与Cache如何映射

以分类编号来思考这个问题,一切迎刃而解。

2.1 地址映射概设

一般来说,主存会以Cache的大小为基本单位划分为多个块,如下图:

Cache内部组成包含Cache控制器和两块SRAM(Tag RAM、DATA RAM)。

其中Data RAM用于存放数据(指令),其基本单位称为Cache line,例如TC3xx DCache Line大小为256bit(32Bytes)。根据DCache 16KB,可以算出有多少个Cache Line。

那么什么是Tag?这就不得不提到主存地址,一般来讲,主存地址由tag、set/index和offset组成,如下:

其中Set\Index用于定位Cache中的哪一个Cache Line,Offset用于定位Cache Line中的哪一个Bytes,Tag用于标识请求的是主存哪一个数据块,

假设现在Cache Line为256Bits,Cache大小为4KB,Cache Line个数就为4096/32=128,根据上述地址定义,如下图:

这个概念搞清楚了,我们就能理解TC3xx UserMannul提到的DCache、DTag。

紧接着我们来看,memory与Cache的映射方式。

3.小结

限于篇幅,本文到这里结束了,下一篇我们将继续聊Cache映射模式,DCache的数据一致性问题。

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

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

相关文章

Python 机器学习 基础 之 监督学习 [ 核支持向量机 SVM ] 算法 的简单说明

Python 机器学习 基础 之 监督学习 [ 核支持向量机 SVM ] 算法 的简单说明 目录 Python 机器学习 基础 之 监督学习 [ 核支持向量机 SVM ] 算法 的简单说明 一、简单介绍 二、监督学习 算法 说明前的 数据集 说明 三、监督学习 之 核支持向量机 1、线性模型与非线性特征 …

战网国际服下载教程 暴雪战网客户端一键下载安装教程分享

战网国际服务平台,又名Battle.net环球版,是暴雪娱乐操作的跨国界游戏交流平台,它消除了地域的隔阂,向全球范围内的游戏爱好者提供服务。与仅服务于特定地区的版本不同,国际版赋予了玩家自由穿梭于暴雪众多标志性游戏的…

python怎么安装matplotlib

1、登陆官方网址“https://pypi.org/project/matplotlib/#description”,下载安装包。 2、选择合适的安装包,下载下来。 3、将安装包放置到python交互命令窗口的当前目录下。 4、打开windows的命令行窗口,通过"pip install"这个命令…

一种快速提升文件传输速度的方法

在面对网络条件不理想时,进行文件传输往往会导致传输速率的显著下降。为了克服这一难题,镭速软件特别引入了一系列创新的设置选项,旨在显著提升文件传输速率。通过这些优化措施,用户即使在网络不佳的情况下,也能享受到…

尝试使用官方jailhouse-images仓库运行jailhouse

jailhouse 的官方 demo 演示仓库 Demo and testing images: https://github.com/siemens/jailhouse-images 通过jailhouse 的官方 demo 演示仓库,可以直接编译出带有部署有jailhouse程序的Linux镜像,有多个目标平台的Linux镜像可选,也有在qe…

优秀测试的核心能力!2招高效定位分析BUG!

之所以写这一篇文章,是突然想起来曾经在测试过程中被开发嘲讽过,事情是这样的,当时发现了一个疑似前端的Bug就草草提交到了禅道,结果刚来的女前端看到了就有点生气地问我为啥不查清到底是前后端问题就直接派给她前端了&#xff0c…

IT革新狂潮:引领未来的技术趋势

方向一:技术革新与行业应用 当前现状: 量子计算:量子计算的研究正在加速,尽管目前仍处于初级阶段,但其在药物研发、加密技术和材料科学等领域的应用潜力已被广泛认可。 虚拟现实(VR)与增强现实…

python之pyQt5实例:树莓派+MPU6050采集数据

1、安装必要的软件包: sudo apt-get update sudo apt-get install python3-smbus python3-dev i2c-tools sudo apt-get install python3-smbus 2、确认I2C接口已经启用: 运行 sudo raspi-config 命令打开Raspberry Pi配置工具。 在菜单中选择 "…

EFCore_创建项目

添加依赖 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Tools(Migration工具) 根据使用的DB添加对应依赖: SQL Server:Microsoft.EntityFrameworkCore.SqlServer 添加该依赖时可不添加Microsoft.EntityFrameworkCore,该依…

一文详细解析Google编码规范工具cpplint的下载安装与使用

目录 一、什么是cpplint 二、cpplint能实现的功能 三、cpplint的下载与使用 1、配置python环境 2、安装cpplint 四、cpplint常用命令讲解 1、常用命令查看 2、常用命令详解 3、命令使用方式 五、 cpplint的实用技巧 1、集成cpplint 1.1、修改调用接口. 1.2、直接把…

基于Spring封装一个websocket工具类使用事件发布进行解耦和管理

最近工作中,需要将原先的Http请求换成WebSocket,故此需要使用到WebSocket与前端交互。故此这边需要研究一下WebSocket到底有何优点和不可替代性: WebSocket优点: WebSocket 协议提供了一种在客户端和服务器之间进行全双工通信的…

高质量英文文献应该如何查找并且阅读?

1. 查找 使用谷歌学术进行论文关键字检索,查找高度匹配的论文。这里我们可以选择年限等信息进行筛选。作为研究者我们一般选择近三年的文章进行阅读。这里谷歌学术需要科学上网,请大家自行解决。 https://scholar.google.com/ 2. 查看期刊等级 我们查…

Go Gin使用JWT实现认证机制

什么是JWT JWT是JSON Web Token的缩写,是一种跨域认证的解决方案。 使用JWT解决什么问题 传统的登录认证的实现,依赖客户端浏览器的cookie和服务器的session,这种实现登录的方式有很大的局限性。 对于部署在单台服务器的应用来说,使用cookie+session登录认证的方案尚…

Apache2.4和PHP8的量子纠缠

Apache不建议你用,PHP建议使用

二进制部署k8s---下篇

一 master02 节点部署 1 先在master01 添加映射master02 对master02进行环境初始化 3 从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点 scp -r /opt/etcd/ root192.168.11.12:/opt/ scp -r /opt/kubernetes/ root192.168.11.12:/opt…

scanf读取标准输入

内容 scanf函数的原理 多种数据类型混合输入 常用的数据输入/输出函数 程序员可以给程序输入数据,程序处理后会返回一个输出。C语言通过函数库读取标准输入,然后通过对应函数处理将结果打印到屏幕上,printf函数可以将结果打印到屏幕上。下…

中国品牌日 | 紫光展锐以科技创新驱动品牌价值 提升全球竞争力

5月10日至5月14日,以“中国品牌,世界共享;国货潮牌,品筑未来”为主题的第八届中国品牌日活动在上海世博展览馆举行。该活动由国家发展改革委联合国务院国资委、市场监管总局、国家知识产权局共同主办,聚焦新经济新消费…

高通QCS6490开发(一): 广翼智联FV01 AI板卡简介

《高通QCS6490开发》是一系列AIoT应用开发文章,我们将会在系列文章中陆续介绍基于QCS6490平台上的AIoT应用开发,在文章中,我们选择了广翼智联(FAIOT)公司的FV01产品作为开发板,介绍如何从底层的硬件板卡接线…

JETBRAINS IDES 分享一个2099通用试用码!PhpStorm 2024 版 ,支持一键升级

文章目录 废话不多说上教程:(动画教程 图文教程)一、动画教程激活 与 升级(至最新版本) 二、图文教程 (推荐)Stage 1.下载安装 toolbox-app(全家桶管理工具)Stage 2 : 下…

软考一年只能考一次吗?24软考各科目考试时间一览表

软考考试次数: 软考高级【系统分析师】及【系统架构设计师】是一年考两次的。 此外,软考中级【软件设计师】和【网络工程师】也是一年考两次的。 其他科目一年都只开考一次,或者上半年开考,或者下半年开考,具体考试…