内存一致性(Memory Consistency)模型简介

news2025/1/19 23:27:40

这里写自定义目录标题

  • 1. 前言
  • 2 为什么需要内存一致性(Memory Consistency)模型
  • 3. 什么是内存一致性(Memory Consistency)模型
  • 4. 各种内存一致性(Memory Consistency)模型
    • 4.1 顺序一致性(SC: Sequential Consistency)模型
    • 4.2 完全存储定序(TSO: Total Store Order)模型
    • 4.3 部分存储定序(PSO: Part Store Order)模型
    • 4.4 宽松存储(RMO: Relax Memory Order)模型
  • 5. 内存屏障(memory barrier)
  • 6. 参考资料

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2 为什么需要内存一致性(Memory Consistency)模型

从硬件的角度来看,最初对内存的访问过程大概是这样:

CPU <--> 内存

相对于 CPU 的执行频率,直接访问内存速度较慢。于是引入存储速度比内存更快但更贵更小容量的 CPU cache ,用于缓存最近访问的内存数据,硬件拓扑结构如下图(不考虑多级 cache 情形):
在这里插入图片描述
于是访问内存的过程变成了这样:

1. cahce 命中,直接从 cache 中读取
   CPU <--> CPU cache
2. cahce 未命中,从内存加载到 cache ,再从 cache 读取
   CPU <--> CPU cache <--> 内存

有了 CPU cache,速度上得到了很大提升,但人的追求永无止境,为了更快的速度,在 CPU 和 cache 之间, 又加入了更快更贵更小容量的 store buffer 存储。此时硬件拓扑如下:
在这里插入图片描述
在有 store buffer 缓存的情形下,写操作数据写入到 store buffer ,在需要的时候再写入到 cache 。
说了这么多,这和引入内存一致性模型有什么关系?来看一个例子:假设有两个进程 A 和 B,它们会操作两个相关的变量 g_flag 和 g_var ,g_flag 和 g_var 的初始值均为0;同时进程A绑定到 CPU 0 上执行进程B绑定到CPU 1上执行,进程A和B的代码分别如下:

/* 进程 A 代码,绑定到 CPU 0 执行 */
g_var = 1;
g_flag = 1;
/* 进程 B 代码,绑定到 CPU 1 执行 */
while (g_flag == 0) /* 循环直到 flag != 0 */
	;
temp = g_var; /* temp 的值是多少 */

在编译器没有优化代码中指令的存储顺序的前提下,请问,进程 B 中变量 temp 的值是多少?答案是:可能是 0 也可能是 1 。在没有给出内存访问上下文时,没法对这个问题进行进一步的讨论。这时候,我们需要内存一致性(Memory Consistency)模型,给出内存访问读写(load/store)顺序的定义(也就是内存访问上下文),才可以再来讨论为什么是这样的答案。

3. 什么是内存一致性(Memory Consistency)模型

内存一致性(Memory Consistency)模型就是对内存读写(load/store)的以下4种顺序进行定义:

store-load
store-store
load-load
load-store

store-load 来举例,就是说代码中有两条指令,在顺序上,第1条时写指令(store),第2条是读指令(load),内存一致性(Memory Consistency)模型,就是从硬件设计上,是否保证严格按代码中这两条指令的先后顺序进行内存访问。这是什么意思?譬如在后面提到的 TSO(Total Store Order) 模型上下文,可能的执行情况是这样:第1条写指令(store),执行在 CPU 0 上,将变量 var 数据写入到 store buffer ;第2条读指令(load),执行在 CPU 1 上,它去读取变量 var 的数据,而这时候变量 var 的最新数据在 CPU 0 的 store buffer 里面,CPU 1 是无法看到 CPU 0 的 store buffer 的,所以读取的就不是变量 var 的最新值

4. 各种内存一致性(Memory Consistency)模型

4.1 顺序一致性(SC: Sequential Consistency)模型

所有章节 3 中提到的4种存储操作,严格按照代码顺序执行。在 顺序一致性(SC: Sequential Consistency)模型 下,我们例子中进程 B 中 temp 变量的值最后为 1 。

4.2 完全存储定序(TSO: Total Store Order)模型

章节 3 中提到的4种存储操作,允许 store-load 的写读存储操作乱序,其它操作保序。在 完全存储定序(TSO: Total Store Order)模型 下,我们例子中进程 B 中 temp 变量的值最后可能为 0 或 1 。

4.3 部分存储定序(PSO: Part Store Order)模型

章节 3 中提到的4种存储操作,允许 store-load,store-store 的存储操作乱序,其它操作保序。在 完全存储定序(TSO: Total Store Order)模型 下,我们例子中进程 B 中 temp 变量的值最后可能为 0 或 1 。

4.4 宽松存储(RMO: Relax Memory Order)模型

章节 3 中提到的4种存储操作,允许所有4种操作乱序。在 完全存储定序(TSO: Total Store Order)模型 下,我们例子中进程 B 中 temp 变量的值最后可能为 0 或 1 。

5. 内存屏障(memory barrier)

为了解决内存操作乱序引入的问题,引入了 内存屏障 (memory barrier) 来解决这些问题。如 ARM 的 DMB, DSB, ISB 指令等,更多关于 内存屏障 (memory barrier) 的细节将不在此处展开,感兴趣的读者可查找相关资料。

6. 参考资料

《perfbook.2018.12.08a.pdf》

https://zhuanlan.zhihu.com/p/422848235
https://blog.csdn.net/anyegongjuezjd/article/details/125954805

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

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

相关文章

外贸人如何精准开发客户?Facebook开发客户全攻略

现在做跨境的都了解的一个社媒平台就是Facebook了&#xff0c;因为很多人都会拿Facebook来开发客户&#xff0c;忙里偷闲&#xff0c;今天东哥就来聊聊用Facebook开发客户的一些心得。 用Facebook开发客户的心得 1、利用关键词搜索 使用行业相关的关键词、产品特定的关键词、相…

菁染料-N-羟基琥珀酰亚胺酯Cyanine7-NHS ester活性脂1432019-64-1

CY7-NHS ester是一种荧光染料&#xff0c;具有橙红色荧光。它的化学式为C41H48ClN3O4&#xff0c;分子量为733.64。CY7-NHS的荧光特性适合生物学应用&#xff0c;它的激发波长为750nm&#xff0c;发射波长为773nm&#xff0c;可用于近红外成像。这种标记物可以用于活细胞成像、…

案例10:Java外卖平台设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

web开发中如何知道表单的数据是否发生了变更,后端框架又是如何响应的,都有哪些方案

前言 针对web界面开发&#xff0c;今天对于一些细节做了一点总结与回想&#xff0c;好久不做web开发了&#xff0c;今天竟然都忘记了以前的界面组件、后端orm映射框架的一些基础知识了&#xff0c;今天主要总结的内容是&#xff0c;当界面提交一个表单后&#xff0c;vue是如何…

【JavaEE】wait/notify方法 和 单例模型

目录 前言 1、 wait和notify 1.1、wait()方法 1.2、notify&#xff08;&#xff09;方法 1.3、wait和sleep 的对比 2、单例模式 2.1、饿汉模式 2.2、懒汉模式 2.3、上述懒汉模式和饿汉模式在多线程情况下是否安全 2.3.1、解决懒汉模式多线程不安去问题 前言 这里补充…

网络安全面试题合集

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…

瑞吉外卖 - 启用与禁用员工账号功能(8)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

最新入河排污口设置论证、水质影响预测与模拟、污水处理工艺分析及典型建设项目入河排污口方案报告书

随着水资源开发利用量不断增大&#xff0c;全国废污水排放量与日俱增&#xff0c;部分河段已远远超出水域纳污能力。近年来,部分沿岸入河排污口设置不合理&#xff0c;超标排污、未经同意私设排污口等问题逐步显现&#xff0c;已威胁到供水安全、水环境安全和水生态安全&#x…

Packet Tracer – 配置 VLAN

Packet Tracer – 配置 VLAN 地址分配表 设备 接口 IP 地址 子网掩码 VLAN PC1 NIC 172.17.10.21 255.255.255.0 10 PC2 NIC 172.17.20.22 255.255.255.0 20 PC3 NIC 172.17.30.23 255.255.255.0 30 PC4 NIC 172.17.10.24 255.255.255.0 10 PC5 NI…

open3d 表面重建

目录 1. create_from_point_cloud_ball_pivoting 2. create_from_point_cloud_alpha_shape 3. create_from_point_cloud_poisson 从以下效果来看&#xff0c;第三个方法最好。 1. create_from_point_cloud_ball_pivoting 关键代码&#xff1a; rec_mesh o3d.geometry.T…

面试被问麻了....

前几天组了一个软件测试面试的群&#xff0c;没想到效果直接拉满&#xff0c;看来大家对面试这块的需求还是挺迫切的。昨天我就看到群友们发的一些面经&#xff0c;感觉非常有参考价值&#xff0c;于是我就问他还有没有。 结果他给我整理了一份非常硬核的面筋&#xff0c;打开…

2022年美国大学生数学建模竞赛F题人人为我,我为人人解题全过程文档及程序

2022年美国大学生数学建模竞赛 F题 人人为我&#xff0c;我为人人 原题再现&#xff1a; 背景:   世界上大多数国家签署了1967年联合国《外层空间条约》&#xff0c;条约内容包括同意探索和利用外层空间&#xff0c;包括月球和其他天体&#xff0c;不论各国经济或科学发展程…

低成本挖出电商API接口-程序员要注意那些事项-技术分享

在开发电商应用的过程中&#xff0c;获取天猫API接口是非常必要的一步。天猫API提供了丰富的商品数据获取、订单管理、支付管理等功能&#xff0c;但是天猫API一般需要进行开发者认证&#xff0c;而认证需要企业资质和若干费用支出&#xff0c;这对个人开发者和小型业务开发者来…

Postgresql数组与Oracle嵌套表的使用区别

oracle中的多维数组 Oracle中常说的数组就是嵌套表&#xff0c;下面给出两个多维使用实例&#xff0c;引出和PG的差异&#xff1a; 一维赋值&#xff08;第一行给1列&#xff09; set serveroutput on; declaretype arr_num is table of number;type arr_arr_num is table o…

任务队列的Java实现

一、需求背景 当前项目中遇到这样一个需求: 将需要审核的文本提交给人工智能模型接口审核&#xff0c;等待模型接口审核完毕以后拿到审核结果返回给前端展示给用户&#xff08;另&#xff1a;模型处理数据所消耗的时间会随着用户提交数据的复杂度有所变化&#xff09;。 以上需…

毫米波雷达系列 | 传统CFAR检测(自适应类)

毫米波雷达系列 | 传统CFAR检测&#xff08;自适应类&#xff09; VI-CFAR [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dV34CKJt-1684215839850)(毫米波雷达系列 传统CFAR检测&#xff08;自适应类&#xff09;.assets/image-20230516131206695…

Recognizing Micro-Expression in Video Clip with Adaptive Key-Frame Mining阅读笔记

本文主要贡献 据我们所知&#xff0c;这是第一项旨在将视频剪辑中的信息时间子集的端到端学习与单个网络中的微表情识别相结合的工作。 此外&#xff0c;所提出网络中所有模块的设计都与输入视频剪辑的长度无关。 换句话说&#xff0c;网络容忍各种长度的微表情剪辑。 本文的贡…

水利工程电子(数字)沙盘

水利工程电子&#xff08;数字&#xff09;沙盘利用三维地理信息系统、遥感技术、海量数据管理技术、虚拟现实技术、网络通讯技术和高性能计算机技术等现代高新信息技术&#xff0c;采用高精度DEM地形数据、遥感影像、航拍影像和基础地理矢量数据&#xff0c;建立三维空间场景&…

SAAS 与 IAAS 云渲染农场比较

渲染时&#xff0c;最重要的是需要的时间和硬件可用的。此渲染过程需要大量计算能力才能快速创建图像或视频。GPU&#xff08;图形处理单元&#xff09;是图形的计算能力&#xff0c;越来越多地用于渲染CAD模型。GPU中有特殊的处理器&#xff0c;可以执行用于快速编辑和显示图像…

TCP的拥塞控制

为了避免发送方无节制地发送数据&#xff0c;从而造成网络拥堵&#xff0c;所以 TCP 有一个拥塞控制。 流量控制&#xff1a;作用于接收方&#xff0c;控制发送者发送速度&#xff0c;从而使接收者来得及接收&#xff0c;防止分组丢失。 拥塞控制&#xff1a;作用于网络&#…