RISC-V笔记——显式同步

news2024/10/22 2:15:34

1. 前言

RISC-V的RVWMO模型主要包含了preserved program order、load value axiom、atomicity axiom、progress axiom和I/O Ordering。今天主要记录下preserved program order(保留程序顺序)中的Explicit Synchronization(显示同步)。

2. 显示同步

显示同步指的是:a操作在程序顺序中先于b操作,a和b都访问常规主存,不是I/O区域,如果存在以下任何一个条件,那么a操作和b操作在全局内存顺序中的顺序也不会变。

  1. a和b之间有FENCE指令。
  2. a拥有acquire语义。
  3. b拥有release语义。
  4. a和b都有RCsc语义。
  5. a和b是配对的。

关于第一点,默认情况下,FENCE指令确保所有在程序顺序中位于FENCE之前的指令的内存访问(“前导集”)在全局内存顺序中比在程序顺序中位于FENCE之后的指令的内存访问(“后续集”)出现得更早。不过,为了性能上的考量,FENCE可以选择性进一步地限制前导集和后续集为较小的内存访问集。具体来说,FENCE有PR、PW、SR和SW bits,它们限制了前导集和后续集所包含的指令类型。如果PR为1,那么前导集包括load;如果PW为1,那么前导集包含store;如果SR为1,那么后续集包括load;如果SW为1,那么后续集包括store。

FENCE中PR、PW、SR和SW这4bit可以组成16种FENCE语义,但不是每一种组合都有用的。其中有7中组合具有空的前导集或后续集,因此是无操作的。另外FENCE还有一个额外的编码为FENCE.TSO,提供它主要是方便映射到“acquire+release”或RVTSO语义上。不过在这10(16-7+1)个选项中,只有下面6个在实践中常用:

  • FENCE RW,RW
  • FENCE.TSO
  • FENCE RW,W
  • ENCE R,RW
  • FENCE R,R
  • FENCE W,W

RISC-V手册建议程序员只使用这6种FENCE指令,其他组合的FENCE指令可能不生效,而且会造成意外的结果。

关于第二点,通常在关键代码的临界区开始时使用acquire操作,要求在程序顺序在acquire之后的load和store操作也要在全局内存顺序上在acquire之后。这样可以确保关键代码临界区内位于acquire操作之后的所有load和store可以获取最新的数据。Acquire操作排序可以通过两种方式来实现。

  1. 使用acquire语义的指令:它只针对同步变量本身强制排序
  2. 使用FENCE R,RW:它针对之前的所有load强制排序

如下代码1使用第一种方案,因为amoswap使用了aq,所以临界区的load和store保证出现于获取锁的amoswwap之后的全局内存顺序中。然而a1和a2指向不同的内存位置,临界区的load和store可能与它们乱序,也就是在全局内存顺序中,它们之间的顺序不是固定的。

如下代码2使用第二种方案,在这种情况下,尽管amoswap不强制使用aq进行排序,但FENCE仍然强制amoswap在全局内存顺序中出现的时间比临界区中的所有load和store都要早。但使用FENCE的一个副作用就是,FENCE还强制执行了额外的排序,它还要求程序开始时的a2不相关的load指令出现的时间要早于临界区的load和store。因此,FENCE命令比aq命令在排序上更强硬些,当然也更粗糙些。

关于第三点,Release排序和acquire排序的工作原理类似,只是排序的方向相反。Release语义要求在release操作程序顺序之前的所有load和store也要在全局内存顺序上先于release操作。这样可以确保在全局内存顺序中,临界区的内存访问出现在release释放锁的store之前。就像acquire语义一样,release语义可以通过两种方式来实现:

  1. 使用带release的指令
  2. 使用FENCE RW,W指令

例子就如同第二点中代码1和代码2。代码1在关键代码片段的末尾使用rl来确保顺序,其中a3和a4与rl之间没有固定关系,在全局内存顺序上没有固定顺序。代码2在关键片段的末尾使用FENCE RW,W来确保顺序。

关于第四点,如果单独使用RCpc语义,就不会强制store release到load acquire的顺序,这有助于移植在TSO或RCpc内存模型下编写的代码。为了确保store release到load acquire的顺序,代码必须使用RCsc的语义。

关于第五点,在全局内存顺序中,SC必须出现在与其配对的LR之后。由于固有的语法数据依赖,通常使用LR/SC来执行原子读-修改-写操作。但其实即使store的值在语法上不依赖于成对LR返回的值,这一点也适用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2220454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

02篇 机械考研复试简历保姆级教程,考研简历联系导师邮件复试调剂超全攻略 导师喜欢看到的简历(附模板)

考研复试简历怎么写?导师喜欢看到的简历(附模板) 复试简历,重要程度max!绝非小事一桩!它就像是你硬核经历的闪亮外衣,条理清晰、逻辑严谨且设计感十足,一定能在导师心中留下深刻印象…

微信小程序-自定义组件

文章目录 微信小程序-自定义组件概述创建和使用数据、方法和属性slot 插槽默认插槽具名插槽 组件样式注意项样式隔离 数据监听组件间通信父传子子传父获取子组件实例 生命周期组件的生命周期组件所在页面的生命周期App、Page与Component生命周期对比冷启动保留当前页面和关闭当…

极氪汽车困局:营销频繁车、产品力不足

“ 极氪汽车的“车上吃火锅”营销活动虽登上热搜,但因频繁忽视老用户和产品力不足的争议,并未赢得消费者好感,反而加剧负面印象。 ” 科技新知 原创 作者丨颜瞾 编辑丨蕨影 近日,背靠吉利集团的极氪…

信息安全工程师(60)计算机病毒分析与防护

计算机病毒分析 介绍 计算机病毒是一种人为制造的程序,它通过不同的途径潜伏或寄生在存储媒体(如磁盘、内存)或程序里。当某种条件或时机成熟时,它会自生复制并传播,使计算机的资源受到不同程度的破坏。 定义&#xf…

Java【多线程】单例模式

目录 单例模式 饿汉模式 懒汉模式 懒汉模式-多线程版 单例模式 单例模式是一种设计模式 设计模式相当于棋谱 棋谱,大佬把一些对局整个推演过程,写出来 设计模式,是属于程序员的棋谱 单例模式(单个实例/对象)&…

Views Page 视图页面

下图中显示的 Views 页面允许自定义网格级别及其相应的 View。 Views (视图) 页面包含两个主要部分: 关卡设计师;请注意,其他设计器页面为在关卡设计器中选择的 View 提供设置;Properties (属性) 窗口&…

基于SpringBoot网上超市的设计与实现(论文+源码)_kaic

摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此超市商品销售信…

【机器学习】任务七:聚类算法 (K-means 算法、层次聚类、密度聚类对鸢尾花(Iris)数据进行聚类)

目录 1.基础知识 1.1 K-Means 算法 1.2 层次聚类(Hierarchical Clustering) 1.3 密度聚类(DBSCAN) 1.4 距离和相似度度量方法 1.5 总结: 2.K-means 算法对鸢尾花(Iris)数据进行聚类 2.1…

dayjs日期格式化,开发uniapp或unicloud前后端进行时间格式转换

一、 为什么要用日期格式化 因为在开发项目过程中,会遇到各种各样的日期格式,有的显示完整的年-月-日 时:分:秒,而有的场景就只显示月-日等格式,还有就是显示当前时间和注册时间的间隔时长等,场景非常多,如…

[python]从零开始的API调用教程

一、API是什么? API即应用程序编程接口,是一组定义了不同软件系统或组件之间如何交互的规则和协议。API为开发者提供了一种简化的方式,通过预定义的函数或方法,来使用某个软件、库、操作系统或硬件的功能,而不需要深入…

图像编辑大一统?多功能图像编辑框架Dedit:可基于图像、文本和掩码进行图像编辑。

今天给大家介绍一个基于图像和文本的编辑的框架D-Edit,它是第一个可以通过掩码编辑实现图像编辑的项目,近期已经在HuggingFace开放使用,并一度冲到了热门项目Top5。 使用 D-Edit 的编辑流程。用户首先上传一张分割成多个项目的图像。微调 DPM…

CTFHUB技能树之文件上传——前端验证

开启靶场,打开链接: 看到提示是js前端验证 直接F12查看前端源代码: 可以看出对上传的文件做了限制,只能上传.jpg、.png、.gif文件 (小插曲:本来我想着直接删除onsubmit处的代码的,但是删了之后…

沈阳乐晟睿浩科技有限公司:引领抖音小店迈向新纪元

在当今数字化浪潮汹涌的时代,电子商务以其独特的魅力和无限潜力,正深刻改变着人们的消费习惯与商业模式。在这场变革中,沈阳乐晟睿浩科技有限公司凭借其敏锐的市场洞察力和卓越的技术实力,成为了抖音小店领域的佼佼者,…

功能推荐 | TopOn 智能管家,开发者收益提升好帮手,一键托管自动提升ARPU!

01 什么是智能管家 智能管家,是TopOn SDK基于广告位填充率、广告源预估收益等大数据学习的基础上开发的一项新功能,它能根据当前开发者流量分组瀑布流配置的数据情况,自动判断对应广告源是否需要开启/关闭,以及是否需要增加Biddi…

SpringBoot整合mybatisPlus实现批量插入并获取ID

背景:需要实现批量插入并且得到插入后的ID。 使用for循环进行insert这里就不说了,在海量数据下其性能是最慢的。数据量小的情况下,没什么区别。 【1】saveBatch(一万条数据总耗时:2478ms) mybatisplus扩展包提供的:…

Verilator——最简单、最细节上手教程

目录 前言工具安装Verilator 安装GTKwave 安装 Verilator 基础用法fst格式和vcd格式的wave文件Verilator 的使用 Verilator 的进阶使用与GDB搭配与makefile搭配 Verilator 的高阶用法访问模块内部数据 前言 此教程会以ubuntu22.04为例 从如何安装,到如何使用 全程帮…

coze上构建必应搜索工作流

首先登入COZE网站,打开工作空间,进入后默认是个人空间,在其下方选择资源库,最后在右上角点击资源按钮,在弹出的列表中点击工作流。 构建必应搜索工作流 Coze官方介绍:必应搜索插件,其中插件输…

【网络】IP协议的地址管理

【网络】IP协议的地址管理 一. IP协议格式二. 地址管理1.动态分配IP地址2.NAT机制2.1 NAT机制下网络的请求/响应 3. 网段划分3.1 特殊的IP地址 4.路由选择5.DNS域名解析系统 一. IP协议格式 4位版本号(version): 指定IP协议的版本(IPv4/IPv6), 对于IPv4来…

AI工具:最受欢迎与最佳体验的探索

在当今数字化的时代,人工智能(AI)技术的广泛应用正在彻底改变我们的生活方式、工作方式和社会交往。AI工具不仅在工业生产、医疗诊断、金融服务等领域发挥着关键作用,还深入日常生活,为人们带来便捷与高效。本文将探讨…

基于SpringBoot的旅店管理系统的设计与实现源码+Vue前端(酒店、民宿、功能较多)

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…