riscv - LR/SC 指令和发布一致性

标签 riscv

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

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

最佳答案

我不这么认为。前面的句子(在我的草稿副本中)指出:

If neither bit is set on both LR and SC, the LR/SC sequence can be observed to occur before orafter surrounding memory operations from the same RISC-V hart. This can be appropriate ....

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

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

关于riscv - LR/SC 指令和发布一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57506479/

相关文章:

assembly - 为什么 $ra 被调用者保存在 RISC-V 中

twos-complement - RISC-V 是否要求二进制补码或一个补码符号,还是由实现确定?

c - RISCV 32 位基础和 64 位扩展

c - RISC-V汇编-堆栈布局-函数调用

cpu-architecture - MemReq 和 MemResp 在 RoccIO 中如何工作 - RISCV

c++ - 实例化同一类中的多个对象时,代码不会运行,但是实例化具有相同代码的重复类中的对象时,代码会起作用

linux - riscv/gcc/ld - "Undefined reference to printf"使用自己的脚本链接

compilation - 使用 Clang 编译 RISC-V

assembly - 将脏缓存行写入下一级缓存的 RISC-V 指令