常见的一些RELAXED MODEL CONCEPTS

news2024/11/18 17:53:05

释放一致性(release consistency, RC)

RC的核心观点是:使用 FENCE 围绕所有同步操作是多余的

  • 同步获取 (acquire) 只需要一个后续的 FENCE,
  • 同步释放 (release) 只需要一个前面的 FENCE。

对于表 5.4 的临界区示例,可以省略 FENCE F11、F14、F21 和 F24。让我们关注 "R11: release(lock)"。FENCE F13 很重要,因为它在锁释放之前对临界区的load (L1i) 和store (S1j) 进行排序。FENCE F14 可以省略,因为如果core C1 的后续内存操作(表中未显示)在释放 R11 之前执行,则没有问题。

RC 实际上允许这些后续操作早在临界区开始时就执行,而 XC 的 FENCE 不允许这样的排序。RC 提供了类似于 FENCE 的 ACQUIRE 和 RELEASE 操作,但仅在一个方向而不是像 FENCE 那样在两个方向上对内存访问进行排序。更一般地说,RC 只需要:

  • ACQUIRE -> Load, Store (but not Load, Store -> ACQUIRE)
  • Load, Store -> RELEASE (but not RELEASE -> Load, Store) and
  • SC ordering of ACQUIREs and RELEASEs:
  • ACQUIRE -> ACQUIRE
  • ACQUIRE -> RELEASE
  • RELEASE -> ACQUIRE, and
  • RELEASE -> RELEASE

 

RISC-V 弱内存顺序 (RVWMO)

RISC-V 实现了一个内存模型 RVWMO(注1),它可以理解为释放一致性 (RC) 和 XC 的混合。

  • 与 XC 类似,RVWMO 是根据全局内存顺序(所有内存操作的总顺序)定义的,并且具有 FENCE 指令的几种变体。
  • 与 RC 类似,load和store可以携带注释 (annotation):load指令可以携带 ACQUIRE 注释,store指令可以携带 RELEASE 注释
  • RMW 指令可以使用单独的 RELEASE、单独的ACQUIRE 或 RELEASE 和 ACQUIRE 两者一起进行注释。

RELEASE/ACQUIRE orderings

有两种类型的ACQUIRE annotations和RELEASE annotations

  • ACQUIRE-RCpc / RELEASE-RCpc
  • ACQUIRE-RCsc / RELEASE-RCsc

其中,pc指的是processor consistency, pc是TSO的前身,SC指的是Sequential Consistency;

LOAD两种都可以用,RMW只能用RCsc;

这两种annotations提供的order描述如下:

  • ACQUIRE -> Load,Store (ACQUIRE refers to both ACQUIRE-RCsc and ACQUIRE-RCpc)
  • Load,Store -> RELEASE (RELEASE refers to both RELEASE-RCsc and RELEASE-RCpc)
  • RELEASE-RCsc -> ACQUIRE-RCsc

FENCEorderings. 

RVWMO有几种FENCE指令:

  •  strong FENCE instruction, FENCE RW,RW;
    • enforces the Load,Store !Load,Store orderings;
  • non-trivial combinations:
    • FENCE RW,W;
    • FENCE R,RW,
    • FENCE R,R;
    • FENCE W,W;
    • FENCE.TSO

这里面R代表load, W代表store,简单描述下上面部分指令的含义;

  • FENCE R,R: 强制保证load/load的顺序;
  • FENCE.TSO:强制保证load->load, Store->Store, Load->Store的顺序;

RVWMO的例子

        S1 ->L1 is enforced in core C1 due to the former and S2 -> L2 is enforced in core C2 due to the latter. The combination, thus, ensures that both r1 and r2 cannot read 0.

Dependency-induced orderings.

        RVWMO 在某些方面略强于 XC。地址、数据和控制相关性可以在 RVWMO 中引起内存顺序,但在 XC 中则不然。考虑表 5.12 中所示的示例。这里,core C1 向 data2 写入 NEW,然后设置指针指向 data2 的位置。(通过 FENCE W, W 指令对两个store S1 和 S2 进行排序)。在core C2 中,L1 将指针的值load到 r1 中,然后load L2 解引用 (dereference) r1。尽管两个load L1 和 L2 没有明确排序,但 RVWMO 隐式强制执行 L1 -> L2,因为 L1 和 L2 之间存在地址依赖 (address dependency):L1 产生的值被 L2 解引用。

考虑表 5.13 中显示的示例,也称为load缓冲 (load buffering)。让我们假设 x 和 y 最初都是 0。可以允许 r1 和 r2 凭空读取任意值(比如 42)吗?有点令人惊讶的是,XC 并不禁止这种行为。因为在 L1 和 S1 以及 L2 和 S2 之间都没有 FENCE,所以 XC 不会强制任何一个 Load -> Store 顺序。这可能会导致执行以下操作:

  • S1 预测 L1 将读取 42,然后推测性地将 42 写入 y,
  • L2 从 y 读取 42 到 r2,
  • S2 将 42 写入 x,并且
  • L1 将 42 从 x 读入 r1,从而使初始预测“正确”。

        然而,RVWMO 通过隐式强制 Load -> Store 顺序 (L1 -> S1 和 L2 -> S2) 来禁止这种行为,因为每个load和store之间存在数据依赖 (data dependency) 关系:每个load读取的值由接下来的store写入。

        与此类似,RVWMO 还隐式地强制在load和后续store之间进行排序,该store控制依赖 (control dependent) 于load。

Same address orderings.        

与 XC 一样,RVWMO 也强制执行

  • Load -> Store ordering to the same address,
  • Store -> Store ordering to the same address, and does not enforce
  • Store -> Load ordering to the same address.

与 XC 不同,RVWMO 不强制

  • Load -> Load ordering to the same address in all situations

仅在以下情况下才会强制执行:

(a) 两次load之间没有store到同一地址,以及

(b) 两次load返回由不同store写入的值。对于这种微妙的基本原理的详细讨论,读者可以参考 RISC-V 规范 [31]。

RISC-V 支持两种类型的 RMW

        原子内存操作 (AMO) 和保留load/条件store (LdR/StC)。

        虽然 AMO 来自单个指令(例如,fetch-and-increment),但 LdR/StC 实际上由两个单独的指令组成:LdR 带来一个值并为core做一个保留记号,而 StC 只有在保留记号仍然存在时才能成功。这两种 RMW 的原子性语义略有不同。与 XC RMW 类似,如果load和store在全局内存顺序中连续 (consecutively) 出现,则称 AMO 是原子的。LdR/StC 较弱。 假设 LdR 读取了 store s 产生的值;只要在全局内存顺序中 s 和 StC 之间没有相同地址的store,就可以说 LdR/StC 是原子的。

总而言之,RVWMO 是一种结合了 XC 和 RC 方面的最新宽松内存模型。对于详细的提议和正式规范,读者可以参考 RISC-V 规范。

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

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

相关文章

Vue3专栏项目 -- 一、第一个页面(下)

一、Dropdown 组件(下拉菜单组件)编码 1、基本功能:展示出下拉按钮和下拉菜单栏的样式 我们可以通过bootstrap来实现这个下拉框,需要注意它这个只是有样式,是没有行为的 然后这个下拉按钮的文字展示是根据用户名称展…

洗地机什么品牌好?洗地机怎么选?618洗地机选购指南

随着科技的飞速发展,洗地机以其高效的清洁能力、稳定的性能和用户友好的设计而闻名,不仅可以高效吸尘、拖地,还不用手动洗滚布,已经逐渐成为现代家庭不可或缺的清洁助手。然而,在众多品牌和型号中,如何选择…

Python专题:七、函数初探

代码的重用,重复的机械性功能 封装性,不用了解其组成原理 易于维护,更新 def是关键词,函数定义,add3函数名(自定义)三个数相加,a,b,c是函数的形式参数,需要注意的是,在出现三个点号之后,还需再输入一个回车,出现三个尖括号,才算函数定义完成,定义完之后就可以使…

MySQL 通过 systemd 启动时 hang 住了……

mysqld:哥,我起不来了…… 作者:贲绍华,爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编…

网工内推 | 技术支持工程师,最高15k,加班有补贴

01 星网信通 招聘岗位:售前技术支持 职责描述: 1、售前技术支持:技术交流、产品选型报价、方案制作等工作; 2、招投标支持:项目招标参数撰写、标书质疑、应标文件技术部分撰写及资质文件归纳准备、现场讲标及技术澄清…

95、动态规划-编辑距离

递归暴力解法 递归方法的基本思想是考虑最后一个字符的操作,然后根据这些操作递归处理子问题。 递归函数定义:定义一个递归函数 minDistance(i, j),表示将 word1 的前 i 个字符转换成 word2 的前 j 个字符所需的最小操作数。 递归终止条件…

命运交织的节点:分布式事务最终一致性的心跳共鸣纪实

关注微信公众号 “程序员小胖” 每日技术干货,第一时间送达! 引言 在当今云计算和微服务架构大行其道的时代,分布式系统成为了构建高可用、高性能应用的基石。然而,随着系统规模的扩张,数据的一致性问题如同幽灵般萦…

Linux字符设备驱动(一) - 框架

字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标、键盘、显示器、串口等等,当我们执行ls -l /dev的时候,就能看到大量…

C++容器之vector类

目录 1.vector的介绍及使用1.1vector的介绍1.2vector的使用1.2.1 vector的定义1.2.2 vector iterator 的使用1.2.3 vector 空间增长问题1.2.4 vector 增删查改1.2.5vector 迭代器失效问题1.2.6 vector 在OJ中的使用。 2.vector深度剖析及模拟实现2.1 std::vector的核心框架接口…

Kotlin基础知识总结(三万字超详细)

1、条件语句 (1)if条件 if条件表达式,每一个分支最后一条语句就是该分支的返回值。适用于每个分支返回值类型一致这种情况。 fun getDegree(score: Int): String{val result: String if(score 100){"非常优秀"}else if(score …

【2024全国青少年信息素养大赛初赛时间以及模拟题】

2024全国青少年信息素养大赛时间已经出来了 目录 全国青少年信息素养大赛智能算法挑战赛初中模拟卷 全国青少年信息素养大赛智能算法挑战赛初中模拟卷 1、比赛时间和考试内容: 算法创意实践挑战赛初中组于5月19日举行,检录时间为10:30-11:00&#xf…

OS复习笔记ch5-3

引言 上一节我们学习了关于信号量机制的一些内容,包括信号量的含义,对应的PV操作等。 如图所示,上一节主要是针对信号量的互斥,其实信号量机制还可以做很多事情,比如实现进程同步和前驱关系,这一节我们先复…

leetcode每日一题第七十二天

class Solution { public:TreeNode* searchBST(TreeNode* root, int val) {if(!root) return root;if(root->val val) return root;else if(root->val > val) return searchBST(root->left,val);else return searchBST(root->right,val);} };

新能源汽车动力电池热管理方案直冷方案原理简介

前言 随着新能源汽车的快速发展,动力电池作为其核心部件之一,对于其性能和寿命具有重要影响。动力电池在工作过程中会产生大量的热量,如果不能有效地进行热管理,将会导致电池温度升高、性能下降甚至损坏。因此,热管理…

C语言【文件操作 2】

文章目录 前言顺序读写函数的介绍fputc && fgetcfputcfgetc fputs && fgetsfputsfgets fprintf && fscanffprintffscanf fwrite && freadfwritefread 文件的随机读写fseek函数偏移量ftell函数rewind函数 文件的结束判断被错误使用的feof 结语 …

哈希题目总结

以下列举了可以用哈希方法(包括但不限于用HashMap和HashSet)的题目,实质上是把东西丢给这些数据结构去维护。请注意有些题目中用哈希是最优解,有些题目中不是最优解,可以自行探索其时间复杂度和空间复杂度的区别&#…

【Java】还不会数组?一文万字全搞定

前言:前面两章我们详细讲解了Java基本程序设计结构中的基本知识,,包括:一个简单的Java应用,注释,数据类型,变量与常量,运算符,字符串,输入输出,控…

探索精酿啤酒:从经典到创新

Fendi club啤酒一直以来都以其卓着的品质和与众不同的口感深受消费者喜爱。而随着时代的变迁和消费者口味的不断变化,Fendi club啤酒也在不断地探索和创新,以满足市场的多样化需求。 在经典的口感和风味基础上,Fendi club啤酒不断地尝试新的原…

多线程学习D10 收尾了应该

线程安全集合类概述 重点介绍java.util.concurrent.* 下的线程安全集合类,可以发现它们有规律,里面包含三类关键词:Blocking、CopyOnWrite、Concurrent Blocking 大部分实现基于锁,并提供用来阻塞的方法 CopyOnWrite 之类容器修改…

探讨关于AutoPSA里CII算法的结构荷载

UKP3D,AutoPDMS导出应力计算文件至管道应力分析软件分析,如下图AutoPSA.用户咨询如图 1.如果计算时考虑水重,把工况中的w改为ww; 2.CAD表格中结构荷载不是单纯的1.5倍,是参照仿GLIF的算法,计算了水重的(根…