首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在RISC中,FENCE.TSO是什么意思?

在RISC中,FENCE.TSO是什么意思?
EN

Stack Overflow用户
提问于 2019-06-22 16:50:55
回答 1查看 1.2K关注 0票数 5

我真的不明白RISC-V (这里回答:What is meant by the FENCE instruction in the RISC-V instruction set?)和FENCE.TSO的普通栅栏之间的区别。手册上说:

可选的FENCE.TSO指令被编码为带有fm=1000、predecessor=RW和successor=RW的栅栏指令。FENCE.TSO在其后继集中的所有内存操作之前对其前任集中的所有加载操作进行排序,而在其后继set.This中的所有存储操作之前,它的所有存储操作都在FENCE.SO的前一集中对非AMO存储操作进行排序。

好吧,这是我的猜测。我只会根据我的理解展示我的素描。

有两个集合(包括指令),它们被栅栏指令分隔,即前一集和后继集。

代码语言:javascript
运行
复制
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

我就是这么理解的。但我仍然对这句话感到困惑,这句话在leaves中留下了非AMO存储操作,set的前任集无序,其后续集中有非AMO负载。什么是非AMO负载和非AMO存储操作?

好吧,AMO似乎是“原子记忆操作”的意思。我还是在想,为什么我不能用“正常”的栅栏。

EN

回答 1

Stack Overflow用户

发布于 2020-01-14 20:53:00

您可以使用“正常”FENCE,因为它比FENCE.TSO更严格地命令操作。这可以从关于与不支持可选.TSO扩展的实现的向后兼容性的说明中推断出来:

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

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

代码语言:javascript
运行
复制
load A
store B
<fence>
load C
store D

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

代码语言:javascript
运行
复制
A < C
A < D
B < C
B < D

这导致了四个不同的可能顺序: ABCD,BACD,ABDC和BADC。换句话说,A/B可以被重新排序,C/D可以被重新排序,但是A和B必须在不迟于C和D的时间内被观察到。

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

代码语言:javascript
运行
复制
A < C
A < D
B < D

请注意B < C是如何丢失的;FENCE.TSO不会在前一个存储和成功加载之间强制执行任何命令。据推测,这种较弱的订购使得它比“正常”的FENCE便宜。

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56717361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档