当前位置: 首页 > news >正文

计算机体系结构量化研究方法【2】高速缓存Cache

目录

  • 1.计算机存储层次结构
  • 2.缓存相关概念
  • 3.缓存组织方式
  • 4.Cache回写机制
  • 5.Cache性能量化

1.计算机存储层次结构

计算机存储层次结构可以看作是一个金字塔,越靠上层,容量越小,速度越快

  • L0:寄存器----CPU的寄存器保存着Cache取出的字,你要玩过单片机对这个肯定不陌生
  • L1:高速缓存SRAM----L1中保存着L2取出的缓存行
  • L2:高速缓存SRAM----L2中保存着L3取出的缓存行
  • L3:高速缓存SRAM----L3中保存着主存中取出的缓存行,L1-L3也就是我们常说的三级缓存,用的都是SRAM芯片实现,速度快
  • L4:主存DRAM----主存保存着从本地磁盘取出的磁盘块,用的是DRAM芯片实现
  • L5:本地磁盘----保存着从远程网络或者服务器磁盘上取出的文件
  • L6:远程二级存储----如web服务器

那为什么需要缓存呢?我看下面的一张图,此图说明了处理器的性能发展远远比内存性能的发展要快,而处理器访问内存的速度会因为性能差太大而降低,因此出现了高速缓存Cache
在这里插入图片描述
往常的PMD(个人移动设备)的存储结构如下图,都是通过CPU+Cache+Memory+Flash的形式,层级传递
在这里插入图片描述

2.缓存相关概念

  • 缓存命中----当程序需要在底层次的存储原件里面的数据的时候,发现在比它高层次的存储原件中存在数据,那么程序就不用去访问底层次的存储原件,直接访问高层次的原件,这就叫缓存命中。举个例子:当CPU想获得L4层的主存中的某数据s,却发现在L2Cache有数据s,这就可以直接访问快速的L2层取得数据,这就是缓存命中。
  • 缓存不命中:高层中没有想要的数据,只能替换和驱逐高层次的一些块,再去访问。
  • 缓存不命中/缺失的三种种类 (1)强制缺失:第一次访问缓存必定不命中,因为第一次缓存里面是空的(2)容量缺失:缓存不能包含程序运行期间所需要的全部块,容量已经满了(3)冲突缺失:多个块映射到一个块中的组中,明明有空位给你缓存你却不要去空位,偏要挤出其他块。

3.缓存组织方式

高速缓存一般被组织成这样的情形:
①高速缓存分为若干个组
②组又分为若干个行
③行包含了数据块、有效位、标记位
④可以用向量(S,E,B,m)来表示高速缓存的组织情况
在这里插入图片描述

  • 直接相联高速缓存:根据每个组的高速缓存行数E, 高速缓存被分为不同的类。每个组只有一行(E = 1)的高速缓存称为直接映射高速缓存。
    在这里插入图片描述
  • 组相联高速缓存:直接映射高速缓存很容易出现冲突不命中的情况,因为每个组只有一行。组相联高速缓存放松了这条限制,所以每个组都保存有多于一个的高速缓存行。一个1<E<C/B的高速缓存通常称为E路组相联高速缓存。
    在这里插入图片描述
  • 全相联高速缓存:全相联高速缓存是由一个包含所有高速缓存行的组组成的(只有一个组)
    在这里插入图片描述

4.Cache回写机制

①两种写入策略

  • 写直达:信息被写入缓存的过程中同时写入低一级的存储器的块
  • 写回:信息被写入缓存,只有块被替换踢掉的时候才被写回低一级存储器进行更新

②两种写的比较

  • 写直达虽然占了很多带宽(通过写缓冲区减少停顿),但是保持了数据一致性,缓存永远是最新的
  • 写回策略少带宽,节省功耗,但是在一致性方面有点问题

③写缺失时采用的两种策略

  • 写分配:如果写缺失,把写缺失的块缓存进来,然后再进行写命中时的操作(通常跟写回搭配)
  • 非写分配:直接修改低一级的存储器(通常跟写直达搭配)

其实说白了还是要保证Cache一致性的问题

5.Cache性能量化

①一些概念

  • 缺失率:一次访问存储器缺失的概率
  • 缺失数:一条指令缺失的概率
  • 相互关系:缺失数 = 缺失率*存储器访问指令数在指令数的占比(IC)
  • 命中时间:缓存命中的时间
  • 缺失代价:将块从存储器读取到缓存所需要的时间

②重要公式

存储器的平均访问时间 = 命中时间 + 缺失率 * 缺失代价

③6个基本优化方案

根据上述公式提出优化方案:

  • 增大块的大小降低缺失率(可能增加冲突缺失,到后面会增加缺失率,也可能增加缺失代价)
  • 增大缓存以降低缺失率(延长命中时间,一般采用在片外缓存)
  • 提高相联度以降低缺失率(减小冲突缺失,但会延长命中时间)
  • 采用多级缓存降低缺失代价(市面处理器基本上就是多级缓存)
  • 使读缺失的优先级高于写缺失,以降低缺失代价
  • 避免索引期间进行地址转换,以缩短命中时间(跟虚拟内存相关)

相关文章:

计算机体系结构量化研究方法【2】高速缓存Cache

目录1.计算机存储层次结构2.缓存相关概念3.缓存组织方式4.Cache回写机制5.Cache性能量化1.计算机存储层次结构 计算机存储层次结构可以看作是一个金字塔&#xff0c;越靠上层&#xff0c;容量越小&#xff0c;速度越快 L0&#xff1a;寄存器----CPU的寄存器保存着Cache取出的…...

初识设计模式 - 迭代器模式

简介 迭代器设计模式&#xff08;Iterator Design Pattern&#xff09;&#xff0c;也叫作游标设计模式&#xff08;Cursor Design Pattern&#xff09;。 迭代器模式将集合对象的遍历操作从集合类中拆分出来&#xff0c;放到迭代器类中&#xff0c;让两者的职责更加单一。 …...

三路快排(基于三指针单趟排序的快速排序)+快排时间复杂度再分析

目录 一.前言 二. 三路快排 &#x1f60d;算法思想: &#x1f60d;算法实现步骤: &#x1f60d;三指针单趟排序的实现:​ &#x1f60d;非递归快排完全体: &#x1f914;与C标准库里的快排进行对比测试: 三.快排时间复杂度再分析 一.前言 http://t.csdn.cn/mz8dghttp://…...

Eyeshot Ultimate 2023 Crack

Eyeshot Ultimate 2023 Crack 已经引入了文档类。 工作区。文档现在包含绘制场景内容所需的所有数据。 2022版GEntities已被删除。 最后&#xff0c;一个真正的跨平台中立核心产品是可用的。 新功能 曲线、平面、曲面和体积网格。 屏幕空间环境光遮挡。 托管ReadDWG和ReadDXF类…...

JAVA-8-[SpringBoot]入门程序案例和原理分析

Spring Boot框架入门教程&#xff08;快速学习版&#xff09; Spring Boot教程BooTWiki.COM 1 Spring Boot Spring Boot是Pivotal(关键性的)团队在Spring的基础上提供的一套全新的开源框架&#xff0c;其目的是为了简化Spring应用的搭建和开发过程。Spring Boot去除了大量的X…...

前端工程化

一、AST &#xff08;抽象语法树&#xff0c;Abstract Syntax Tree&#xff09; 手把手带你走进Babel的编译世界 - 掘金 (juejin.cn) 1、概念 我们所写的代码转换为机器能识别的一种树形结构&#xff0c;本身是由一堆节点&#xff08;Node&#xff09;组成&#xff0c;每个节…...

【redis】单线程 VS 多线程(入门)

【redis】单线程 VS 多线程&#xff08;入门&#xff09; 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#…...

2023蓝桥杯Java研究生组赛题

蓝桥杯Java研究生组、JavaA组看过来&#xff0c;这两个组别题目基本一样 第一次参加了Java研究生组&#xff0c;Java组应该没有C/C那么卷吧&#xff0c;主要是觉得Java组可以避开很多ACM大佬&#xff0c;前面几题感觉难度还行没有特别难&#xff0c;后面几个大题依旧是没法做&a…...

多维时序 | MATLAB实现CNN-BiLSTM-Attention多变量时间序列预测

多维时序 | MATLAB实现CNN-BiLSTM-Attention多变量时间序列预测 目录多维时序 | MATLAB实现CNN-BiLSTM-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现CNN-BiLSTM-Attention多变量时间序列预测&#xff0c;CNN-BiLSTM-Atte…...

微积分——Rolle定理的理解(罗尔定理)

极值定理(Extreme Value Theorem)指出&#xff0c;闭区间[a,b]上连续的函数既有最大值&#xff0c;也有最小值。然而&#xff0c;其最大最小值都可能发生在端点。罗尔定理(Rolle’s Theorem)以法国数学家Michel Rolle(1652-1719)的名字命名&#xff0c;它给出了极值存在于闭区间…...

linux内核之select/poll/epoll

一些主流应用IO多路复用技术&#xff0c;突破高并发问题&#xff0c;如nginx、redis、netty&#xff0c;分布式服务框架dubbo&#xff0c;大数据组件hadoop、spark、flink、hbase纷纷使用netty作为网络通信组件。 一、背景&#xff1a;C10K问题 The C10K problem 最早被Dan …...

文件流下载

文件下载 后端传给前端json数据流,前端拿到之后存放在自定义的文件中import axios from "axios"; import qs from "query-string"; import {Notification } from "@arco-design/web-vue"; // 接口中需要含有文件名fileName export function dow…...

C语言模拟实现:atoi函数

在实现atoi之前我们先来了解一下atoi函数的作用是什么&#xff1a; 目录 1.实例演示 2.模拟实现 2.1 判断是否为空指针 2.2判断是否为空字符串 2.3判断正负号 2.4判断非数字字符 2.5判断是否越界 2.6完整代码 1.实例演示 //实例演示 #include <stdio.h> #include …...

LeetCode.每日一题 2427. 公因子的数目

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…...

蓝牙BQB认证 - HFP profile配置说明

零.声明 本专栏文章我们会以连载的方式持续更新&#xff0c;本专栏计划更新内容如下&#xff1a; 第一篇:蓝牙综合介绍 &#xff0c;主要介绍蓝牙的一些概念&#xff0c;产生背景&#xff0c;发展轨迹&#xff0c;市面蓝牙介绍&#xff0c;以及蓝牙开发板介绍。 第二篇:Trans…...

【接口测试工具】Eolink Apikit 快速入门教程

Eolink Apikit 下载安装【官方版】&#xff1a;https://www.eolink.com/apikit 发起 API 测试 进入 API 文档详情页&#xff0c;点击上方 测试 标签&#xff0c;进入 API 测试页&#xff0c;系统会根据 API 文档自动生成测试界面并且填充测试数据。 填写请求参数 首先填写好请…...

使用Python和OpenCV实现实时人脸检测并保存截图

在本篇博客中&#xff0c;我们将使用Python和OpenCV库实现一个实时人脸检测的小项目。我们将利用OpenCV中的Haar级联分类器来检测摄像头捕获的图像中的人脸。 项目功能 通过摄像头实时捕获视频流。使用Haar级联分类器检测视频帧中的人脸。在检测到的人脸周围绘制矩形框。实时…...

[linux kernel]slub内存管理分析(7) MEMCG的影响与绕过

文章目录背景前情回顾描述方法约定MEMCG总览省流总结简介slub 相关 memcg机制kernel 5.9 版本之前结构体初始化具体实现kernel 5.9-5.14kernel 5.14 之后突破slab限制方法cross cache attackpage 堆风水总结背景 前情回顾 关于slab几个结构体的关系和初始化和内存分配和释放的…...

MySQL创建数据库(CREATE DATABASE语句)

在 MySQL 中&#xff0c;可以使用 CREATE DATABASE 语句创建数据库&#xff0c;语法格式如下&#xff1a; CREATE DATABASE [IF NOT EXISTS] <数据库名> [[DEFAULT] CHARACTER SET <字符集名>] [[DEFAULT] COLLATE <校对规则名>]; [ ]中的内容是可选的。语…...

【JavaWeb】4—Tomcat

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...