CPU性能优化:Cache

news2024/11/27 0:34:44

 CPU性能提升:Cache机制

    随着半导体工艺和芯片设计技术的发展,CPU的工作频率也越来越高,和CPU进行频繁的数据交换的内存的运行速度却没有相应的提升,于是两者之间产生了带宽问题。进而影响计算机系统的整体性能。CPU执行一条指令需要零点几纳秒,而RAM则需要30纳秒左右,读写一次RAM的时间,CPU都可以执行几百条指令了。为了不给CPU拖后腿,解决内存带宽瓶颈的方法一般有两个,一个是大幅度提升内存RAM的工作频率,目前最新的DDR 4内存条的工作频率可以飙到2GHz,但是和高端的CPU相比,还是存在一定的差距的,这就需要第二种方法来弥补差距。使用Cache缓存机制,有速度瓶颈的地方就有缓存,这种思想在计算机中随处可见。

    2.4.1 Cache的工作原理

Cache在物理实现上其实就是静态随机访问存储器Random Access memory SRAM,Cache的运行速度介于CPU和内存DRAM之间,是在CPU和内存之间插入一组告诉缓冲存储器,就是利用空间局部性和时间局部性原理,通过自有的存储空间,缓存一部分内存中的指令和数据,减少CPU访问内存的次数,从而提高系统的整体性能。

   Cache的工作流程图2-28为例,当CPU读取内存中的地址为8的数据时,CPU会将内存中的地址为8的一片数据缓存到Cache中,等下一次CPU读取内存中地址为12的数据时,会首先到Cache中检查地址是否在Cache中,如果在,就称为缓存命中,CPU就直接从Cache中取数据,如果该地址不在Cache中,就称为缓存未命中,Cache Miss。CPU就重新转向内存读取数据,并重新缓存该地址数据到Cache中。

  CPU写内存的工作流程和读取类似,,当CPU网地址为16的内存中写入数据0时,并没有直接写入RAM,而是暂时写到了Cache中。此时Cache中的数据和内存中的就不一致了,缓存的每一块空间一般有一个特殊的标记,Dirty Bit。用来记录这种变化,当Cache需要刷新时,如Cache空间已经满了而CPU又需要缓存新的数据的时候,在清理缓存之前,会检查这些Dirty Bit标记的变化,并把这些变化的数据回写到RAM中,然后菜腾出Cache中的存储空间。

以上只是对Cache的工作原理简化了分析。实际的Cache远比这复杂,如Cache里面存储的内存地址,一般要经过地址映射,转换为更容易存储和检索的形式,另外,现在的CPU为了进一步提高性能,大多采用多级Cache, L1, L2 L3

   2.4.2 一级Cache和二级Cache

   CPU从Cache里读取数据,如果缓存命中,就不用访问内存了,效率大大提升,如果缓存没有命中,情况就不太乐观了。CPU不仅需要重新到内存取数据,还要缓存一片新的数据到Cache中,如果Cache已经满了,还要清理Cache,如果Cache中的数据有Dirty Bit,还需要先回写数据到RAM,这些操作需要几十甚至上百个指令。消耗上百个时钟周期的时间,严重影响了CPU的读写效率,为了减少这种情况的发生,我们可以通过增大Cache的容量来提高缓存命中的概率。但是随着而来的成本的上升,在CPU内部,Cache和寄存器的电路比内存DRAM复杂了很多,会占用很大的芯片面积,如果大量使用,芯片发热量会急剧上升,所以在CPU内部寄存器一般也就几十个,靠近CPU的一级Cache也就几十K字节,既然无法增加Cache的容量,一个折中的办法就是在一级Cache和内存之间添加二级Cache。 二级Cache的工作频率比一级Cache低,但是是电路成本会低一些。元器件的运行速度总是和电路成本成正比。

现在的CPU一般都是多核结构,一个CPU芯片内部会集成多个Core,每个Core都会有自己的独立的L1 Cache,包括D-Cache 和I-Cache,在x86架构的CPU中,一般每个Core也会有自己的独立的L2 Cache, L3 Cache被所有的Core共享。而在RAM架构的CPU中,L2 Cache共享的。RAM架构Soc芯片的存储结构如下/

 

2.4.3 为什么有的处理器没有Cache

Cache一般用于高性能处理中,并不是所有的CPU都有Cache。例如C51单片机,cortex-MO,cortex-MI等系列的ARM处理器就没有Cache,这些处理器功耗低,成本低,L3 Cache的面积占了整个CPU的1/4. 再加上每个Core独立的L1 L2 Cache, 这样Cache就占了CPU面积的1/3.

二是这些处理器工作频率不高,不存在RAM和CPU主频之间带宽差距

三 使用Cache无法保证实时性,缓存未命中时,CPU从RAM读取数据的时间是不确定的。

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

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

相关文章

C++/PTA 至多删三个字符

至多删三个字符 题目要求解题思路代码总结 题目要求 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的、长度在区间 […

关于摆摊气球的调研-网红气球

本章主要介绍一下最近网红气球: 最近看到很多摆摊的抖音视频,都在说卖气球很好,成本低,收益高,所以调研了一下,网红气球分好几种: a,飘空气球; b.手持网红气球 c.青蛙 首先介绍飘空…

文件上传,内容逻辑数组绕过(22)

uploadd 第十三关 这一关告诉我们的,有一些上传漏洞需要配合这个文件包含和加解密。 这个先在一个图片源码里面写入php后门的脚本代码 这里也可以手工注入到图片的源码里面来,手工注入,如果采用16进制打开这个图片,这个图片在…

okhttp篇4:RetryAndFollowUpInterceptor

在上一篇 okhttp篇3:RealCall_yolan6824的博客-CSDN博客 中讲到RealCall无论是在execute还是enqueue方法中,都是通过getResponseWithInterceptorChain方法获取Request对应的Response的。而getResponseWithInterceptorChain这个方法,又是通过…

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程] 0. 前言1. 资源信息获取函数——monitor.py2. UI界面——listen.py3. main.py4. 运行效果5. 编译 exe 程序6. 其他PyQt文章 0. 前言 利用 PyQt5 开发一个 windows 的资源监视助手,在使用虚…

【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置

文章目录 1. 目的2. 理念: vimsolo3. vimrc: 配置颜色4. vimrc: 配置状态栏5. 拷贝颜色主题和.vimrc: python安装脚本 1. 目的 习惯了 VSCode 默认的配色:黑色主题,蓝色状态栏。偶尔使用 Vim 时想让 vim 伪装的像 VSCode,不考虑花…

Web 测试和 App 测试重点总结

单纯从功能测试的层面上来讲的话,App 测试、Web 测试在流程和功能测试上是没有区别的,但由于系统结构方面存在差异(web 项目,b/s 架构;app 项目,c/s 结构)在测试中还是有不同的侧重点内容&#…

ZED使用指南(八)Depth Sensing

ZED立体相机再现了人类双目视觉的工作方式。通过比较左眼和右眼看到的两种视图,不仅可以推断深度,还可以推断空间中的3D运动。 ZED立体相机可以捕捉到场景的高分辨率3D视频,通过比较左右图像之间的像素位移可以估计深度和运动。 深度感知 …

CTFHub-ctfhub-Git泄露-Log

CTFHub-ctfhub-Git泄露-Log 当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。请尝试使用BugScanTeam的GitHack完成本题 1、dirsearch扫描 github上下载dirsearch-master 命令F…

SpringMVC第二阶段:@RequestMapping注解详解

RequestMapping注解详解 RequestMapping是给个方法配置一个访问地址。就比如web学习的Servlet程序,在web.xml中配置了访问地址之后,它们之间就有一个访问映射关系。 1、value属性 value 属性用于配置方法对应的访问地址. /*** RequestMapping 可以配…

JavaScript实现背景图像切换3D动画效果

🐱 个人主页:不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! &am…

Flask全套知识点从入门到精通,学完可直接做项目

目录 Flask入门 运行方式 URL与函数的映射(动态路由) PostMan的使用 查询参数的获取 上传文件 其它参数 url_for 函数 响应-重定向 响应-响应内容 响应-自定义响应 Flask模板 模板介绍 模板的使用 模板-传参 模板使用url_for函数 过滤器介绍 Jinja模板自带过滤器 流程…

DTFT和DFT有何区别?一文为你讲解清楚

很多人在开始学习数字信号处理的时候,对于各种傅里叶变换特别是离散傅里叶变化的概念及作用完全不清楚,IC修真院在网上整理了关于DTFT、DFT的各知识点。下面就来了解一下关于DTFT和DFT的区别吧。 DTFT, DFT 的区别是含义不同、性质不同、用途…

Elasticsearch集群搭建与相关知识点整理

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章参考网上的课程,介绍Elasticsearch集群的搭建,以及Elasticsearch集群相关知识点整理。 如果文章有什么需要改进的地方还请大佬不吝赐教&am…

C++刷题--选择题4

1, 在()情况下适宜采用 inline 定义内联函数 A 函数体含有循环语句 B 函数体含有递归语句 C 函数代码少、频繁调用 D 函数代码多,不常调用 解析 C,以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方…

SpringSecurity实现角色权限控制(SpringBoot+SpringSecurity+JWT)

文章目录 一、项目介绍二、SpringSecurity简介SpringSecurity中的几个重要组件:1.SecurityContextHolder(class)2.SecurityContext(Interface)3.Authentication(Interface)4.AuthenticationMana…

c++项目环境搭建(VMware+linux+ubantu+vscode+cmake)

想运行一个c项目,但是环境怎么整呢?b站走起!!! 本文需要的安装包 链接:https://pan.baidu.com/s/1XJbR2F1boQ-CqV8P71UOqw 提取码:swin 一、在虚拟机中安装ubantu 八分钟完成VMware和ubunt…

Git命令大全,涵盖Git全部分类,非常值得收藏!

Git是一个分布式版本控制系统,可以让开发者在不同的平台和环境中协作开发项目。Git有很多命令,可以用来管理项目的状态、历史、分支、合并、冲突等。本文将介绍一些Git常用的命令,并给出示例和分类。 配置命令 配置命令可以用来设置Git的全局…

算法设计与分析:贪心法

目录 第一关:贪心法 任务描述: 相关知识: 贪心法的优缺点: 例题: 解题分析: 程序实现: 关键代码: 编程要求: 测试说明: 第二关:最小生成…

体验了下科大讯飞版ChatGPT,厉害了!

前几天科大讯飞的星火认知大模型发布了,我刚好有朋友在科大讯飞工作,于是就第一时间体验了一波。 一番体验下来确实比我预想的效果要好,没想到国产模型的效果还不错,我试了很多方面,比如通用常识功能、写作功能、学习…