memory consistency

memory consistency model

        定义了对于programmer和implementor来说,访问shared memory system的行为;

        对于programmer而言,他知道期望值是什么, 知道会返回什么样的数据;;

        对于implementro而言,他知道应该取怎么实现,知道需要提供什么样的数据;

shared memory的访问,会带来什么问题?

 本意是,想要在flag==SET时,获取r2的内容为NEW;
 但是如果core1 进行reorder, S2先执行,S1后执行,则可能拿到的数据为0(初始值);

因为core可以进行重排序,因此,如果core c1先执行S2(有可能,因为两个store地址不同),则可能会拿到r2=0, 而不是预期的new;

有哪些reorder memory access的方式?

  •  store-store reordering

        如果一个core的write buffer不是fifo结构的,则两个store可能会被重排序;

        例如:

                如果第一个store在cache中是miss的,第二个是hit的;

                或者第二个store可以与更早的进行merge;

        所以,即使core是按照po的顺序来执行的,reorder也可能发生;

        对于单个thread而言,究竟以什么顺序执行无所谓,但是多余多线程,如上图所示,其执行的顺序,就会影响程序预期的结果;

  • load-load reordering

        现代的动态调度的core, 可能执行顺序与po不同。例如,在上面的例子中,Core C2, 可能会先执行L1, 再执行L2, 抑或相反;

        对于单线程而言,这种乱序,不会有影响,因为其地址是不同的;

        对于多线程而言,如果两个core之间,存在相同地址的访问,则可能出现如图所示的各种执行顺序,对程序的执行结果,也会有相应影响;

  • Load-store and store-load reordering.

        对于不同地址的store和load,也会发生乱序;

        考虑load,xxx, store, 乱序后,可能会有各种问题,例如load/store本来是受lock保护的,store是release lock, 如果交换了顺序,此load不再受保护;

        考虑store, xxx, load,如下图所示:

        store-load reorder, 会导致r1/r2的值,都读到0;
        这个例子,也是满足SWMR Invariant的,所以造成这个的原因,与coherence没关系;

        需要注意的是,store-load reordering, 可能也是因为FIFO write buffer的local bypassing造成的,所以,即使core是按照PO的顺序来执行,也可能导致程序未按照预期执行;

这些例子都引出一个问题:对于一段特定的programm order的程序,其具体的执行结果,是不确定的;Thus, we must consider non-determinism when defining shared memory behavior(因此,在定义共享内存行为时,我们必须考虑不确定性。)

        

什么是memory consistency model?

上面的例子说明了,share memory的具体行为是微妙的,所以这就使得解决:

  • programmer可以预期怎样的行为;
  • implementors可以做什么样的优化;

 这两个问题有了意义;

memory consistency model就是为了解决这两个问题;

  • 它是定义了多线程访问share memory的一种规范;
  • 对于多线程,如果给定了输入数据,它定义了load可能返回的值;
  • 不同于单线程,多线程通常有多个正确的行为;

通常情况下, memory consistency model(MC)定义的rule支持两种规则:

  • 需要服从MC的partiion
  • 以及不需要服从MC的partition;

memory consistency model VS memery coherence

  • coherence只是简单的提供给处理器piple一个抽象的memory system;
  • 它自己并不能决定shared memory behavior, 而是要受pipeline的影响;
    • 例如,pipeline对memory operation进行了reorder, coherence即使工作正确,对share memory的操作也是错误的;
  • In summary:
    • Cache coherence does not equal memory consistency. 
    • A memory consistency implementation can use cache coherence as a useful “black box.” 
    • consistency model由core pipeline与一致性协议相结合来实现;

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

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

相关文章

微信小程序原生代码实现小鱼早晚安打卡小程序

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 小鱼早晚安打卡小程序:开启健康生活,共享正能量 在这个快节奏的时代,我们常常被各种琐事和压力所困扰,以至于忽略了对健康生活方式的追求。然…

【探秘地球宝藏】矿产资源知多少?

当我们仰望高楼林立的城市,乘坐便捷的交通工具,享受各种现代生活的便利时,你是否曾想过这一切背后的支撑力量?答案就藏在我们脚下——矿产资源,这些大自然赋予的宝贵财富,正是现代社会发展的基石。今天&…

OpenHarmony 实战开发——ABI

OpenHarmony系统支持丰富的设备形态,支持多种架构指令集,支持多种操作系统内核;为了应用在各种OpenHarmony设备上的兼容性,本文定义了"OHOS" ABI(Application Binary Interface)的基础标准&#…

idea中取消自动导包顺序

1、取消自动导入 2、取消导包顺序设置

Python学习笔记------处理数据和生成折线图

给定数据: jsonp_1629344292311_69436({"status":0,"msg":"success","data":[{"name":"美国","trend":{"updateDate":["2.22","2.23","2.24",&qu…

奶爸预备 |《P.E.T.父母效能训练:让亲子沟通如此高效而简单:21世纪版》 / 托马斯·戈登——读书笔记

目录 引出致中国读者译序前言第1章 父母总是被指责,而非受训练第2章 父母是人,不是神第3章 如何听,孩子才会说:接纳性语言第4章 让积极倾听发挥作用第5章 如何倾听不会说话的婴幼儿第6章 如何听,孩子才肯听第8章 通过改…

保研面试408复习 3——操作系统

文章目录 1、操作系统一、进程有哪几种状态,状态之间的转换、二、调度策略a.处理机调度分为三级:b.调度算法 标记文字记忆,加粗文字注意,普通文字理解。 为什么越写越少? 问就是在打瓦。(bushi) 1、操作系统 一、进程…

设计模式Java实现-建造者模式

楔子 小七在2019年的时候,就想写一个关于设计模式的专栏,但是最终却半途而废了。粗略一想,如果做完一件事要100分钟,小七用3分钟热情做的事,最少也能完成10件事情了。所以这一次,一定要把他做完&#xff0…

Windows常用快捷键与CMD常用命令

1.win系列快捷键使用 WinD,快速进入桌面 WinE,打开我的电脑(文件资源管理器) WinI,打开设置界面 WinL,快速锁屏 WinM,最小化所有窗口 WinShiftM,还原最小化的窗口 WinV&#…

为什么下载卡在idealTree:NodeJS: sill idealTree buildDeps

可能使用的是npm config set registry https://registry.npm.taobao.org而这个镜像文件已经过期了 解决方法如下: 先使用 npm cache clean --force 清除缓存 再切换镜像源 再使用npm config get registry 进行查看是否换源成功 再使用 npm install -g vue/cli 就…

【算法】滑动窗口——长度最小的子数组

本篇文章是用一个实例来介绍常用算法之一“滑动窗口”的相关概念,有需要借鉴即可。 目录 1.题目2.暴力求解2.1暴力求解思路:2.2时间复杂度是多少? 3.暴力求解的优化3.1固定left的情况下,优化right的次数。3.2sum求值优化3.3不同组…

商城数据库88张表结构完整示意图81~88及总览图(十六)

八十一: 八十二: 八十三: 八十四: 八十五: 八十六: 八十七: 八十八: 总览图:

Redis开源社区持续壮大,华为云为Valkey项目注入新的活力

背景 今年3月21日,Redis Labs宣布从Redis 7.4版本开始,将原先比较宽松的BSD源码使用协议修改为RSAv2和SSPLv1协议,意味着 Redis在OSI(开放源代码促进会)定义下不再是严格的开源产品。Redis官方表示,开发者…

websevere服务器从零搭建到上线(四)|muduo网络库的基本原理和使用

文章目录 muduo源码编译安装muduo框架讲解muduo库编写服务器代码示例代码解析用户连接的创建和断开回调函数用户读写事件回调 使用vscode编译程序配置c_cpp_properties.json配置tasks.json配置launch.json编译 总结 muduo源码编译安装 muduo依赖Boost库,所以我们应…

webpack与vite

webpack 使用步骤: 初始化项目 pnpm init -y安装依赖webpack、webpack-cli在项目中创建src目录,然后编写代码(index.js)执行pnpm weboack来对代码进行打包(打包后观察dist文件夹) 配置古文件(w…

使用ThemeRoller快速实现前端页面风格美化

使用ThemeRoller快速实现前端页面风格美化 文章目录 使用ThemeRoller快速实现前端页面风格美化一、ThemeRoller二、使用方法1.基本操作面板介绍2.直接用现成的配色风格——Gallery画廊3.自定义风格——Roll Your Own4.下载风格包并应用到页面 一、ThemeRoller ThemeRoller是jQ…

基于java的CRM客户关系管理系统的设计与实现(论文 + 源码 )

【免费】基于Java的CRM客户关系管理系统的设计和实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89273409 基于Java的CRM客户关系管理系统的设计与实现 摘 要 随着互联网的高速发展,市场经济的信息化,让企业之间的竞争变得&#xff0…

纯血鸿蒙APP实战开发——页面间共享组件实例的案例

介绍 本示例提供组件实例在页面间共享的解决方案:通过Stack容器,下层放地图组件,上层放Navigation组件来管理页面,页面可以共享下层的地图组件,页面中需要显示地图的区域设置为透明,并参考触摸交互控制&am…

各城市-人口就业和工资数据(1978-2022年)

这份数据收集了1978年至2022年间300多个地级市的人口、就业和工资等数据。涵盖的指标包括从业人员数量、平均工资水平、人口密度等,通过这些数据可以深入了解中国各地城市的人口结构、就业状况以及工资水平的变化趋势。这些数据对于研究城市发展、劳动力市场以及区域…

论文架构介绍

论文架构 背景:建议2段左右完成,字数控制在500左右为佳,对应子题目1过渡段:写150字左右的过渡段,承上启下,回答部分子题目2、3的要求正文实践部分:一般3-7个论点,根据题目的要求来看…