CPU基础知识之Cache介绍

2023-11-03

一、什么是Cache

Cache就是CPU缓存,它是位于CPU和内存之间的临时存储器。CPU在读取数据进行计算的时候,首先是从内部的缓存中查找需要的数据,如果有,可以最短时间最快速度交付CPU。但是如果没有找到,CPU就会提出“要求”经过缓存从内存中读取,再原路返回到CPU进行计算。同时,把这个数据所在的数据也调入缓存,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。

换句话说,CPU中缓存是为了加快CPU读取数据的速度,也是为了给内存一个缓冲期。因为CPU运算速度太快了,光靠内存读写完全跟不上,而CPU缓存的数据交换比内存快多了,大部分时候CPU可以直接从缓存读取数据,找不到的话再从内存读取,这样可以节省CPU读取内存数据时浪费的时间。

二、缓存级别CacheLevel

获取i5处理器的cache信息,如下:

在这里插入图片描述

一般主流CPU有三级缓存L1、L2、L3,并有多个核心。如上图可以看到cache信息:

  • 4个L1 data cache,每个容量32KB
  • 4个L1 instruction cache,每个容量32KB
  • 4个L2 cache,每个容量256KB
  • 1个L3 cache,容量6MB

i5核数刚好也是4核,据此大概也能猜到L1、L2是每个核私有的,而L3是每个核共享的。而实际情况也是如此,核与cache的关系如下所示:

在这里插入图片描述

  • L1容量最小,速度最快,每个核都有L1缓存,L1又专门针对指令和数据分成L1d(数据缓存),L1i(指令缓存)。
  • L2容量比L1大,速度比L1慢,每个核都有L2缓存。
  • L3容量最大,速度最慢,多个核共享一个L3缓存。

CPU获取数据会依次从L1,L2,L3中查找,如果都找不到则会直接向内存查找。

在这里插入图片描述

一般来说,每级缓存的命中率大概都在80%左右,也就是说全部数据量的80%都可以在一级缓存中找到,只剩下20%的总数据量才需要从二级缓存、三级缓存或内存中读取,由此可见一级缓存是整个CPU缓存架构中最为重要的部分。

三、缓存行 CacheLine

计算机将数据从主存读入Cache时,是把要读取数据附近的一部分数据都读取进来
这样一次读取的一组数据就叫做CacheLine,每一级缓存中都能放很多的CacheLine。

在这里插入图片描述

实际上,cache分成了多个组,每个组分成多个CacheLine行,大致如下:

在这里插入图片描述

linesize是cache的基本单位,表示每个cache line的字节数大小。从主存向cache迁移数据都是按照linesize为单位替换的。

比如linesize为32Byte,那么迁移必须一次迁移32Byte到cache。 这个linesize比较容易理解,就像我们从书架往书桌搬书必须以书为单位,肯定不能把书撕了以页为单位。书就是linesize。

当然了现实生活中每本书页数不同,但是同个cache的linesize总是相同的,不仅如此,一般同个CPU中的各级cache,其linesize也是相同的。

使用命令查看linux下cache信息:

getconf -a | grep CACHE

在这里插入图片描述

四、缓存命中与缓存缺失

  • 缓存命中(cache hit)
  • 缓存缺失(cache miss)

当应用程序或软件请求数据时,会首先发生缓存命中。首先,中央处理单元(CPU)在其最近的内存位置(通常是主缓存)中查找数据。如果在缓存中找到请求的数据,则将其视为缓存命中。

CPU要访问的数据在Cache中有缓存,称为“命中” (Hit),反之则称为“缺失” (Miss)。

可以简单理解为:

  • 在各级缓存中找到请求的数据,叫做缓存命中;
  • 请求的数据不在各级缓存中,则叫做缓存缺失。

更加详细的介绍,参考《CACHE的Miss和Hit》一文。

五、Cache line alignment (cache对齐)

数据跨越两个cache line,就意味着两次load或者两次store。如果数据结构是cacheline对齐的, 就有可能减少一次读写。数据结构的首地址cacheline对齐,意味着可能有内存浪费(特别是数组这样连续分配的数据结构),所以需要在空间和时间两方面权衡。

对于普通代码,内存边界对齐也是有好处的,可以降低高速缓存(Cache)和内存交换数据的次数。 主要问题是在于Cache本身是分成很多Cache-Line,每条Cache-Line具有一定的长度,比如一般来说L1 Cache每条CacheLine长度在32个字节或64个字节;而L2的会更大,比如64个字节或128个字节。用户每次访问地址空间中一个变量,如果不在Cache当中,那么就需要从内存中先将数据调入Cache中。

比如现在有个变量 int x;占用4个字节,它的起始地址是0x1234567F;那么它占用的内存范围就在0x1234567F-0x12345682之间。如果现在CacheLine长度为32个字节,那么每次内存同Cache进行数据交换时,都必须取起始地址时32(0x20)倍数的内存位置开始的一段长度为32的内存同Cache Line进行交换。比如0x1234567F落在范围0x12345660-0x1234567F上,但是0x12345680-0x12345682落在范围0x12345680-0x1234569F上,也就是说,为了将4个字节的整数变量0x1234567F-0x12345682装入Cache,我们必须调入两条Cache Line的数据。

但是如果int x的起始地址按4的倍数对齐,比如是 0x1234567C~0x1234567F,那么必然会落在一条Cache Line上,所以每次访问变量x就最多只需要装入一条Cache Line的数据了。比如现在一般的malloc()函数,返回的内存地址会已经是8字节对齐的,这个就是为了能够让大部分程序有更好的性能。

参考链接:

《cpu一级二级三级缓存有什么用?cpu缓存越大越好吗?》

《计算机缓存Cache以及Cache Line详解》

《深入理解Cache》

《Cache Line》

《CPU Cache 机制以及 Cache miss》

《CPU cache 与内存对齐》



若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CPU基础知识之Cache介绍 的相关文章

随机推荐

  • React中state状态详解

    文章目录 1 基本使用 2 使用setState操作state数据 3 案例 toDoList 4 案例 购物车 1 基本使用 要点 成员属性 state 它是一个特殊的属性 它是当前类的私有数据 只有在当前的组件中才能操作里面的数据 状态
  • 【解决】JS中使用foreach循环,无法终止判断跳出循环;JS中使用try catch跳出foreach循环;浅谈JS深浅拷贝......

    问题 在foreach循环中有一个判断 需要在第一次符合该判断时跳出该循环 结果是未跳出 示例代码如下 this arr forEach item index gt if item uuid this uuid 会走多次该循环 此时使用re
  • 客户端测试是什么?你了解客户端测试吗?

    大家好 我是大圣 最近接到一个问题 客户端测试是什么 今天我们就来说说客户端测试 客户端 顾名思义就是Client 就是大家常说的C S架构里的Client 随着移动端越来越发达 现在的客户端分为PC端应用程序以及移动端APP 今天我们就针
  • python入门学习之小工具制作系列--02使用tkinter库写一个BMI身体指数检测小程序

    一 小程序检测功能逻辑 即通过输入身高 体重两个数据即可计算自己的BMI身体指数是多少 且对身体状况做相应提醒 二 小程序使用体验 1 弹出主界面 输入身高 体重数据 2 点击计算 输出BMI数据 3 根据BMI结果 给出相应的建议 三 小
  • 第7章 OpenWrt-opkg包管理

    第7章 OpenWrt OPKG 本章讲解了OPKG包管理工具 OPKG Open OpenWrt Package 是 IPKG Installing Packages 衍生版本 可以用于安装应用层ipk和驱动ipk等 在安装时会自动解决安
  • HCIA-AI 3.0题库

    一 人工智能概览 多选 1 下列哪些属于 AI 的子领域 A 机器学习 B 计算机视觉 C 语音识别 D 自然语言处理 答案 ABCD 判断 2 语音识别指的是将音频数据识别为文本数据 A TRUE B FALSE 答案 A 单选 3 人工
  • UEFI启动模式的服务器使用U盘安装Linux系统

    今天要为一台十年前的IBM服务器安装CentOS7系统 本来以为是手到擒来的小事 没想到啊 没想到 竟然折腾了一个上午 罪魁祸首就是这台服务器是快速启动的方式 且看下文 这里我将虚拟机安装的系统设置成uefi启动 设置方法是打开系统配置文件
  • Adobe Premiere Rush CC 2020中文版

    教程 1 下载解压镜像文件 2 断开网络连接 资源地址在评论区 3 运行 autoplay exe 开始安装 点击 Install 4 设置默认不变 点击 继续 5 等待进度到达100 6 安装成功 运行Adobe Premiere Rus
  • 【校招VIP】前端JS语言考点之px rem等单位

    考点介绍 rem vm等问题是前端面试里的高频题型 但是不少同学并不能很清楚的说明为什么在有px单位之后 还需要rem单位 往往会往不对的自适应方向回答 作为基础性问题 只要回答不出来 面试就通过不了 需要真正理解 而不是死记硬背 前端JS
  • 服务器配置文件wiki,Wiki服务器的配置.pdf

    Wiki 站点支持面向社群的协作式写作 每个人都可以发表自己的见解 或者对共同维护的 主题进行扩展 Wiki 同时也包括一组支持这种写作的辅助工具 可以在 Web 的基础上对 Wiki 页面的文本进行创建 更改和发布 比做网页和更新网页简单
  • 开始字符串 14 颠倒字符串中的单词

    题目 题解 对字符串的操作不是很了解 所以字符串的第一题就直接看题解 方法1 将一整个字符串进行翻转 再对每个字符串翻转 最后去掉空格 先看代码理解 看懂之后再自己实现一遍 要有能将思想转换为代码的能力 class Solution pub
  • 初识STP协议

    一 STP协议简介 1 STP协议的基本原理 在一个具有物理链路的交换网络中 交换机通过运行STP协议 自动生成一个没有环路的工作拓扑 这个无环拓扑也称为STP树 STP tree 其中 树节点是某些特定的交换机 树枝为某些特定的链路 一棵
  • 华为OD机试真题- 跳格子-2023年OD统一考试(B卷)

    题目描述 小明和朋友玩跳格子游戏 有 n 个连续格子 每个格子有不同的分数 小朋友可以选择从任意格子起跳 但是不能跳连续的格子 也不能回头跳 给定一个代表每个格子得分的非负整数数组 计算能够得到的最高分数 输入描述 给定一个数例 如 1 2
  • Buuctf<极客大挑战2019>upload

    文章目录 一 划重点的知识点 二 解题步骤 三 各种类型的一句话木马 四 php文件后缀替换 一 划重点的知识点 GIF89a图片头文件欺骗 一个GIF89a图形文件就是一个根据图形交换格式进行格式化之后的图形 用记事本编写一下内容 然后修
  • 9.Paper小结——《VerifyNet: Secure and Verifiable Federated Learning》

    题目 VerifyNet Secure and Verififiable Federated Learning 安全的和可验证的联邦学习 0 Abstract 联邦学习作为一种新兴的神经网络训练模型 由于其能够在不收集用户原始数据的情况下更
  • Springboot 整合Quartz

    目录 一 Quartz介绍 二 Quartz核心元素 1 Scheduler 任务调度器 2 Trigger 触发器 3 JobDetail 定时任务的信息载体 三 Springboot整合Quartz 1 添加Quartz依赖 2 app
  • pandas计算最大回撤

    文章目录 需求 实现 总结 参考文章 需求 需要计算某股票在某个周期内的最大回撤率 最大回撤定义 在选定周期内任一历史时点往后推 产品净值走到最低点时的收益率回撤幅度的最大值 实现 思路就是将dataframe在groupby之后 通过ap
  • windows server 2008 intel 82579V 82580 驱动安装 错误解决方法

    https communities intel com thread 20667 start 15 tstart 0 This is actually a dirty trick by Intel someone has decided t
  • Python一个命令开启http下载服务器

    下载并安装Python 例如这里想把命令E easytest作为提供下载的目录 那么在cmd里cd到该目录下 并执行命令 python exe m SimpleHTTPServer 如果提示错误 No module named Simple
  • CPU基础知识之Cache介绍

    一 什么是Cache Cache就是CPU缓存 它是位于CPU和内存之间的临时存储器 CPU在读取数据进行计算的时候 首先是从内部的缓存中查找需要的数据 如果有 可以最短时间最快速度交付CPU 但是如果没有找到 CPU就会提出 要求 经过缓