缓存存储器:性能提升的关键
目录
基本原理
主存与缓存的地址映射
主存的替换策略
缓存的写操作策略
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设备是否连接的方式 下载前一定设置下载完成后自启动 这个虽然不是必须,但对立即看到新程序的现象…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...

高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...