RISC-V ISA中的FENCE.TSO是什么意思?

时间:2019-06-22 16:50:55

标签: memory processor riscv

我真的不了解RISC-V中的正常FENCE(已在此处回答:What is meant by the FENCE instruction in the RISC-V instruction set?)与FENCE.TSO之间的区别。手册说:

可选的FENCE.TSO指令被编码为FENCE指令,其中fm = 1000,前任= RW,后继= RW。 FENCE.TSO在其之前的集合中命令所有加载操作 在其后继集中的所有内存操作,以及在其所有之前的所有先前操作中的所有存储操作 商店的后续操作中。这将非AMO商店操作留在FENCE.TSO的 前继集合在其后继集合中无序排列且非AMO负载。

好的,这是我的猜测。我将根据我的理解显示草图。

有两套(包括指令),由FENCE指令分隔,分别是前一组和后一组。

Load Operation 1
Load Operation 2
Load Operation 3
Store Operation 1
Store Operation 2
Store Operation 3
**FENCE.TSO**
Memory Operation 1
Memory Operation 2
Memory Operation 3
Store Operation 4
Store Operation 5
Store Operation 6

这就是我的理解方式。但是我仍然对这句话感到困惑,因为这会在FENCE中留下非AMO商店的操作。 前继集合在其后继集合中无序排列且非AMO负载。 什么是非AMO负载和非AMO商店操作?

好的,AMO似乎代表“原子内存操作”。我仍然想知道,为什么我不能只使用“正常”的FENCE。

1 个答案:

答案 0 :(得分:1)

您可以使用“普通” FENCE,因为它比FENCE.TSO更严格地命令操作。从与不支持可选.TSO扩展名的实现向后兼容的注释中可以推断出这一点:

将FENCE.TSO编码添加为原始基础FENCE的可选扩展 指令编码。基本定义要求实现忽略任何设置位,并且 将FENCE视为全局,因此这是向后兼容的扩展。

那么,FENCE RW,RWFENCE.TSO RW,RW有什么区别?让我们举一个简单的例子。

load A
store B
<fence>
load C
store D

<fence>FENCE RW,RW时,适用以下规则:

A < C
A < D
B < C
B < D

这将导致四个不同的可能顺序:ABCD,BACD,ABDC和BADC。换句话说,可以对A / B进行重新排序,对C / D进行重新排序,但必须不迟于C和D观察A和B。

<fence>FENCE.TSO RW,RW时,适用以下规则:

A < C
A < D
B < D

请注意B < C的丢失方式; FENCE.TSO不会在先前存储和后继加载之间强加任何顺序。据推测,这种较弱的排序使其比“正常” FENCE便宜。

这给了我们五个可能的命令:ABCD,BACD,ABDC,BADC和 ACBD 。如果您的程序可以接受,则可以使用FENCE.TSO