常见的一些RELAXED MODEL CONCEPTS

释放一致性(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.hqwc.cn/news/682078.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

extern关键字的使用。keil中编译时,出现error:identifier xxx is undefined

问题 编译时,出现error: identifier “Reg_Flag” is undefined extern Reg_Flag reg_flag; 很奇怪,我明明已经定义了。无非就是定义是在extern的下面,会不会是这个原因? 解决 果然,把extern的部分放到…

【热门话题】如何构建具有高度扩展性的系统

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 如何构建具有高度扩展性的系统引言一、理解扩展性1.1 扩展性的定义1.2 扩展性的…

私人健身教练预约管理小程序开发源码现成案例(小程序+APP+H5 源码部署)

一、私人健身教练预约管理系统-环境介绍 1.1 私人健身教练预约管理系统-运行环境 开发语言:PHP 数据库:MySQL 系统架构:TP 后端:SpringBoot 前端:Vue 2. 私人健身教练预约管理系统-系统介绍。 2.1私人健身教练预约管…

TL-WN826N无线网卡连接电脑蓝屏,提示rtl8188gu.sys

TL-WN826N无线网卡插电脑就蓝屏,提示rtl8188gu.sys 处理方法: 设备管理器中卸载其他的2.0无线网卡程序和功能中卸载网卡驱动TPlink官网下载 TL-WN826N V1.0_1.0.0(https://www.tp-link.com.cn/product_572.html?vdownload)&…

已经有 Prometheus 了,还需要夜莺?

谈起当下监控,Prometheus 无疑是最火的项目,如果只是监控机器、网络设备,Zabbix 尚可一战,如果既要监控设备又要监控应用程序、Kubernetes 等基础设施,Prometheus 就是最佳选择。甚至有些开源项目,已经内置…

部署 Sentinel 控制台:实现流量管理和监控

序言 Sentinel 是阿里巴巴开源的一款流量防护与监控平台,它可以帮助开发者有效地管理微服务的流量,实现流量控制、熔断降级、系统负载保护等功能。本文将介绍如何在项目中部署和配置 Sentinel 控制台,实现微服务的流量防护和监控。 一、Sen…

BurpSuite软件的介绍以及下载

BurpSuite是一个用于攻击web应用程序的集成平台,它包含了许多工具,这些工具可以协同工作,有效地分享信息,并支持以某种工具中的信息为基础供另一种工具使用的方式发起攻击。这些工具包括但不限于: Proxy(代…

QT+MYSQL数据库处理

1、打印Qt支持的数据库驱动&#xff0c;看是否有MYSQL数据库驱动 qDebug() << QSqlDatabase::drivers(); 有打印结果可知&#xff0c;没有MYSQL数据库的驱动 2、下载MYSQL数据库驱动&#xff0c;查看下面的文章配置&#xff0c;亲测&#xff0c;可以成功 Qt6 配置MySQL…

华为eNSP Pro模拟器下载(普通账号可用)

好消息&#xff01;华为终于开放了普通账号使用权限&#xff01; 安装教程下载后见《指导手册-eNSP Pro V100R001C00.pdf》 华为eNSP Pro模拟器下载&#xff08;普通账号可用&#xff09; 下载地址 华为eNSP Pro模拟器下载&#xff08;普通账号可用&#xff09; - 下一朵云 …

使用QLoRA在自定义数据集上finetuning 大模型 LLAMA3 的数据比对分析

概述: 大型语言模型(LLM)展示了先进的功能和复杂的解决方案,使自然语言处理领域发生了革命性的变化。这些模型经过广泛的文本数据集训练,在文本生成、翻译、摘要和问答等任务中表现出色。尽管LLM具有强大的功能,但它可能并不总是与特定的任务或领域保持一致。 什么是LL…

fibber抓https包,并且完成简单使用

安装&#xff1a;Download Fiddler Web Debugging Tool for Free by Telerik 按图操作&#xff1a; 2. 3.action第一次点选第二个&#xff0c;后来选最后一个&#xff0c;点完会在桌面生成这个 4.随便点开一个浏览器找到隐私-证书&#xff0c;把这个证书导入证书颁发机构里面…

Pspice for TI学习

Pspice for TI中PSpice Part Search空白解决方法 配置环境变量 Cad_PSpice_TI_Regr_Srvr https://software-dl.ti.com/pspice/S009 重新安装2023版的Pspice Pspice安装链接 打开新安装的软件即可发现PSpice Part Search可以正常使用了 VSIN各参赛的含义 VOFF直流偏置VAMPL…