阅记-横向优化-底层架构-《HPC-一文彻底搞懂并发编程与内存屏障》

目录
  • Momory Ordering
    • 9.2.3.2 Neither Loads Nor Stores Are Reordered
    • 9.2.3.3 Stores Are Not Reordered With Earlier Loads
    • 9.2.3.4 Loads May Be Reordered with Earlier Stores (intel x64架构下唯一会有memory reorder的情况)
    • 内存屏障的实现

参考:HPC(高性能计算第一篇):一文彻底搞懂并发编程与内存屏障 [1] [2] [3]

Momory Ordering

memory barrier是memory乱序后产生的问题,和cpu架构强相关。
参考:Intel sdm手册 卷3A 多处理器管理,第二小节:内存顺序,专门讲述Memory barrier问题;

9.2.3.2 Neither Loads Nor Stores Are Reordered

9.2.3.2 节,是第一个关于内存顺序的例子

Q: 何为乱序?
A:

    1. 两个操作独立,互不依赖,多流水线架构下两条指令可以同时执行;
    1. 同时执行或者先后执行的情况下,也可能因为_y变量已经存在于cache中而先于_x执行
    1. intel cpu架构下,虽然2)执行乱序,但是到最后阶段(提交阶段吗?)又会顺序退出,即旁观者看来还是_x先执行完_y再执行完,所以intel的sdm手册这一小节的标题为Neither loads nor strores are reoredered,并描述r1 = 1 and r2 = 0 is not allowed,CPU使用一个叫内存排序区的部件,完成这种顺序性(待研究)
    1. 其他cpu架构,允许提交阶段乱序的话,那么P1就可能看到_y = 1 _x = 0的结果

Q: 对于4)怎么解决?

A:P0加上write_barrier, P1加上read_barrier(read同样可能乱序)


9.2.3.3 Stores Are Not Reordered With Earlier Loads

接下来的9.2.3.3 节描述了另外一种场景先有load操作再有store操作,这种场景下store操作也不会被reorder到load操作前


9.2.3.4 Loads May Be Reordered with Earlier Stores (intel x64架构下唯一会有memory reorder的情况)

9.2.3.4 读可以重排到写之前, intel x64架构下唯一会有memory reorder的情况

比如有种代码逻辑:1)mov _x,1 表示加本地的锁;2)mov r1, _y 表示检测其他线程当前是否有上锁;3)如果r1或者r2为0,表示其他线程没上锁,当前线程可以执行

正常顺序下,某一方赋值先执行,则另外一方读取肯定不为0,r1 r2可以是(1,1)(1,0)(0,1),但是同时为0不会发生,即P0 P1不会同时执行需要互斥的临界代码

有memory reorder下,read先于之前的write先执行,则r1 r2可能会同时为0,导致P0 P1同时执行需要互斥的临界代码
如果不想有这种乱序则需要上内存屏障

+++
内存屏障是内存顺序问题,即,内存操作本来是能分清先后顺序的,写先读后,但顺序被打乱了,读被提到前面了。如果不想打乱顺序,需要“屏障”,挡住后面的读,防止它提前执行、提前完成。
当程序逻辑依赖读写顺序,才需要使用内存屏障,如果程序逻辑并不依赖顺序,就让读被提前吧,这样对性能有帮助
(判断程序逻辑是否依赖顺序,有时候不是那么容易的)

内存屏障的实现

lock 和 mfence 指令

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

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

相关文章

2024-2025-1 20241322 《计算机基础与程序设计》第十二周学习总结

2024-2025-1 20241322 《计算机基础与程序设计》第十二周学习总结 作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12这个作业的目标 《C语言程序设计》第11章作业…

20222415 2024-2025-1 《网络与系统攻防技术》实验七实验报告

1.实验内容 1.实验内容 (1)简单应用SET工具建立冒名网站 (2)ettercap DNS spoof (3)结合应用两种技术,用DNS spoof引导特定访问到冒名网站。 2.实验过程 (1)简单应用SET工具建立冒名网站 systemctl start apache2开启apache2服务,然后输入setoolkit,进入set工具后选…

网站修改费,网站维护和更新的费用如何计算

网站修改费用因项目复杂度和工作量而异。一般考虑以下因素:工作量:根据修改内容的多少和难度评估工作量。 时间成本:根据开发人员的小时费率计算总费用。 技术难度:涉及复杂功能或特殊技术的项目费用较高。 维护周期:长期维护合同通常会有优惠。 客户需求:根据客户的具体…

修改网站图片内容,网站图片管理技巧

修改网站图片内容通常涉及上传新图片和更新HTML或CSS文件,以下是一些具体步骤:上传新图片:将新图片文件上传到网站服务器,通常放在 images 文件夹中。 记下新图片的路径,例如 /images/new-image.jpg。修改HTML文件:打开网站的HTML文件,找到需要替换的图片的 <img>…

记录我的第一份实习-猎头

以下是本人自2024-10-15日入职wisest talent至11-30日的一些记录,历时正正好1个半月 累计300+电话量,日均10+电话数,简历阅览量保守估计2200+ 推荐总数:55位面试总数:29位入职总数:3位开票业绩:20w+以上当然并不光是自身努力的结果,更多的还是经过几位相当优秀的leader…

在线进制转换-浮点数16进制转换

在线进制转换工具;浮点数转16进制;分享一个在线进制转换工具,浮点数转十六进制得在线转换工具; 网址:https://www.bais.top/tools/hexconvert/ 浮点数转16进制在线转换网址 float转十六进制; 在线10进制转16进制;使用很方便,能够进行多种进制转换;

firemonkey主界面

firemonkey主界面firemonkey主界面 本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/18606484

转载:【AI系统】动态图与静态图转换

从 TensorFlow、PyTorch,到 PaddlePaddle、MindSpore、MegEngine,主流的 AI 框架动静态图转换,经历了动静分离、动静结合到动静统一的发展过程。兼顾动态图易用性和静态图执行性能高效两方面优势,均具备动态图转静态图的功能,支持使用动态图编写代码,框架自动转换为静态图…

转载:【AI系统】数据并行

数据并行是一种广泛应用于分布式 AI 系统中的技术,旨在通过将数据集划分为多个子集并在不同计算节点上并行处理这些子集,以提高计算效率和速度。在大规模机器学习和深度学习训练过程中,数据并行可以显著加快模型训练速度,减少训练时间,提升模型性能。大部分的数据并行模型…

规模法则(Scaling Law)与参数效率的提高,

上一篇:《人工智能大语言模型起源篇(三),模型规模与参数效率》 规模法则与效率提高 如果你想了解更多关于提高变换器效率的各种技术,我推荐阅读2020年的《Efficient Transformers: A Survey》https://arxiv.org/abs/2009.06732论文,接着是2023年的《A Survey on Efficien…