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

简介: 【JMM内存模型-4】JMM内存模型之CPU缓存策略

CPU缓存策略原理

缓存概述

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

cpu缓存策略图

image-befe0fe78f34497ca8d0883a0097c939.png

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

多核CPU结构图

image-41ad077489cd4cc382685eed9fd2489d.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-acb999cd38884866a58d805bb9780d3d.png

cpu缓存一致性问题

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

image-7506ee0aef2e458987efcfdaa51512a8.png

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

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

cpu缓存一致性解决方案

1.总线加锁

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

2.缓存上的一致性协议MESI

后续再说MESI先有个印象

程序的局部性原理

问题

构建数组

image-92a962030ac04dc28a13f8324a01faed.png

创建一个大的二维数组

image-369cb435868d402b8643357a192a4973.png

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

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

image-35007e0902c54f25814077770d7b4ae9.png

image-96cf2b153def48acb0bf1df98b8df0a0.png

image-beb85e7801b84f9a908fc49ba7480a13.png

思考问题

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

分析原理

上面一种连续按行读取

image-a2e7c1bfd7d54868b0fa6e7995200292.png

下面一种是按列读取

image-93f026caf277448d94de76ec620d4963.png

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

一、什么是局部性原理

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

空间局部性

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

时间局部性

被引用过一次的存储器位置在未来会被多次引用那么在近期它很可能还会被再次访问
相关文章
|
11月前
|
存储 缓存 NoSQL
工作 10 年!Redis 内存淘汰策略 LRU 和传统 LRU 差异,还傻傻分不清
小富带你深入解析Redis内存淘汰机制:LRU与LFU算法原理、实现方式及核心区别。揭秘Redis为何采用“近似LRU”,LFU如何解决频率老化问题,并结合实际场景教你如何选择合适策略,提升缓存命中率。
1393 3
|
12月前
|
机器学习/深度学习 监控 安全
解密虚拟化弹性内存:五大核心技术与实施策略
本文深入解析虚拟化环境中实现内存弹性管理的五大核心技术与实施策略。内容涵盖内存架构演进、关键技术原理、性能优化方法及典型问题解决方案,助力提升虚拟机密度与资源利用率。
488 0
|
边缘计算 算法 Java
Java 绿色计算与性能优化:从内存管理到能耗降低的全方位优化策略与实践技巧
本文探讨了Java绿色计算与性能优化的技术方案和应用实例。文章从JVM调优(包括垃圾回收器选择、内存管理和并发优化)、代码优化(数据结构选择、对象创建和I/O操作优化)等方面提出优化策略,并结合电商平台、社交平台和智能工厂的实际案例,展示了通过Java新特性提升性能、降低能耗的显著效果。最终指出,综合运用这些优化方法不仅能提高系统性能,还能实现绿色计算目标,为企业节省成本并符合环保要求。
364 0
|
存储 人工智能 自然语言处理
AI代理内存消耗过大?9种优化策略对比分析
在AI代理系统中,多代理协作虽能提升整体准确性,但真正决定性能的关键因素之一是**内存管理**。随着对话深度和长度的增加,内存消耗呈指数级增长,主要源于历史上下文、工具调用记录、数据库查询结果等组件的持续积累。本文深入探讨了从基础到高级的九种内存优化技术,涵盖顺序存储、滑动窗口、摘要型内存、基于检索的系统、内存增强变换器、分层优化、图形化记忆网络、压缩整合策略以及类操作系统内存管理。通过统一框架下的代码实现与性能评估,分析了每种技术的适用场景与局限性,为构建高效、可扩展的AI代理系统提供了系统性的优化路径和技术参考。
958 4
AI代理内存消耗过大?9种优化策略对比分析
|
存储 缓存 监控
手动清除Ubuntu系统中的内存缓存的步骤
此外,只有系统管理员或具有适当权限的用户才能执行这些命令,因为这涉及到系统级的操作。普通用户尝试执行这些操作会因权限不足而失败。
2190 22
|
弹性计算 安全 数据库
【转】云服务器虚拟化内存优化指南:提升性能的7个关键策略
作为云计算服务核心组件,虚拟化内存管理直接影响业务系统性能表现。本文详解了内存优化方案与技术实践,助您降低30%资源浪费。
521 0
【转】云服务器虚拟化内存优化指南:提升性能的7个关键策略
|
缓存 并行计算 PyTorch
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
2525 0
|
存储 分布式计算 监控
阿里云服务器实例经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i详解与选择策略
在阿里云现在的活动中,可选的云服务器实例规格主要有经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例,虽然阿里云在活动中提供了多种不同规格的云服务器实例,以满足不同用户和应用场景的需求。但是有的用户并不清楚他们的性能如何,应该如何选择。本文将详细介绍阿里云服务器中的经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例的性能、适用场景及选择参考,帮助用户根据自身需求做出更加精准的选择。
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
1627 0