应用程序性能瓶颈中的CPU缓存优化

news2024/11/28 19:39:00

1.前言

        在应用程序中会有大量的对变量的操作,在一般情况下不会导致问题,但在多线程操作共享变量时,不当的操作会产生大量的冗余操作,造成性能的浪费。这篇文章主要从编码方式与逻辑策略对变量从CPU寄存器,CPU缓存,直至内存,描述变量的生命周期,性能瓶颈与解决方式。

2.基本原理

2.1 硬件架构

        在CPU需要对数据进行操作时,会按照以下顺序对数据进行获取,若未获取到则继续向下一级获取,直至内存中命中。

         在上面是普通的双路(安装了两颗CPU)双核CPU,也有不带L3的CPU。一般情况下CPU数据读取是按照上述过程执行。可以看出L1,L2是核内共享,L3为CPU内多核共享,而内存为多CPU共享,寄存器会优先去L1查找,再去L2,L3,内存中查找。

        注意:L1分为数据L1和指令L1两部分

2.2 存储层次

        这里引用一张《深入理解计算机系统》中的图

存储器层次结构

        里面完整描述了各部件与速度的关系,各部件获取数据的速度大约在:

部件时钟周期
L12-4
L210-20
L320-60
内存200-300

        时钟周期:时钟周期是CPU主频的倒数,比如2GHz主频的CPU,一个时钟周期是0.5ns,也就是说,主频越高,时钟周期越小。

2.3 实际参数

        以下是一个6核12线程i7-10750H CPU的参数。

缓存大小:        

        在上面的结构中,可以看到,6个核心中,每个核心有32K的数据L1,32K的指令L1,还有256K的L2,12M的L3。在上面可以看到,L1和L2前面分别跟了‘6 X’,而L3没有,表名L3位CPU共享三级缓存。

缓存路数:

        可以看到缓存后有个8-way,4-way,16-way这种,缓存路数用来将缓存行打包标记,用于快速查找数据。比如L1的数据缓存有32K,每个缓存行有64B,那么这个L1的数据缓存中就有32*1024/64=512个缓存行,而这的8-way代表将每8个缓存行打包为512/8=64标记。

2.4 缓存行

缓存行是CPU重很重要的一个结构,在CPU读取数据A时,后面可能再次访问到,并且可能会访问到相邻的数据B,所以为了读取效率,应用到了缓存行的概念,CPU会在读取数据时,将命中对象相邻的区域也读取到缓存行中,这个区域也就是缓存行的大小一般是64Byte。

.......      1(byte)      1(byte)      1(byte)      1(byte)      1(byte)      1(byte)      1(byte)      1(byte)........

3.性能瓶颈

3.1 缓存命中

3.1.1 数据缓存命中

当对一个数组进行遍历的时候,如果在使用到缓存的时候

CPU缓存与性能优化 | 码农家园 (codenong.com)

3.1.2 指令缓存命中

3.1.3 多核CPU下缓存命中

3.2 伪缓存行

解决方式:缓存行填充

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

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

相关文章

Redis面试题整理

认识Redis 什么是Redis? 一种基于内存的数据库;在内存中完成对数据的读写操作;读写速度非常快;常用于缓存,消息队列,分布式锁等场景 Redis和Memcached有什么区别? 共同点 都是基于内存的数据库&#x…

PaddleNLP系列课程二:RocketQA、SKEP(属性级情感分析)、通用信息抽取技术UIE

文章目录一、使用RocketQA搭建端到端的问答系统1.1 问答系统介绍1.2 RocketQA1.2.1 检索式QA VS预训练时代QA1.2.2 RocketQA简介1.3 使用RocketQA搭建问答系统1.3.1 安装1.3.2 使用预置模型完成预测1.3.3 搭建问答系统1.3.3.1 使用Faiss搭建自己的问答系统1.3.3.2 使用Jina搭建…

Leecode---141、142环形链表

141 难度 : easy 个人主要思路是, 循环遍历每个节点, 判断该节点此前是否被访问过。 方法一: 时间8ms , 内存 6.8M , func hasCycle(head *ListNode) bool {var val map[*ListNode]*ListNode{}if head nil {return …

l2逐笔接口数据传输延时高吗?

l2逐笔接口数据传输延时高吗?信息服务商的机器部署在交易所机房内,并通过接口直接向用户转发。按照交易所的规定,每个接收用户均需支付成本十几万,使用l2逐笔接口数据做量化是需要一定门槛。但用户端SDK直连的方式,能最…

C++学习 Day.9(宏和模板简介)

好久没更了,摆还是爽 遗留问题: (16条消息) int&作为函数返回类型-编程语言-CSDN问答(已解决) 宏: 预处理器编译指令都以#打头 #define(宏常量)使得预处理器进行文本替换,而不…

Acwing---795.前缀和

前缀和1.题目2.基本思想3.代码实现4.总结1.题目 输入一个长度为n的整数序列。 接下来再输入m个询问,每个询问输入一对l,r。 对于每个询问,输出原序列中从第l个数到第 r 个数的和。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数&am…

一种简洁又不失优雅的工作流:极狐 flow

本文来自: 万金 极狐(GitLab)解决方案专家 杨周 极狐(GitLab) 高级解决方案架构师 极狐(GitLab) 市场部内容团队 我们提到的 Workflow 是指什么? 我们在日常开发工作中提到的 Workflow 通常是指通过 Git(版本控制工具)实现的分布式…

JavaSE学习day1_03, Java的发展

5. Java语言的扩展知识,重点 5.1 Java语言的发展 java语言前身是oka语言. JDK5:第一个大版本号更新 JDK8:企业中最常用的版本 JDK17:课程中学习的版本 特点:兼容性。 用jdk8编写的代码,用17可以运行 用jdk17编写…

定位bug

1、bug定位常用工具   Firefox——firebug、web developer、 live http headers、http fox IE插件——httpwatch 第三方工具——fiddler 慢速网模拟工具——firefox throttle 1.该选择框使用来选择资源的,当网页被加载的时候向服务器端请求出来的文件包括.htm…

二维码识别率优化实践

本文字数:5939字预计阅读时间:15 分钟概述长按图片识别二维码在移动端是很常见的操作,长按后需要对图片进行识别,并且将二维码中所包含的数据解码出来。在我们的业务场景中,是通过点击图片进入大图预览页面。长按大图预…

项目管理工具dhtmlxGantt甘特图入门教程(六):dhtmlxGantt的扩展完整列表

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理控件应用程序的所有需求,是最完善的甘特图图表库。 这篇文章给大家讲解dhtmlxGantt的扩展完整列表。 DhtmlxGantt正版试用下载(qun:764148812&…

【NI Multisim 14.0原理图环境设置——电路总体设计流程】

目录 序言 🍊知识点 一、电路板总体设计流程 🍉 1.创建电路文件 🍉2.规划电路界面 🍉3.放置元器件 🍉4.连接线路和放置节点 🍉5.连接仪器仪表 🍉6. 运行仿真并检查错误 🍉7…

Dropzone4 for MAC 文件拖拽增强工具

前言 ​​Dropzone for mac是一款文件拖拽操作增强工具,可以让我们把大部分工作都通过拖拽来完成,只需将文件拖拽到菜单栏上的窗口即可。比如保存文本、发送邮件、FTP上传、打开应用等等。提高了用户的工作效率。 下载 Dropzone4 特征 -打开应用程序…

连接格式优化,支持自定义

12月, eKuiper 团队继续专注于 1.8.0 版本新功能的开发。我们重构了外部连接(source/sink) 的格式机制,更加清晰地分离了连接、格式和 Schema,同时支持了格式的自定义;受益于新的格式机制,我们大幅完善了文…

echarts中formatter修改鼠标悬浮事件信息操作、echarts地图块、散点区分触发点击事件 只触发散点问题详解

这里写目录标题1、实例2、案例详解1、实例 这次我拿echarts中 地图组合散点图的实例 !!!实现效果:滑到散点显示不同于地图块的信息 及 formatter 提示窗自定义!!! 这个显示项目名称为"文昌…

千锋教育+计算机四级网络-计算机网络学习-01

目录 课程链接 最早的广域网 计算机网络发展阶段 计算机网络的定义与要点 英文单词网络术语与解释 计算机网络分类 广域网技术 城域网 局域网 个人局域网 五种基本的网络拓扑结构​ 误码率 电路交换网特点 分组交换 交换方式 TCP/IP协议族 IP协议介绍 TCP协议介绍 …

OpenCV的solvePnP函数和Dlib估计头部姿势

一、姿势估计概述1、概述在许多应用中,我们需要知道头部是如何相对于相机倾斜的。例如,在虚拟现实应用程序中,可以使用头部的姿势来渲染场景的右视图。在驾驶员辅助系统中,在车辆中观察驾驶员面部的摄像头可以使用头部姿势估计来查…

React(coderwhy)- 06(RTK)

认识ReduxToolkit 认识Redux Toolkit ◼ Redux Toolkit 是官方推荐的编写 Redux 逻辑的方法。  在前面我们学习Redux的时候应该已经发现,redux的编写逻辑过于的繁琐和麻烦。  并且代码通常分拆在多个文件中(虽然也可以放到一个文件管理,…

[RoarCTF 2019]Online Proxy(x-forwarded-for盲注)

这道题点开题目 然后题目显示不出网,一开始误认为是ssrf了,但是没有更多的信息了。 源码有一个ip会不会是修改X-Forwarded-For就可以了呢,抓包试一下, 发现有两个ip,一个当前一个是last上一个的意思把,…

数字图像处理实验——图像增强

一、实验目的与要求1.掌握图像空域点处理增强方法,包括图像求反,线性灰度变换,以及直方图均衡化方法;2.熟练掌握空域滤波增强方法,包括平滑滤波器及锐化滤波器。二、实验内容及步骤1.图像的求反、线性灰度变换、直方图…