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)的基础标准&#…

【Numpy】一文向您详细介绍 np.linspace()

【Numpy】一文向您详细介绍 np.linspace() 🌈 欢迎莅临我的个人主页👈 这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的计算机专业人士,热衷于分享技术见…

idea中取消自动导包顺序

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

英语写作中“最后”finally、eventually、in the end、at last的用法

一、finally 是最通用的单词,它可以表示所有中文里“最后”的意思,例如: First do Task 1. Then do Task 2. Finally do Task 3.(首先做任务1,再做任务2,最后做任务3。) 上面是描述一个协议的…

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

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

实用的Chrome浏览器命令

Google Chrome 是一款广泛使用的网络浏览器,它提供了许多实用的快捷键和命令,可以帮助用户更高效地浏览网页。以下是一些常用的 Chrome 浏览器命令: 1. 新标签页: Ctrl T (Windows/Linux) 或 Command T (Mac) 2. 关闭当前标签: Ctrl W 或…

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

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

出海战略与技术:利用SOCKS5代理和代理IP加速跨界电商与游戏行业的全球拓展

在全球化的商业环境中,"出海"已成为中国企业扩展国际市场的重要战略。尤其是在跨界电商和游戏行业,企业不仅需要理解和适应多元文化的市场,还需要有效地克服技术和网络安全方面的挑战。在这种情况下,SOCKS5代理和代理IP…

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

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

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

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

《QT实用小工具·五十七》基于QT的语音识别

1、概述 源码放在文章末尾 该文章实现了简单的语音识别功能,首先,语音识别要做三件事情 : 1.记录用户的语音文件到本地 2.将用户语音编码 使用flac或者speex进行编码 3.使用第三方语音识别API或者SDK进行分析识别语音 目前做的比较简单就是使…

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

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

详细介绍Eclipse的安装过程

**Eclipse安装指南** 一、引言 Eclipse是一个广泛使用的集成开发环境(IDE),主要用于Java语言的开发,但也支持其他多种编程语言。Eclipse以其强大的功能、灵活的插件系统和开源的特性,赢得了众多开发者的青睐。本文将…

android 启动优化方向跟踪

先简单带过framwork以上的流程,主要看framwrok里面的步骤 一 前期启动流程速览 1 kernel内核空间启动 负责启动 native层的init进程 具体可以参考linux内核( Bootloader启动Kernel的swapper进程(pid0),它是内核首个进程,用于初始…

为什么下载卡在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官方表示,开发者…