缓存存储器:性能提升的关键
目录
基本原理
主存与缓存的地址映射
主存的替换策略
缓存的写操作策略
Pentium 4 的缓存组织
使用多级缓存减少缺失损失
结论
在计算机系统中,缓存存储器(Cache Memory)发挥着至关重要的作用。它充当处理器和主存之间的高速缓冲区,加速数据访问并显著提升系统性能。
基本原理
缓存存储器是用于存储近期访问过的数据的副本的高速存储器。它的工作原理基于局部性原理,即程序倾向于访问最近访问过的数据(时间局部性)和附近的数据(空间局部性)。通过在处理器附近放置高速缓存,可以缩短内存访问时间并减少对主存的访问次数。
-
局部性原理:局部性原理是指程序在执行过程中存在的一种特性,即程序倾向于访问最近访问过的数据(时间局部性)和附近的数据(空间局部性)。这意味着一旦访问了某个数据,很可能在不久的将来会再次访问该数据,或者访问与之相邻的数据。
-
高速缓存的作用:缓存存储器位于处理器核心和主存之间,其作用是存储近期访问过的数据的副本。当处理器需要访问数据时,首先会在缓存中查找。如果数据存在于缓存中(命中),则可以直接从缓存中获取,从而避免了对主存的访问。如果数据不在缓存中(未命中),则需要从主存中读取,并将其加载到缓存中,以供未来访问时使用。
-
减少内存访问时间:由于缓存存储器具有更快的访问速度和更接近处理器核心的位置,因此可以显著缩短数据访问时间。相比之下,访问主存的时间要长得多。通过在处理器附近放置高速缓存,可以大大提高数据访问速度,并加速程序的执行。
-
减少对主存的访问次数:通过在缓存中存储最近访问过的数据的副本,缓存存储器可以减少对主存的访问次数。这是因为如果数据已经存在于缓存中,处理器可以直接从缓存中获取,而无需访问主存。这样就可以减少主存的访问次数,减轻系统总线和内存控制器的负载,从而提高系统的整体性能。
主存与缓存的地址映射
地址映射算法是确定主存块如何映射到缓存中的位置的关键。不同的地址映射策略会影响缓存的命中率、缓存利用率以及访存延迟等性能指标。以下是对几种常见地址映射策略的进一步说明:
-
直接映射(Direct Mapping):
- 在直接映射中,每个主存块只能映射到缓存中的一个固定位置,通常使用主存地址的一部分来选择缓存行。
- 映射关系通常是通过主存地址的一部分(称为索引)与缓存行的编号进行匹配来确定的。
- 直接映射的优点是实现简单、硬件开销小,但可能会导致冲突,即不同的主存块映射到同一个缓存行,可能会造成缓存替换。
-
全相联映射(Fully Associative Mapping):
- 在全相联映射中,主存块可以存储在缓存中的任何位置,没有固定的映射规则,提供了最大的灵活性。
- 通常使用标记比较来确定主存块是否在缓存中,并使用替换算法来选择要替换的缓存行。
- 全相联映射的优点是可以最大程度地减少缓存冲突,但相应地需要更复杂的替换算法和更多的硬件开销。
-
组相联映射(Set Associative Mapping):
- 组相联映射是直接映射和全相联映射的折衷方案,将缓存划分为多个组,每个组包含多个缓存行。
- 每个主存块根据主存地址的一部分选择一个特定的组,然后在该组内进行缓存行的选择。
- 组相联映射兼顾了直接映射和全相联映射的优点,减少了冲突并降低了硬件开销。
主存的替换策略
替换策略是在缓存满时决定哪些数据将被替换以容纳新数据的重要决策。不同的替换策略会影响缓存的性能和命中率。以下是对几种常见的替换策略的进一步说明:
-
随机替换(Random Replacement):
- 随机替换策略是一种简单的替换方法,它随机选择一个缓存块进行替换。
- 由于随机性,该策略无法利用数据的访问模式,因此可能会导致较高的缓存未命中率。
-
先进先出(FIFO,First-In-First-Out):
- FIFO 替换策略会替换最先进入缓存的块。
- 这种策略保留了数据的进入顺序,但可能无法反映数据的访问模式,导致不良的性能表现,尤其是在存在热点数据的情况下。
-
最少使用(LRU,Least Recently Used):
- LRU 替换策略会替换最近最少被使用的缓存块,即最长时间未被访问的块。
- LRU 策略尝试利用数据的访问模式,通常能够提供较好的性能,但实现起来可能会带来较大的开销。
-
最近最少使用(LRU-K):
- LRU-K 替换策略是 LRU 的一种变体,它考虑了过去 K 次访问来确定最少使用的块。
- LRU-K 可以减少实现复杂度,并在某些情况下提供更好的性能。
-
伪LRU(Pseudo LRU):
- 伪LRU 是一种用于近似LRU行为的替换策略,通过维护一颗二叉树来实现。
- 虽然伪LRU的实现相对简单,但可能无法完全模拟LRU的性能表现。
缓存的写操作策略
缓存的写操作策略对于系统的一致性和性能具有重要影响。以下是几种常见的缓存写操作策略:
-
写直通(Write-Through):
- 写直通策略要求写操作立即更新主存,并且同时更新缓存。
- 优点是可以保持主存和缓存的一致性,但缺点是可能会降低性能,因为每次写操作都需要等待主存的响应。
-
写回(Write-Back):
- 写回策略允许写操作立即更新缓存,但不立即更新主存,而是等到缓存行被替换出去时才写回主存。
- 优点是可以减少主存的写入次数,提高了性能。但缺点是可能导致缓存和主存之间的数据不一致,需要额外的管理机制来维护一致性。
-
写分配(Write-Allocation):
- 写分配策略要求在写操作时,如果缓存中未命中,则首先将数据从主存读取到缓存中,然后再进行写操作。
- 写分配策略通常与写回策略结合使用,以最大限度地减少对主存的访问次数。
-
写无效(Write-Invalidate):
- 写无效策略要求在写操作时,将相关的缓存行标记为无效,而不更新缓存或主存中的数据。
- 后续对该缓存行的读操作会导致缓存未命中,并从主存中读取最新的数据。
Pentium 4 的缓存组织
Pentium 4 处理器采用了两级缓存结构,分别是L1缓存和L2缓存。
-
L1缓存:
- Pentium 4 的L1缓存包括数据缓存(D缓存)和指令缓存(I缓存),每个缓存大小为8 KB。
- L1缓存采用直接映射方式组织,即每个主存块只能映射到缓存中的一个固定位置。
- 数据缓存用于存储最常访问的数据,而指令缓存用于存储处理器执行的指令。
-
L2缓存:
- Pentium 4 的L2缓存大小为256 KB。
- L2缓存采用组相联映射方式组织,即主存块可以映射到缓存中的任何一个组,提供了更大的灵活性和更高的命中率。
- L2缓存作为第二级存储,提供了更大的容量和更高的访问速度,用于存储大量数据和指令。
-
流水线缓存访问:
- Pentium 4 还引入了流水线缓存访问技术,允许在单个周期内执行多个缓存操作。
- 通过流水线化的缓存访问,处理器可以在同一周期内同时进行缓存的读取和写入操作,从而提高了缓存访问的效率和吞吐量。
使用多级缓存减少缺失损失
随着处理器速度的提高,多级缓存结构变得越来越常见。多级缓存包括L1、L2甚至L3缓存,每个级别具有不同的容量和速度。如果较低级别的缓存未命中,则检查较高级别的缓存。这种分层方法可以有效地减少缓存未命中的损失,并提高系统性能。工作原理如下:
-
分层结构:
- 多级缓存通常由多个层次组成,包括L1、L2,甚至L3缓存。
- L1缓存位于处理器核心内部,速度最快但容量最小,用于存储最常访问的数据和指令。
- L2缓存位于处理器核心外部,速度比L1缓存慢但容量更大,用于存储较常访问但容量较大的数据。
- 在某些处理器中,还可能存在L3缓存,位于L2缓存之外,容量更大,但速度相对较慢。
-
缓存层次化:
- 当处理器需要访问数据时,首先检查L1缓存。如果数据在L1缓存中命中,就可以立即访问,避免了主存访问的延迟。
- 如果数据未在L1缓存中命中,则检查L2缓存。如果数据在L2缓存中命中,就可以从L2缓存中获取,避免了更高层次的缓存或主存的访问。
- 如果数据在L2缓存中未命中,就继续向更高层次的缓存或主存中查找,直到找到数据为止。
-
减少缺失损失:
- 多级缓存结构通过将最常访问的数据存储在更接近处理器核心的较小、更快的缓存中,减少了访存延迟。
- 即使某个层次的缓存未命中,处理器仍然可以通过更高层次的缓存来查找数据,而不必访问主存,从而减少了缺失损失。
结论
缓存存储器是加速计算机系统性能的关键组件。通过利用局部性原理、有效的地址映射、替换策略和写操作策略,缓存可以显著缩短内存访问时间并提高系统响应能力。随着技术进步,缓存设计变得越来越复杂,以满足现代应用程序的需求。了解缓存存储器的原理和组织方式对于优化系统性能至关重要。
相关文章:
缓存存储器:性能提升的关键
目录 基本原理 主存与缓存的地址映射 主存的替换策略 缓存的写操作策略 Pentium 4 的缓存组织 使用多级缓存减少缺失损失 结论 在计算机系统中,缓存存储器(Cache Memory)发挥着至关重要的作用。它充当处理器和主存之间的高速缓冲区&am…...
『大模型笔记』工程师的LLMs简介!
💡工程师的LLMs简介 ! 文章目录 1. Embeddings Conceptually(嵌入的概念)1.1. One-hot Encodings(独热编码)1.2. Embeddings(嵌入)2. LLM Basics(LLM 基础知识)3. Autoregressive LLMs(自回归LLMs)4. Where to go from here(何去何从?)5. 参考文献https://devo…...

Vue中的常用指令
Vue 会根据不同的【指令】,针对标签实现不同的【功能】 概念:指令(Directives)是 Vue 提供的带有 v- 前缀 的 特殊 标签属性。 为啥要学:提高程序员操作 DOM 的效率。 vue 中的指令按照不同的用途可以分为如下 6 大…...

百度页面奔跑的白熊html、css
一、相关知识-动画 1.基本使用:先定义再调用 2. 调用动画 用keyframes定义动画(类似定义类选择器) keyframes动画名称{ 0%{ width:100px; } 100%{ width:200px; } } 使用动画 div { width:200px; height:200px; background-…...
Day-02面向对象
一、匿名函数 和函数的作用一致,都是进行代码逻辑的封装, 区别1 在定义时,匿名函数可以不指定函数的名字 区别2 匿名函数执行实现简单的计算 区别3 匿名函数会自动将计算的结果返回 定义格式 lambda 参数1,参数2...:计算逻辑(参数的处理逻辑…...

Sentinel-2 哨兵二号数据介绍及下载
1 Sentinel-2简介 SENTINEL-2 is a European wide-swath, high-resolution, multi-spectral imaging mission. Sentinel-2 是高分辨率多光谱成像卫星,一颗卫星的重访周期为10天,两颗互补,重访周期为5天。分为2A和2B两颗卫星。2A于2015年6月…...
阿里智能信息数据挖掘复盘
(嘻嘻——不嘻嘻) 挫败呜呜呜,钉钉忘装,还要手机登录,迟到三分钟。 一上来就问项目,没有自我介绍。 第一篇的重要特征是什么直接忘记,正负样本比,过拟合的判断标准,特…...
Flutter中图片是怎么在flutter上呈现出来的?
在Flutter中,图片的呈现是通过使用Image组件来实现的。Image组件是一个用于加载和显示图片的Widget,可以从本地文件、网络URL或内存中加载图片,并在应用界面上进行渲染。 图片在Flutter中的呈现过程如下: 加载图片: 使…...

使用 CNN 训练自己的数据集
CNN(练习数据集) 1.导包:2.导入数据集:3. 使用image_dataset_from_directory()将数据加载tf.data.Dataset中:4. 查看数据集中的一部分图像,以及它们对应的标签:5.迭代数据集 train_ds࿰…...

自动控制: 最小二乘估计(LSE)、加权最小二乘估计(WLS)和线性最小方差估计
自动控制: 最小二乘估计(LSE)、加权最小二乘估计(WLS)和线性最小方差估计 在数据分析和机器学习中,参数估计是一个关键步骤。最小二乘估计(LSE)、加权最小二乘估计(WLS&…...

基于VMware安装Linux虚拟机
1.准备Linux环境 首先,我们要准备一个Linux的系统,成本最低的方式就是在本地安装一台虚拟机。为了统一学习环境,不管是使用MacOS还是Windows系统的同学,都建议安装一台虚拟机。 windows采用VMware,Mac则采用Fusion …...

6、phpjm混淆解密和php反序列化
题目:青少年雏形系统 1、打开链接也是一个登入面板 2、尝试了sqlmap没头绪 3、尝试御剑,发现一个www.zip 4、下载打开,有一个php文件打开有一段phpjm混淆加密 5、使用手工解混淆 具体解法链接:奇安信攻防社区-phpjm混淆解密浅谈…...
Codeforces Round 909 (Div. 3) E. Queue Sort(模拟 + 贪心之找到了一个边界点)
弗拉德找到了一个由 n 个整数组成的数组 a ,并决定按不递减的顺序排序。 为此,弗拉德可以多次执行下面的操作: 提取数组的第一个元素并将其插入末尾; 将个元素与前一个元素对调,直到它变成第一个元素或严格大于前一个…...

设计模式基础——设计原则介绍
1.概述 对于面向对象软件系统的设计而言,如何同时提高一个软件系统的可维护性、可复用性、可拓展性是面向对象设计需要解决的核心问题之一。面向对象设计原则应运而生,这些原则你会在设计模式中找到它们的影子,也是设计模式的基础。往往判…...

【校园网网络维修】当前用户使用的IP与设备重定向地址中IP不一致,请重新认证
出现的网络问题:当前用户使用的IP与设备重定向地址中IP不一致,请重新认证 可能的原因: 把之前登录的网页收藏到浏览器,然后直接通过这个链接进行登录认证。可能是收藏网址导致的ip地址请求参数不一致。 解决方法: 方法…...

如何找到docker的run(启动命令)
使用python三方库进行 需要安装python解释器 安装runlike安装包 pip3 install runlike 运行命令 runlike -p <container_name> # 后面可以是容器名和容器id,-p参数是显示自动换行实验 使用docker启动一个jenkins 启动命令为 docker run -d \ -p 9002:80…...
Spring如何管理Bean的生命周期呢?
我们都知道,在面试的过程中,关于 Spring 的面试题,那是各种各样,很多时候就会问到关于 Spring的相关问题,比如 AOP ,IOC 等等,还有就是关于 Spring 是如何管理 Bean 的生命周期的相关问题&#…...

Java网络编程:UDP通信篇
目录 UDP协议 Java中的UDP通信 DatagramSocket DatagramPacket UDP客户端-服务端代码实现 UDP协议 对于UDP协议,这里简单做一下介绍: 在TCP/IP协议簇中,用户数据报协议(UDP)是传输层的一个主要协议之一…...

HTML+CSS+JS简易计算器
HTMLCSSJS简易计算器 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>简易计算器</t…...

STM32使用ST-LINK下载程序中需要注意的几点
使用keil5的ST-link下载界面 前提是ST-LINK已经连接好,(下图中是没有连接ST-link设备),只是为了展示如何查看STlink设备是否连接的方式 下载前一定设置下载完成后自启动 这个虽然不是必须,但对立即看到新程序的现象…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...