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

问题描述 投票:3回答:1

我不太了解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

这就是我的理解方式。但是我仍然对句子这将非AMO商店操作留在FENCE.TSO的前继集合在其后继集合中无序排列且非AMO负载。什么是非AMO加载和非AMO商店操作?

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

memory processor riscv
1个回答
0
投票

您可以使用“普通” 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
© www.soinside.com 2019 - 2024. All rights reserved.