首页 > 系统相关 >【JMM内存模型-4】JMM内存模型之CPU缓存策略-jmmcpu4

【JMM内存模型-4】JMM内存模型之CPU缓存策略-jmmcpu4

时间:2023-05-19 11:58:01浏览次数:47  
标签:缓存 读取 模型 Cache 内存 JMM CPU

title: 【JMM内存模型-4】JMM内存模型之CPU缓存策略
date: 2021-11-17 13:27:48.139
updated: 2021-12-26 17:43:10.442
url: https://www.yby6.com/archives/jmmcpu4
categories: 
- 并发编程-JMM内存模型
tags: 
- 并发编程

CPU缓存策略原理

缓存概述

CPU为了提升执行效率,减少CPU与内存的交互(交互影响CPU效率),一般在CPU上集成了多级缓存架构

cpu缓存策略图

image.png

cpu读取数据时, 会先从自己的寄存器当中读取.如果没有再从Cache当中读取数据.如果Cache当中也没能.再从内存当中获取.然后再依次缓存

多核CPU结构图

image.png

三级缓存

L1 Cache
	分为数据缓存和指令缓存,逻辑核独占
	 CPU所有操作的数据全部在寄存器当中完成
	寄存器比L1要快
	离CPU内核最近
	内核独享
	L1一种存指令,一种存数据
L2 Cache
	内核独享
L3 Cache
	所有内核共享

缓存读取时间

Registers(寄存器组)   `<1ns`

L1 cache (一级缓存)   `约1ns`

L2 cache(二级缓存)  `约3ns`

L3cache(三级缓存)   `约15ns`

主内存(最终存储地址) `约80ns`

缓存行Cache Line概念

1. 缓存是由最小的存储区块缓存行Cache Line组成
2. 计算机当中为了让效率更高,在读取数据时,是一块一块进行读取的
3. cache Line能够读取的大小是64个字节

image.png

cpu缓存一致性问题

假设cpu1从主内存当中读取一个共享数据i = 1,读取到cache当中 进行数据的修改,把i修改为2
image.png

一、同时同一个cpu也从内存当中读取数据

  1. 此时读取的结构可能是1也可能是2
  2. 如果cpu1把写的结果写到到内存中, cpu2读取的就是2
  3. 如果cpu1没有把结果写回到主内存当中,cpu2读取的就是1

cpu缓存一致性解决方案

1.总线加锁

	cpu1在读取的时候不允许其它cpu进行读取
	弊端: 降低了cpu的吞吐量

2.缓存上的一致性协议MESI
后续再说MESI先有个印象

程序的局部性原理

问题

构建数组

image.png

创建一个大的二维数组

image.png

任务:两种方式所有元素进行求和

请自行根据图片将代码执行查看效果

任务一

任务二

image.png

思考问题

为什么会产生这么多时间呢? 如何进行读取的呢?

分析原理

上面一种连续按行读取

image.png

下面一种是按列读取
image.png

经过上面的问题牵扯出一个叫局部性原理的问题

一、什么是局部性原理

  1. 在CPU访问寄存器时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理
  2. 当读到某一个数据的时候,可能很快就会用到和它相邻的值,此时就会把它相邻的值也一起读取,来提高程序的效率
  3. 局部性原理有些像概率问题,被使用过的数据:在时间上,大概率会被多次使用;在空间上,其附近的位置“大概率”也会被引用

空间局部性

如果一个存储器的位置被引用,那么将来他附近的位置也会被引用

时间局部性

被引用过一次的存储器位置在未来会被多次引用那么在近期它很可能还会被再次访问

标签:缓存,读取,模型,Cache,内存,JMM,CPU
From: https://www.cnblogs.com/Yangbuyi/p/17414616.html

相关文章

  • 结合实例,解读华为云数字工厂信息模型配置器
    摘要:结合一个实际的“生产执行管理”场景涉及的相关业务数据对象,系统介绍了华为云数字工厂平台的“信息模型”配置器的使用方法,实现对相关业务对象的数据建模。本文分享自华为云社区《数字工厂深入浅出系列(二):信息模型配置器的使用方法介绍》,作者:云起MAE。华为云数字工厂平台,采......
  • golang 内存 stats 字段解释
    字段解释样例Alloc当前堆中已经分配给对象使用所占用的空间字节数322952TotalAlloc累计堆中已经分配给对象使用所占用的空间字节数,只会增长,不会减少29511472Sys总共从OS申请的字节数,包含运行时的heap、stack和其他内部数据结构的总和,它是虚拟内存空间。不一......
  • 多路复用IO模型和非阻塞IO模型的区别?
    常见的LinuxIO模型:阻塞IO模型:当应用程序调用read或write等IO操作时,如果内核没有准备好数据,那么应用程序就会一直阻塞等待,直到内核准备好数据后才会返回。在这种模型下,应用程序通常只能同时处理一个连接,效率较低。非阻塞IO模型:当应用程序调用read或write等IO操作后,如果内核没有......
  • 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理
    PaddleInference模型推理流程分别介绍文字检测、方向分类器和文字识别3个模型,基于PaddleInference的推理过程。PaddleInference的Python离线推理离线推理,即在特定机器上部署的代码只能在这台机器上使用,无法通过其他机器进行访问使用whl包预测推理“WHL”是“WHeeL”......
  • 点、线、面、体、魂——企业精益数字化的五阶段模型
     制造业精益数字化是企业精益管理实践与数字化技术的深度融合与相互赋能,其实现路径主要包括“点、线、面、体、魂”五个阶段以及每个阶段所匹配的三层次数字技术。精益数字化的关键驱动力是企业精益实践的不断迭代升级,并在该过程中辅以适配的数字技术。部分典型制造企业通过......
  • ent M2M模型在pxc集群中的一个大坑
    entM2M模型在pxc集群中的一个大坑事故简要分析PXC集群3个节点,在插入数据时,如果使用数据库自己生成的主键,一般顺序为1,4,7,10…这里就是坑的源头,在ent底层代码中,在做M2M模型插入时,会先插入两个模型,再插入中间表。即,假设M2M模型为group和user(https://entgo.io/docs/schema-edges......
  • C语言--动态内存分配2
    realloc--追加动态内存空间relloc函数追加的两种形式:原动态内存空间后有足够空间进行追加时直接追加。返回原动态内存地址。原动态内存空间厚不够追加空间时,则重新开辟动态内存空间,复制原有内存空间大小、数据并在  其后追加空间。释放原动态内存,返回新的动态内存地址。动态内......
  • 文心大模型提示词笔记——应用场景案例
    发现:绝大多数应用场景的Prompt,质量都与使用者对“好结果”的了解成正比。1产品海报2写科普文 3写代码指定Markdown、js总结一下这几个例子·拿到应用场景后,先试着判断场景的任务特点,结合任务共性先优化一波。再结合场景主体、应用场合的特点,对生成内容的需求做一些补充说明。......
  • 「聊天机器人构建、智能文档问答」大模型应用开发实操课程来了
    此刻,生成式AI正以惊人的势头改变着我们的世界,无论是在科技、商业还是日常生活中,新的浪潮席卷着全球各个行业和领域。跟过去十几年中“有多少人工就有多少智能”的智障AI比起来,大模型如OpenAI的GPT-4、百度的文心一言、谷歌的PaLM2所展现出惊人的语言理解和生成能力,让人......
  • 看模型、做技术交底、做项目汇报,这款BIM+CAD+GIS工具免费了
    现场汇报效果不好,导致丢了一个项目!项目汇报平淡无奇,方案屡次被毙!面对专家质疑,回答苍白无力!估计大家都有过这种经历和感受。详细分析一下,基本上有以下几个方面的原因:➤ 汇报的时候,找不到合适的软件做三维演示?Revit、SketchUp等建模软件不适合演示汇报,而且还缺少周边环境信息。......