当前位置: 首页 > news >正文

RISC-V笔记——内存模型总结

1 前言

Memory consistency model定义了使用Shared memory(共享内存)执行多线程(Multithread)程序所允许的行为规范。RISC-V使用的内存模型是RVWMO(RISC-V Weak Memory Ordering),RVWMO内存模型是根据全局内存顺序(global memory order)定义的,全局内存顺序是所有harts产生的内存操作的总顺序。通常,多线程程序有许多不同的可能执行,每个执行都有自己对应的全局内存顺序。

全局内存顺序是通过内存指令生成的基本load和store操作来定义的。内存操作的程序顺序(program order)反映了生成每个load和store的指令在该处理器的动态指令流中逻辑布局的顺序。例如:一个简单的有序处理器执行该处理器指令的顺序。在分析任何一个内存模型时,要紧紧抓住全局内存顺序和程序顺序去分析。

当一个load的返回值确定时,我们就说它已经执行了。当store在pipeline内执行时,不是说它执行了,只有当它的值被传播到全局可见内存时才执行。从这个意义上说,全局内存顺序也代表了一致性协议和/或内存系统的其他部分的贡献,将每个hart发出的(可能是重新排序的)内存访问交错到所有hart共同的单个总顺序中。

RISC-V的RVWMO模型主要包含了preserved program order(PPO)、load value axiom、atomicity axiom和progress axiompreserved program order由Overlapping-Address Orderings、Explicit Synchronization、Syntactic Dependencies和Pipeline Dependencies组成的。load value axiom、atomicity axiom和progress axiom三者共同组成了memory model axiom。

2 preserved program order

任何给定的程序执行的全局内存顺序都遵循每个hart的部分(但不是全部)程序顺序。全局内存顺序必须遵守的程序顺序的子集称为保留程序顺序(preserved program order)。从概念上讲,如果一个hart的某段程序时保留程序顺序,那么这段程序必须被其它hart以相同的顺序观察到。另一方面,从其它hart角度来看,来自一个hart的未按保留的程序顺序排序的事件可能看起来是重新排序的。

保留程序顺序的完整定义如下(请注意,AMOs是同时load和store的):如果a在程序顺序中先于b,内存操作a在保留程序顺序中先于内存操作b(因此也在全局内存顺序中),且a和b都访问常规主存,不是I/O区域,并且以下任何一种情况(每个小节)都有效:

2.1 Overlapping-Address Orderings

请看RISC-V笔记——重叠地址排序

2.2 Explicit Synchronization

请看RISC-V笔记——RVWMO基本体和RISC-V笔记——显式同步

2.3 Syntactic Dependencies

请看RISC-V笔记——语法依赖

2.4 Pipeline Dependencies

请看RISC-V笔记——Pipeline依赖

3 memory model axiom

memory model axiom(内存模型公理)是RVWMO的重要组成部分。它由以下三部分组成。

  • load value axiom
  • atomicity axiom
  • progress axiom

这三者的介绍在这篇文章:RISC-V笔记——内存模型公理

4 总结

内存一致性模型有弱和强之分。弱内存模型允许更多的硬件实现灵活性,并且比强模型提供更好的性能、每瓦性能、功率、可伸缩性和硬件验证开销,但代价是更复杂的编程模型。强模型提供了更简单的编程模型,但代价是对可以在pipeline和内存系统中执行的(非投机的)硬件优化施加了更多的限制,并且反过来在功耗、面积开销和验证负担方面施加了一些成本。

RVWMO是一种弱模型,它使架构师能够构建简单有效地实现、深入嵌入更大的系统并服从复杂的内存系统交互的实现,或者任何其他可能性,并高效地支持编程语言内存模型。

为了方便从其他体系结构移植代码,一些硬件实现可能会选择实现Ztso扩展,该扩展在默认情况下提供更严格的RVTSO排序语义。为RVWMO编写的代码自动地和固有地与RVTSO兼容,但是假设RVTSO编写的代码不能保证在RVWMO实现上正确运行。事实上,大多数RVWMO实现将(也应该)拒绝只运行RVTSO的二进制文件。因此,每个实现都必须选择是否优先考虑与RVTSO代码的兼容性(例如,为了便于从x86移植)。

在RVTSO下,为RVWMO编写的代码中的一些fence或memory排序可能变得多余。RVWMO对ZTSO实际造成的成本是取值这些fence指令的开销,例如FENCE R,RW和FENCE RW,W,这些指令在该实现上变成NoP操作。但是,如果希望与非ZTSO实现兼容,则这些fences必须保留在代码中

相关文章:

RISC-V笔记——内存模型总结

1 前言 Memory consistency model定义了使用Shared memory(共享内存)执行多线程(Multithread)程序所允许的行为规范。RISC-V使用的内存模型是RVWMO(RISC-V Weak Memory Ordering),RVWMO内存模型是根据全局内存顺序(global memory order)定义的,全局内存…...

后端常用安全措施

一、限流 1.简介 限流就是限制流量,但这里的流量是一个比较笼统的概念。如果考虑各种不同的场景,限流是非常复杂的,而且和具体的业务规则密切相关 通过限流,可以控制服务请求的速率,从而提高系统应对突发大流量的能…...

虚拟机数据恢复—通过拼接数据库页碎片的方式恢复数据库的数据恢复案例

虚拟机数据恢复环境: 某品牌服务器通过同品牌某型号的RAID卡,将4块STAT硬盘为一组RAID10阵列。上层部署XenServer虚拟化平台,虚拟机安装Windows Server系统,每台虚拟机有两个虚拟机磁盘(系统盘 数据盘)&am…...

【vue】自封组件,基于vue2封装一个弹框组件

源码:https://download.csdn.net/download/galaxyJING/89913551...

ES6基础知识

一、定义变量的关键字let和const 1. let 定义变量的语法: let 变量名 值; 2. 和var定义变量的区别 1. 是否支持同一个作用域变量同名 var支持,let不支持 2. 是否支持预解析 var支持,let不支持 3. 是否会挂载在window对象…...

基于Multisim的模拟拔河游戏比赛设计与仿真

1.设计一个模拟拔河游戏比赛的逻辑电路 2.使用15个发光二极管表示绳子,开机后只有最中间的发光二极管亮。 3.比赛双方各持一个按钮,快速不断地按动按钮,产生脉冲,谁按的快,发光的二极管就向谁的方向移动,每…...

MyBatis 配置详解

在项目中经常会用到 mybatis 相关的一些配置,而在启动类项目工程中,一般会把 mybatis 配置文件单独写到 mybatis,yml 中,如下简单介绍下常用的 mybatis 配置 mybatis:configuration:call-setters-on-nulls: truemap-underscore-to-camel-case…...

研发运营一体化(DevOps)能力成熟度模型

目录 应用设计 安全风险管理 技术运 持续交付 敏捷开发管理 基于微服务的端到端持续交付流水线案例 应用设计 安全风险管理 技术运 持续交付...

躺平成长-利用kimi编辑助手帮助自己编程第二天

天有道,无常道,兵无常势。 {今天开始听歌(歌曲:青丝!)进行编程!} 尝试用ai帮助自己进行小程序的开发,同时最为关键,是无法能够完成相关的代码的记忆,所以我开…...

OpenSuse-搭建NFS-Server

在OpenSUSE上搭建NFS服务可以通过以下步骤完成: ### 1. 安装NFS服务器软件 首先,确保你已经安装了NFS服务器软件包。你可以使用zypper命令来安装: sudo zypper install nfs-kernel-server### 2. 配置NFS导出目录 编辑/etc/exports文件&#x…...

【数据结构与算法】之二分查找

二分查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它通过比较数组中间元素与目标值来工作,从而将搜索范围缩小到一半,也称折半查找,是一种非常高效的工作于有序数组的查找算法。本文主要介绍二分查找…...

vue修饰符

表单修饰符 1、lazy <input type "text" v-model.lazy "value"> <p>{{value}}</p>lazy跟懒加载类似&#xff0c;只有再说鼠标离开光标的时候才会触发&#xff0c;也就是说在input事件的oninput书法的时候不会赋值&#xff0c;当onch…...

Oracle里面,with ... as 用法介绍

在Oracle数据库中&#xff0c;WITH AS 子句&#xff08;也称为公用表表达式&#xff0c;CTE, Common Table Expression&#xff09;是一种在查询中定义临时结果集的方法。这个临时结果集可以在后续的查询中被引用&#xff0c;就像是一个临时的表或视图一样。使用 WITH AS 子句可…...

一个简单的Qt Console Application计算练习程序

初步体验Qt Creator 用途&#xff1a;练习20以内2位数乘法速算的程序 功能1&#xff1a;支持用户设定题目数量 std::cout << "请输入本次练习题目数量&#xff1a;";int numProblems 0;std::string num;std::cin >> num;try {numProblems std::stoi(…...

windows文件拷贝给wsl2的Ubuntu

参考&#xff1a; windows文件如何直接拖拽到wsl中_win 移到文件到wsl-CSDN博客 cp -r /mnt/盘名/目标文件 要复制到wsl中的位置e.g.cp -r /mnt/d/byt5 /home Linux文件复制、移动、删除等操作命令_linux移动命令-CSDN博客 Linux 文件、文件夹的复制、移动、删除 - Be-myse…...

vivado 采用 SSI 器件进行设计

SSI 管脚的考虑因素 在为特定 SLR 中的组件规划管脚时&#xff0c;请将引脚放置在同一个 SLR 中。例如&#xff0c;将器件的 DNA 信息作为外部接口的一部分 时&#xff0c;请将该接口的引脚放置在 DNA_PORT 所在的主 SLR 中。其它考虑因素包括如下&#xff1a; • 把…...

Lua环境安装

软考鸭微信小程序 学软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 Lua是一种轻量级、小巧且易于嵌入应用程序的脚本语言&#xff0c;广泛用于游戏开发、Web开发、自动化脚本等领域。本文将详细介绍如何在不同操作系统上安装L…...

浏览器控制的无线开关

esp32-c3 作为HTTP server 控制led 灯。服务器注册两个uri 。一个"/open" 控制开&#xff0c;一个"/close"控制关。下一步再用一片c3作为客户端&#xff0c;运行http client 发送/open. /Close 模拟浏览器&#xff0c;控制led. 其实只要用手机或pc或平…...

Docker部署SSM项目及避坑指南

#又踩坑了&#xff0c;这里记录一下&#xff0c;以免日后忘记 前言&#xff1a;本来以为用docker部署个项目很轻松&#xff0c;嗯结果&#xff0c;又踩坑了&#xff0c;这里记录一个完整版。话不多说&#xff0c;开整。 第一步&#xff1a; 用docker拉取MySQL和Tomcat&#…...

多线程代码案例:单例模式/阻塞队列/线程池/定时器

案例一.单例模式 单例模式是一种设计模式;类似于棋谱,有固定套路,针对一些特定场景可以给出一些比较好的解决方案; 只要按照设计模式来写代码,就可以保证代码不会太差,保证了代码的下限; --------------------------------------------------------------------------------…...

WebGL开发者必备:用RenderDoc旧版本抓帧调试的完整避坑指南(附DEBUG_CHROME.bat脚本)

WebGL开发者必备&#xff1a;用RenderDoc旧版本抓帧调试的完整避坑指南&#xff08;附DEBUG_CHROME.bat脚本&#xff09; 最近在WebGL开发中遇到一个棘手问题&#xff1a;最新版RenderDoc已经禁止了对Chrome等浏览器的抓帧功能。这对于正在学习图形学课程&#xff08;比如GAMES…...

2024通信工程师初级备考指南:综合能力与专业实务核心考点解析

1. 2024通信工程师初级考试概况 2024年通信工程师初级资格考试定于9月28日举行&#xff0c;采用机考形式&#xff0c;考试时间为上午8:30至12:30&#xff0c;总时长4小时。这个考试分为两个科目&#xff1a;《通信专业综合能力》和《通信专业实务》&#xff0c;两科连续考试&am…...

EmuELEC 3.9 vs 4.0+:不同版本写入EMMC的详细操作指南(附常见问题解决)

EmuELEC 3.9与4.0版本EMMC写入全流程实战解析 1. 版本差异与核心机制解析 EmuELEC作为开源游戏系统&#xff0c;其3.9与4.0版本在EMMC写入机制上存在根本性架构差异。理解这些差异是避免操作失误的前提。 3.9版本的技术特点&#xff1a; 采用传统的installtointernal.sh脚本…...

【GIS】深入解析地理学中的尺度三重性:Size、Level、Relation的实践应用

1. 尺度三重性&#xff1a;GIS分析的基石 第一次接触"尺度"概念时&#xff0c;我也被各种术语绕晕过——为什么1:10000叫大比例尺却显示小范围&#xff1f;为什么生态学家说的"尺度"和城市规划师说的完全不是一回事&#xff1f;直到把尺度拆解成Size&#…...

AI推动SEO关键词优化的全新策略与实践明晰

在当前数字营销环境中&#xff0c;AI技术为SEO关键词优化带来了前所未有的变革。它通过自动化的数据分析与挖掘工具&#xff0c;能够帮助企业更准确地识别用户需求与搜索趋势。通过AI的支持&#xff0c;关键词挖掘变得更加高效和精准&#xff0c;企业可以快速获取相关关键词并优…...

RAG系统的‘记忆’安全吗?从AgentPoison看知识库污染攻击的隐蔽性与危害

RAG系统安全防线&#xff1a;如何抵御知识库污染攻击的隐蔽威胁 当企业将RAG系统部署在客户服务、医疗诊断或金融分析等关键场景时&#xff0c;很少有人意识到——知识库里那些看似权威的文档&#xff0c;可能正潜伏着精心设计的逻辑陷阱。去年某自动驾驶公司的紧急制动系统突然…...

可视掏耳勺哪个牌子好?用什么掏耳朵最好?掏耳勺神器新款第一名

用什么掏耳朵最好&#xff1f;如今耳道护理成为家庭日常刚需&#xff0c;可视掏耳勺凭借“边看边清洁”的核心优势&#xff0c;彻底解决了传统盲掏易戳伤耳道、推深耳垢的痛点&#xff0c;成为越来越多人的首选。但当前可视掏耳勺市场陷入参数内卷&#xff0c;不少品牌盲目追求…...

告别云端依赖:AnythingLLM本地Whisper实现完全离线语音转文字

告别云端依赖&#xff1a;AnythingLLM本地Whisper实现完全离线语音转文字 【免费下载链接】anything-llm The all-in-one AI productivity accelerator. On device and privacy first with no annoying setup or configuration. 项目地址: https://gitcode.com/GitHub_Trendi…...

Win11Debloat:5分钟解决Windows 11卡顿的终极优化指南

Win11Debloat&#xff1a;5分钟解决Windows 11卡顿的终极优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cu…...

Optick多线程性能分析:游戏引擎中的并发性能优化实战

Optick多线程性能分析&#xff1a;游戏引擎中的并发性能优化实战 【免费下载链接】optick C Profiler For Games 项目地址: https://gitcode.com/gh_mirrors/op/optick Optick是一款专为游戏开发打造的C性能分析工具&#xff0c;能够精准捕捉多线程应用中的性能瓶颈&…...