打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
由处理器操作导致的内存一致性问题

只考虑两个“核”的场景,并且CPU中所有的初始值都是0。这里的“核”可以是不同的CPU,也可以是同一个CPU不同的进程。

场景1(Store-store reordering):

大多数程序员都期望核心C2的寄存器r2应该得到新的值NEW。然而,在今天的某些计算机系统中,r2可以为0。实际执行顺序如下图所示:

硬件可以通过重新排序核心C1的stores S1和stores S2指令,使r2获得值0。如果我们只查看C1的执行,这种重新排序也是正确的,因为S1和S2访问的是不同的地址。

如果一个核具有非FIFO写缓冲(write buffer),发起两个store指令,如果第一个store指令在缓存中miss或者第二个store指令在缓存中hit就可能使得store指令的执行顺序重新排序。

场景2(Load-load reordering.):

现代处理器的动态调度可能会使得核心C2乱序地执行loads L1和loads L2。只考虑到单核心C2线程,这种重新排序似乎是安全的,因为L1和L2是不同的地址。但是考虑到C1,如果内存操作按L2、S1、S2和L1顺序执行,则r2还是赋值为0。

场景3(Load-store and store-load reordering):

和场景2类似,同一进程不同地址之间load指令和stores指令之间也可能会乱序.

对于上图的场景,如果发生load和store乱序,r1和r2都为0.

另外,由于S1、L1和S2、L2分属于不同的进程,还可能发生的情况有

这个问题开始变得很复杂,这不是程序员们所希望看到的。所以,具有一个明确的内存一致性模型去明确程序的行为以及可以采纳的优化手段就变得很有价值。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux内核的内存屏障 | 并发编程网
Memory Reordering 浅析
LINUX内核内存屏障
全网最详细的IntelCPU体系结构分析(内核源码)在组合逻辑控制的计算机中指令译码器对不同的指令操作码产生不同的控制电位以形成不同的微操作序列
arm ldm stm指令解析
Java内存模型
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服