RISC-V指令集中的FENCE指令是什么意思?

2024-02-16

在浏览 RISC-V ISA 时,我在内存模型部分看到了一条指令(FENCE 指令)。它到底是什么意思?


RISC-V ISA 使用宽松的内存模型,其中一个线程执行的加载和存储的顺序在另一个线程看到时可能不同。这样做是为了启用提高内存系统性能的技术。

例如,线程1可能执行:

  • Load A
  • Store B
  • Store C

但线程 2 可能会发现加载和存储相对于第一个线程来说是乱序的:

  • Store C
  • Load A
  • Store B

FENCE 确保在栅栏之后的任何操作之前观察栅栏之前的所有操作。那么如果上面的内容改成:

主题 1:

  • Load A
  • Store B
  • FENCE
  • Store C

那么线程 2 将保证在存储到 C 之前看到对 A 的加载和对 B 的存储,但仍然可以在加载 A 之前看到对 B 的存储。

话题2:

  • Store B
  • Load A
  • Store C

Source: RISC-V ISA https://riscv.org//wp-content/uploads/2017/05/riscv-spec-v2.2.pdf(第 20 页第 2.7 节)

合并 Chris P 的评论:

可以控制 I/O(I 和 O 标志)和内存访问(R 和 W) 与FENCE指令分开 例如:可以控制 仅内存写入应按 FENCE 排序,但内存读取应按 FENCE 排序 I/O操作不受FENCE影响。为此,PW 和 SW 应设置位。如果只设置了PW(前驱写入),则FENCE 将确保 FENCE 之前的所有内存写入也被观察到 FENCE之前的其他hart(线程),但FENCE之后的内存写入可以 之前也要观察。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RISC-V指令集中的FENCE指令是什么意思? 的相关文章

  • 使用矢量化为 iPhone 编译 Eigen 库

    我正在努力为 iPhone 4 编译 Eigen 库 该库具有带有 armv7 指令集的 ARM 处理器 到目前为止 当我指定预处理器定义 EIGEN DONT VECTORIZE 时 一切正常 但由于一些性能问题 我想使用armv7优化的
  • 哪些通用编程语言/实现编译为 C [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前正在使用 Eiffel SmartEiffel ISE Eiffel 它正在编译为 c 我发现 如果输出进入可移植汇编语言 也称为
  • 从字符串编译Java源代码? [复制]

    这个问题在这里已经有答案了 有没有办法让正在运行的Java程序编译Java源代码 作为字符串传递 Class newClass Compiler compile class ABC void xyz etc etc 理想情况下 传入源代码引
  • 使用 boost 库时加快编译/链接时间

    我在用着提升计划选项 http www boost org doc libs 1 45 0 doc html program options html 并且用它编译非常小的 C 代码需要相当长的时间 10 秒甚至更多 在没有 boost 库
  • switch-case 结构是否以二分搜索的形式实现?

    我想知道如何switch case语句执行 Example 假设有以下代码 Scanner sc new Scanner System in int v sc nextInt switch v case 0 System out print
  • C# 编译器错误?为什么这个隐式用户定义转换无法编译?

    给定以下结构 public struct Foo
  • 为什么 RISC-V S-B 和 U-J 指令类型以这种方式编码?

    我正在读一本书 计算机组织与设计RISC V版 我遇到了 S B 和 U J 指令类型的编码 我上面提到的那些类型有奇怪的编码立即字段 S B 类型将直接字段分为两部分 这是有道理的 因为所有指令编码都必须相似 但我无法理解为什么立即字段以
  • Verilog 双向握手示例

    我正在完成一个项目 要求是处理器内部功能单元之间的双向握手 我知道它是什么 但是有没有任何 标准 或一个简单的例子 我唯一能想到的就是两个单元之间 当它们之间有一条数据线并且当 X 发送到 Y 时 会给出一个单独的 发送 信号 当 Y 接收
  • 错误:在 Java 中声明布尔值时不是一个语句

    下面的代码 boolean continue false 返回以下错误 error not a statement boolean continue false 为什么会发生这种情况 我对布尔值非常熟悉 试试这个 boolean cont
  • .java 和 .scala 类之间是否可能存在循环依赖?

    假设我在 java 文件中定义了类 A 在 scala 文件中定义了类 B A 类使用 B 类 B 类使用 A 类 如果我使用 java 编译器 则会出现编译错误 因为 B 类尚未编译 如果我使用scala编译器A类将找不到 有没有可以同时
  • 是否可以用 C# 为 Android 编写应用程序?

    我们都知道Android运行Dalvik VM程序 通常开发人员用 Java 编写程序并将其编译为 Dalvik 字节码 我想知道是否有可能创建一个可以接受 C 代码并将其编译为 Dalvik 字节码的编译器 嗯 这是一种选择 或者您可以在
  • Visual Studio 空引用警告 - 为什么没有错误?

    我注意到 Visual Studio 的一些特殊之处 首先 尝试在函数中的某个位置键入以下内容 C class Foo public void Bar string s int i s Length 现在 它会立即标记s in s Leng
  • 可以读取目标文件吗?

    我很好奇 obj文件 我几乎不知道它们是什么 或者它们包含什么 所以我用 Vim 文本编辑器打开它们 我在里面发现了一种类似外星人的语言 有什么办法可以理解它们代表什么以及它们的内容是什么 另外 它们的用途是什么 Thanks Sure 但
  • C# 中的编译器

    我正在寻找一个可定制的解析器和 或词法分析器 它可以让我在 C 中构建自定义语法检查器 本质上 用户将输入一行代码 自定义 语法检查器将能够响应是否编写正确 That s Irony http irony codeplex com 请务必阅
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • cmake 找不到 Qt4

    由于4 8 0已经发布 我重新安装了Qt 现在我也想使用cmake 为了使 cmake 工作 我记得必须添加 mingw bin 文件夹 QtSDK Desktop Qt 4 7 3 到Qt4 7 3中的PATH 所以我猜测在中会有一个类似
  • 为什么不允许使用 const 初始化可变大小的对象

    这是错误的 因为可变大小的对象可能未初始化 int size 4 int array size 1 size是一个变量 但编译器在创建时不知道它的值array Isn t size在编译时分配初始值 4 让size之后发生变化 为什么会出现
  • 当 C# 位于同一包含类中时,为什么以及如何允许访问类本身之外的私有变量?

    我不知道这个问题是否具有足够的描述性 但是这种行为为什么以及如何存在 public class Layer public string Name get set private IEnumerable children public IEn
  • BISON + FLEX 语法 - 为什么标记被连接在一起

    我想了解为什么 BISON 按照以下规则连接两个标记 stmt declaration assignment exp ID lt this rule fprintf stderr n my id is s 1 如果你检查输出就会明白我的意思

随机推荐

  • vswprintf 在 Mac OS X 下对于某些 unicode 代码点失败

    我收到莫名其妙的失败 返回值 1 vswprintf使用GCC和Mac OS X 在Mac OS X 10 6和10 8下使用gcc 4 0和4 2 1进行测试 Linux下的GCC是not做作的 Visual Studio 也是not做作
  • 在彩色背景中渲染透明文本

    假设我有两个 UIView View1 边界 0 0 20 20 背景颜色 一些带有渐变或其他内容的复杂背景 View2 帧 0 0 20 20 背景颜色 蓝色 是 View1 的子视图并完全覆盖它 接下来 我想在 View2 上绘制一些文
  • 如何并行处理MSMQ消息

    我正在编写一个 Windows 服务来使用 MSMQ 消息 该服务将存在高活动期 80k 消息快速传入 和长时间不活动期 可能数天没有新消息 处理消息非常受网络限制 因此我从并行性中获得了很大的好处 但在不活动期间 我不想占用一堆线程来等待
  • REST API,具有从服务器到客户端的主动推送通知

    问题描述 我正在开发一个 Xamarin 应用程序 该应用程序使用用 Python Flask 编写的 REST API Xamarin 应用程序提供虚拟购物清单 用户可以在其中协作购买共享清单上的商品 为了改善用户体验 我希望能够主动通知
  • FolderClosedException:* BYE JavaMail 异常:java.io.IOException:连接被服务器删除?

    我正在使用 javamail 1 5 5 我想监听 GMail 邮箱中的新邮件 我有一个 MessageCountListener 的实现 在它的 messagesAdded 方法上 最后我这样做 try process new messa
  • 适用于 Android 的滑动切换

    任何人都知道 Android 的滑动切换的任何开源实现 默认的 android 切换 切换按钮 http developer android com reference android widget ToggleButton html 不漂
  • Shiro/Stormpath 通过 REST

    我是新来的士郎 我们正在尝试将 Shiro 与 Stormpath 一起使用 我一直在尝试剖析这些例子 以找出我想做的解决方案 但到目前为止我还没有成功 目前 我只是尝试创建 REST 服务来执行我想要的操作 稍后我将绑定一个真正的客户端
  • 在 fork() 中,哪个将首先运行,父进程还是子进程?

    当以下代码运行时 我知道父级和子级都会运行在平行下调用 fork 后立即执行 include
  • Angular Js 路由 Google Chrome 问题

    使用下面提到的 Code1 在 Angular Js 中进行基本路由并获得 XMLHttpRequest 无法加载跨源请求仅支持以下协议方案 http data chrome extension https chrome extension
  • 在logstash中使用grok解析多行JSON

    我有一个 JSON 格式 SOURCE Source A Model ModelABC Qty 3 我正在尝试使用 Logstash 解析此 JSON 基本上我希望logstash 输出是一个键 值对列表 我可以使用kibana 进行分析
  • Embarcadero WindowHandleToPlatform C++ 的示例

    我需要一个用于 C 构建器的 WindowHandleToPlatform 示例 我想使用句柄对表单执行 bitblt 和其他功能 我可以使用 VCL 来做到这一点并且效果很好 认为 WindowHandleToPlatform 是 fir
  • 为什么我的音频 AVCaptureConnection 对于最高分辨率格式不起作用?

    我正在开发一个 iOS 项目 该项目使用 AVAssetWriter 和 AVAssetWriterInput 将音频和视频录制到文件中 当视频分辨率限制为 720x1280 时 一切似乎都运行良好 我现在尝试利用 AVCaptureDev
  • 替换 Android 内核中的触摸屏驱动程序

    我正在为我的定制板调整姜饼内核 我正在尝试更换使用片上 ADC 控制器 三星的 S5PV210 处理器 的电阻式触摸屏 在我的设计中 我需要一个由 eGalaxyTouch 驱动程序支持的电容式控制器 它已连接至 USB 可以从 make
  • 帮助简化 WordPress 中的 if while 列表循环

    可以很好地理解上面的代码 1 我可以删除if和while条件吗 使用直接地 2 我感觉if have posts 与while have posts 是裁员吗 1 呼叫the post没有循环只会让您显示单个帖子 这在单帖子页面上可能是理想
  • 提高 8086 二进制 -> 格雷码的效率

    我是汇编初学者 这是我设计的代码 用于从二进制转换为灰度 并以十六进制打印生成的位模式 mov al a mov bl al shr bl 1 xor al bl 虽然程序可以运行 但我想了解其他更简单的方法来提高效率 我尝试了很多其他方法
  • NullPointerException 使用链表时出错

    我刚刚完成了这个程序的工作并编译了它 但它在用户输入后中断并给了我这个 请在键盘上输入0个或多个值 12 4 3 2 1 Exception in thread main java lang NullPointerException at
  • 实现与 URLSession 发布者和合并的重新连接

    我想知道是否有一种方法可以实现重连机制与新的Apple框架结合并使用URLSession发布者 试图在 WWDC 2019 中找到一些例子 尝试玩waitsForConnectivity运气不好 它甚至没有在自定义会话中调用委托 tried
  • 对 JavaScript 原生类型进行原型设计,感到沮丧吗?

    在 JavaScript 原生类型 如数组 字符串 数字等 中构建附加功能原型是一个坏主意吗 我认为拥有像 myArr pop 等功能会很棒 但是如果有一天它成为 ECMAScript x 的一部分 并且与我的实现不同 那么它可能会破坏整个
  • “。”不能出现在常量表达式中

    我收到以下错误 cannot appear in a constant expression 对于此函数 第 4 行 bool Covers const Region
  • RISC-V指令集中的FENCE指令是什么意思?

    在浏览 RISC V ISA 时 我在内存模型部分看到了一条指令 FENCE 指令 它到底是什么意思 RISC V ISA 使用宽松的内存模型 其中一个线程执行的加载和存储的顺序在另一个线程看到时可能不同 这样做是为了启用提高内存系统性能的