首页 > 解决方案 > LR/SC 指令和发布一致性

问题描述

介绍发布一致性的论文(K. Gharachorloo 等人的“可伸缩共享内存多处理器中的内存一致性和事件排序”)提到了一类称为“非同步”(nsync)的内存操作,旨在用于竞争,但不同步,在混沌松弛算法中访问其他线程的数据。

我是否错误地认为 RISC-V 中的 LR 和 SC 指令,清除了 AQ 和 RL 位,是 nsync 类指令?我问是因为 RISC-V 手册(版本 20190608-Base-Ratified,第 50 页)指出,在清除 AQ 和 RL 位的情况下,LR 和 SC 是:“......当 LR/SC 序列用于实现并行归约操作。”

标签: riscv

解决方案


我不相信。前一句(在我的草稿副本中)指出:

如果 LR 和 SC 均未设置任何位,则可以观察到 LR/SC 序列发生在来自同一 RISC-V hart 的周围存储器操作之前或之后。这可能是适当的......

我认为他们得到的是 lr/sc 只会与链接地址(好的,缓存行)同步,因此 lr/sc 之间的其他内存位置可以保持比这个更宽松的顺序。换一种说法,lr/sc 不必等待存储缓冲区中的前项进入 RAM,除非有其他类似栅栏的操作挂起。

因此,它不适合实现互斥锁(因为大多数多线程程序将互斥锁视为内存排序点),但非常适合计数器或堆栈索引。


推荐阅读