riscv - LR/SC 指令和发布一致性
问题描述
介绍发布一致性的论文(K. Gharachorloo 等人的“可伸缩共享内存多处理器中的内存一致性和事件排序”)提到了一类称为“非同步”(nsync)的内存操作,旨在用于竞争,但不同步,在混沌松弛算法中访问其他线程的数据。
我是否错误地认为 RISC-V 中的 LR 和 SC 指令,清除了 AQ 和 RL 位,是 nsync 类指令?我问是因为 RISC-V 手册(版本 20190608-Base-Ratified,第 50 页)指出,在清除 AQ 和 RL 位的情况下,LR 和 SC 是:“......当 LR/SC 序列用于实现并行归约操作。”
解决方案
我不相信。前一句(在我的草稿副本中)指出:
如果 LR 和 SC 均未设置任何位,则可以观察到 LR/SC 序列发生在来自同一 RISC-V hart 的周围存储器操作之前或之后。这可能是适当的......
我认为他们得到的是 lr/sc 只会与链接地址(好的,缓存行)同步,因此 lr/sc 之间的其他内存位置可以保持比这个更宽松的顺序。换一种说法,lr/sc 不必等待存储缓冲区中的前项进入 RAM,除非有其他类似栅栏的操作挂起。
因此,它不适合实现互斥锁(因为大多数多线程程序将互斥锁视为内存排序点),但非常适合计数器或堆栈索引。
推荐阅读
- c# - 如何统一使用脚本创建新图层
- google-sheets - 如何查看授权用户列表谷歌表
- tally - 如何在 Tally 上分别显示销售额和其他部门销售额
- c# - c# ToList() 的性能问题
- synchronization - 个人云存储和微软团队
- ionic-framework - RxJS:带倒计时的进度条
- tmux - 如何使用 tmux 正确关闭所有会话?
- c# - 依赖注入失败,IAuthorizationFilter 和 Simple Injector for ASP.NET Core
- lua - 为什么金币只在玩家第一次加入游戏时才保存?
- javascript - 在尊重其顺序的同时将对象附加到数组