cache(一)基本概念

  • 在知乎发现一份不错得学习资料 请教CPU的cache中关于line,block,index等的理解?
    PPT 地址 https%3A//cs.slu.edu/%7Efritts/CSCI224_S15/schedule/chap6-cache-memory.pptx
    课程主页 https://cs.slu.edu/~fritts/CSCI224_S15/schedule/

文章目录

  • 1. cache概念
  • 2. cache hit
  • 3. cache miss
  • 4. 基本cache配置
  • 5. cache read

1. cache概念

在这里插入图片描述

  1. 主存与缓存的关系

    • 图中展示了主存和缓存的结构关系,主存(Memory)分成了若干数据块(blocks),每个数据块用一个数字编号,例如从0到15。
    • 缓存(Cache)则是一个容量较小的存储区域,它只保存了一部分主存中的数据块,用于加速数据的访问。
  2. 数据块示例

    • 在这个例子中,缓存中保存了主存中的几个数据块,包括编号为4、9、14和3的数据块。
    • 这些数据块对应的内容从主存复制到缓存中,以便在访问这些块时不需要直接从主存读取,而是可以从较快的缓存中读取。
  3. 颜色表示的含义

    • 图中用颜色(如红色和绿色)标注了一些特定的数据块。
    • 例如,红色的数据块4表示这个数据块在主存和缓存中都存在。
    • 绿色的数据块14也是如此,表示它在缓存和主存中都有一份拷贝。
  4. 数据传输过程

    • 图中箭头指示了数据传输的方向,表明数据是以“块”为单位在主存和缓存之间进行传输。
    • 比如,如果处理器需要访问数据块14的数据,而该数据块已经在缓存中,处理器可以直接从缓存读取数据块14,而无需访问较慢的主存。
    • 如果缓存中没有所需的数据块,则需要从主存中将该数据块加载到缓存,以便之后的快速访问。
  5. 缓存的优点

    • 缓存是一种较小但速度更快的存储器,可以显著减少处理器访问主存的时间。
    • 在这个例子中,缓存中保存了主存中频繁访问的数据块,从而减少了对较慢主存的访问频率,提高了整体系统的性能。

总结:这个例子展示了缓存如何通过存储主存中部分频繁访问的数据块,减少对主存的直接访问,进而提升系统访问速度。

2. cache hit

在这里插入图片描述
这个图展示了**缓存命中(Cache Hit)**的概念,具体描述如下:

  1. 缓存命中的定义

    • 缓存命中指的是,当处理器请求访问某个数据块时,该数据块已经在缓存中存在。因此,处理器可以直接从缓存中读取数据,而不需要访问较慢的主存(Memory)。
  2. 例子中的情况

    • 在图中,处理器请求访问数据块“14”(图中标注为“Request: 14”)。
    • 此时,数据块14已经存在于缓存中(用红色高亮显示)。
    • 因为数据块14在缓存中已经存在,这次访问被称为**“命中”(Hit)**。
  3. 缓存命中的效果

    • 当发生缓存命中时,数据可以直接从缓存中读取,省去了从主存中加载数据的时间。这种机制显著提高了数据访问的速度,因为缓存的访问速度比主存更快。
    • 在图的右侧,以红字注明了“Hit!”,表示这次访问成功命中缓存。
  4. 缓存与主存的关系

    • 缓存存储了主存中某些经常访问的数据块(例如图中显示的8、9、14和3),以便处理器能够更快地获取数据。
    • 当请求的数据块在缓存中时,处理器无需从主存获取该数据块,从而加快了数据读取速度。

总结:在这个例子中,处理器需要的数据块“14”已经在缓存中,因此发生了缓存命中(Cache Hit),处理器可以直接从缓存读取数据块14,无需访问主存,从而提高了效率。

3. cache miss

在这里插入图片描述

  1. 缓存未命中的定义

    • 当处理器请求某个数据块(例如数据块12)时,如果该数据块不在缓存中,这种情况称为缓存未命中(Cache Miss)
    • 缓存未命中时,系统需要从较慢的主存(Memory)中读取数据块,将其加载到缓存中,以便后续更快的访问。
  2. 例子中的情况

    • 在图中,处理器请求访问数据块“12”(图中标注为“Request: 12”)。
    • 当前缓存中并没有数据块12,因此发生了未命中(Miss),这一情况在右侧以红字注明。
  3. 数据加载过程

    • 由于缓存中没有数据块12,系统会从主存中读取数据块12,并将其加载到缓存中。
    • 图中箭头指示了数据块12从主存移动到缓存的过程。
    • 加载到缓存后,数据块12可以被缓存保存,以便未来快速访问。
  4. 缓存策略

    • 放置策略(Placement Policy):确定新加载的数据块在缓存中的存放位置。这里,数据块12被放置在缓存中的一个空位置。
    • 替换策略(Replacement Policy):如果缓存已满,系统需要决定哪个数据块需要被替换(移出缓存)以腾出空间。此例中未展示替换过程,但在缓存满的情况下,这一策略会非常重要。
  5. 未命中的效果

    • 缓存未命中会导致数据访问速度减慢,因为系统需要从主存中加载数据,这比直接从缓存读取数据要慢。
    • 但加载完成后,如果该数据块之后再次被请求,可以直接从缓存读取,提升后续的访问速度。

总结:在这个例子中,处理器请求的数据块12不在缓存中,因此发生了缓存未命中(Cache Miss)。系统从主存中加载数据块12到缓存,为后续的快速访问做好准备。

4. 基本cache配置

在这里插入图片描述
这张图展示了缓存的通用组织结构,通过参数 ( S )、( E )、和 ( B ) 来定义缓存的配置。具体解释如下:

  1. 缓存的组成部分

    • Set(组):缓存被分为多个组,图中每一行表示一个组。
    • Line(行):每个组包含若干行。行代表缓存中存储数据块的单元。
    • Block(块):每行包含一个数据块,数据块由多个字节组成。
  2. 参数解释

    • ( S = 2^s )(组的数量):缓存中一共有 ( S ) 个组。
    • ( E = 2^e )(每组的行数):每个组包含 ( E ) 行,也可以称为组相联度。例如,( E = 1 ) 表示直接映射缓存,( E > 1 ) 表示组相联缓存。
    • ( B = 2^b )(每块的字节数):每个缓存块的数据量是 ( B ) 个字节。
  3. 缓存大小计算

    • 缓存的总大小 ( C ) 计算公式为:
      C = S × E × B C = S \times E \times B C=S×E×B
    • 这个公式表示缓存的容量等于组数乘以每组的行数再乘以每块的字节数。
  4. 每行的结构

    • 有效位(Valid Bit):用于指示这一行是否包含有效的数据。
    • 标记(Tag):标识主存中数据块的标记,用于在缓存中定位具体的地址。
    • 数据(Data):实际存储的数据块,每块包含 ( B ) 个字节。
  5. 工作机制

    • 当访问一个地址时,首先根据地址中的组编号定位到特定的组。
    • 然后根据标记位判断所需的数据块是否在该组中(即是否命中)。
    • 如果命中,则读取数据块中的内容;如果未命中,则需要将数据从主存加载到缓存中。

总结:图中的结构展示了缓存的典型组织方式,包括组、行和块。通过参数 ( S )、( E )、和 ( B ) 定义了缓存的结构和大小,具体到每行的结构,包括有效位、标记位和数据块。

5. cache read

在这里插入图片描述
这张图展示了**缓存读取(Cache Read)**的过程,具体解释如下:

  1. 地址分解

    • 内存地址被分成三个部分:标记位(Tag)、组索引(Set Index)和块偏移量(Block Offset)。
      • 标记位(Tag):用于标识缓存行的唯一性,确定该地址属于哪个数据块。
      • 组索引(Set Index):用于定位缓存中的特定组(Set),可以选择性地缩小搜索范围。
      • 块偏移量(Block Offset):用于从缓存行中找到数据块的具体字节偏移。
  2. 缓存组织结构

    • 缓存被分成了多个组(( S = 2^s )),每个组包含 ( E = 2^e ) 行(Line)。
    • 每一行代表一个缓存块,包含有效位(Valid Bit)、标记(Tag)和数据块(Data Block),数据块的大小为 ( B = 2^b ) 字节。
  3. 读取流程

    • 步骤1:定位组:根据地址中的组索引(Set Index)选择特定的组。例如,如果组索引表示第3组,则缓存系统会直接定位到第3组进行下一步操作。
    • 步骤2:检查标记位:在选定的组中,缓存系统检查每一行的标记(Tag)是否与地址中的标记位匹配。
      • 如果有匹配的标记,并且有效位(Valid Bit)为1,表示命中缓存,可以直接读取数据。
      • 如果没有匹配的标记,或者有效位为0,则发生缓存未命中。
    • 步骤3:数据偏移定位:在缓存命中的情况下,使用块偏移量(Block Offset)定位到缓存行中的具体字节位置,从该位置开始读取数据。
  4. 图中右上角的总结

    • 定位到组(Locate Set)。
    • 检查组中的每一行,判断是否有行的标记与地址的标记位匹配(Check if any line in set has matching tag)。
    • 如果标记匹配且有效位为1,则表示命中(Yes + line valid: hit)。
    • 命中后,根据偏移量读取数据(Locate data starting at offset)。
  5. 缓存行结构

    • 每个缓存行包含一个有效位、标记和数据块。
    • 有效位用于指示该缓存行是否包含有效数据;标记用于区分内存中的具体地址;数据块则保存从内存中加载的数据。

总结:这个例子展示了在缓存中读取数据的完整流程,包括地址分解、定位组、检查标记、判断是否命中,以及根据偏移量读取数据的步骤。这个过程旨在通过缓存实现更快速的数据访问。

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

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

相关文章

前端CSS3 渐变详解

文章目录 CSS3 渐变详解一、引言二、CSS3 渐变基础1、线性渐变1.1、基本线性渐变1.2、改变渐变方向 2、径向渐变2.1、基本径向渐变2.2、设置径向渐变的中心 三、高级渐变技巧1、重复渐变1.1、重复线性渐变1.2、重复径向渐变 四、总结 CSS3 渐变详解 一、引言 在现代网页设计中…

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver(二)

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver(二) 本教程作为gdb/gdbserver编译安装教程的一个补充,教会大家如何使用gdb/gdbserver进行远程调试。 如上图所示,我们需要将编译后的gdbserver上传至目标设备,其上…

(65)使用RLS自适应滤波器进行信道均衡的MATLAB仿真

文章目录 前言一、仿真说明二、码间串扰、色散、与频率选择性衰落1. 码间串扰(ISI)2. 信道的色散与码间串扰3. 减少ISI的方法 三、MATLAB仿真代码四、仿真结果1.发送16QAM信号的星座图2.信道的频率响应3.接收16QAM信号的星座图4.均衡后16QAM信号的星座图…

【数据分析】如何构建指标体系?

有哪些指标体系搭建模型?五个步骤教你从0开始搭建指标体系 一、企业指标体系搭建存在什么问题 许多企业在搭建数据指标体系时遇到了诸多难题,如问题定位不准确、数据采集不完整、目标不一致、报表无序、指标覆盖不全面以及报表价值未充分利用等。 1、…

【Linux 30】传输层协议 - TCP

文章目录 🌈 一、TCP 协议介绍⭐ 1. TCP 协议的特点 🌈 二、TCP 协议格式⭐ 1. TCP 报头中各字段的含义⭐ 2. 各 TCP 标志位的用途⭐ 3. 使用结构体描述 TCP 报头 🌈 三、TCP 的窗口⭐ 1. TCP 的发送和接收缓冲区⭐ 2. TCP 为什么存在缓冲区⭐…

【Linux杂货铺】IO多路复用

目录 🌈前言🌈 📁 五种IO模型 📂 阻塞IO 📂 非阻塞IO 📂 信号驱动IO 📂 多路复用 📂 异步IO 📁 非阻塞IO实现 📁 select 📂 接口使用 &#x…

Kafka 的一些问题,夺命15连问

kafka-中的组成员 kafka四大核心 生产者API 允许应用程序发布记录流至一个或者多个kafka的主题(topics)。 消费者API 允许应用程序订阅一个或者多个主题,并处理这些主题接收到的记录流 StreamsAPI 允许应用程序充当流处理器(s…

ANNOVAR下载

1.官网 https://annovar.openbioinformatics.org/en/latest/user-guide/startup/ 都填英文 要不然会报错 tar -xzvf annovar.latest.tar.gztree . ├── annotate_variation.pl ├── coding_change.pl ├── convert2annovar.pl ├── example │ ├── ex1.avinput…

集群架构中Lua脚本的限制以及出现的报错

🚀 博主介绍:大家好,我是无休居士!一枚任职于一线Top3互联网大厂的Java开发工程师! 🚀 🌟 在这里,你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人,我不仅热衷…

大语言模型:解锁自然语言处理的无限可能

0.引言 在当今的科技时代,自然语言处理技术正以前所未有的速度发展,语言大模型作为其中的核心力量,对各个领域产生了深远的影响。本文旨在探讨语言大模型的发展历程、核心技术以及广泛的应用场景,以帮助读者更好地理解这一前沿技…

MATLAB实现智能水滴算法(Intelligent Water Drops Algorithm, IWDA)

1.智能水滴算法介绍 智能水滴算法(Intelligent Water Drops Algorithm,IWDA)是一种基于水滴特性的智能优化算法,它借鉴了水滴在自然界中的运动和形态变化规律,通过模拟水滴的形成、发展和消亡过程,实现问题…

【计网】基于TCP协议的Echo Server程序实现与多版本测试

目录 前言: 1、InitServer类的实现 1.1. 创建流式套接字 1.2. bind 绑定一个固定的网络地址和端口号 1.3.listen监听机制 1.4.完整代码 2. 循环接收接口与服务接口 2.1.accept函数讲解 讲个商场拉客的故事方便我们理解: 2.2.服务接口实现 3.服…

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头 原版表头和表体字体美化自动拼接错误提示列自适应宽度自动合并单元格使用Easyexcel使用poi导出 在后台管理开发的工作中,离不开的就是导出excel了. 如果是简单的导出, 直接easyexce…

边缘计算的学习

文章目录 概要何为边缘计算?现阶段,企业使用边缘计算相对云计算 整体架构流程边缘网络组件边缘计算与云安全 研究方向结合引用 概要 edge 何为边缘计算? 边缘计算(英语:Edge computing),是一种…

SpringBoot在城镇保障性住房管理中的应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理城镇保障性住房管理系统的相关信息成为必然…

算法|牛客网华为机试41-52C++

牛客网华为机试 上篇:算法|牛客网华为机试21-30C 文章目录 HJ41 称砝码HJ42 学英语HJ43 迷宫问题HJ44 SudokuHJ45 名字的漂亮度HJ46 截取字符串HJ48 从单向链表中删除指定值的节点HJ50 四则运算HJ51 输出单向链表中倒数第k个结点HJ52 计算字符串的编辑距离 HJ41 称砝…

粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测

粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测 目录 粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现PSO-BiTCN-BiGRU-Attention粒子…

「Mac玩转仓颉内测版1」入门篇1 - Cangjie环境的搭建

本篇详细介绍在Mac系统上快速搭建Cangjie开发环境的步骤,涵盖VSCode的下载与安装、Cangjie插件的离线安装、工具链的配置及验证。通过这些步骤,确保开发环境配置完成,为Cangjie项目开发提供稳定的基础支持。 关键词 Cangjie开发环境搭建VSC…

协程6 --- HOOK

文章目录 HOOK 概述链接运行时动态链接 linux上的常见HOOK方式修改函数指针用户态动态库拦截getpidmalloc 第一版malloc 第二版malloc/free通过指针获取到空间大小malloc 第三版strncmp 内核态系统调用拦截堆栈式文件系统 协程的HOOK HOOK 概述 原理:修改符号指向 …

ResNet 残差网络 (乘法→加法的思想 - 残差连接是所有前沿模型的标配) + 代码实现 ——笔记2.16《动手学深度学习》

目录 前言 0. 乘法变加法的思想 1. 函数类 2. 残差块 (讲解代码) QA: 残差这个概念的体现? 3. ResNet模型 (代码讲解) 补充:更多版本的ResNet 4. 训练模型 5. 小结 6. ResNet的两大卖点 6.1 加深模型可以退化为浅层模型 6.2 用加法解决梯度消…