RISC-V笔记——语法依赖

1. 前言

Memory consistency model定义了使用Shared memory(共享内存)执行多线程(Multithread)程序所允许的行为规范。RISC-V使用的内存模型是RVWMO(RISC-V Weak Memory Ordering),该模型旨在为架构师提供更高的灵活性,以构建高性能可拓展的设计,同时支持可控制的编程模型。RSIC-V其实还支持Ztso扩展,这是为了方便移植x86或SPARC体系结构的代码,这两种体系结构默认情况下都使用TSO内存模型。至于什么是memory model、有哪些种类memory model以及它们有什么区别,可以看看这篇文章《一文读懂Memory consistency model (内存模型)》。

RISC-V的RVWMO模型主要包含了preserved program order、load value axiom、atomicity axiom、progress axiom和I/O Ordering。今天主要讲下preserved program order(保留程序顺序)中的Syntactic Dependencies(语法依赖)。

2. 语法依赖

RVWMO内存模型的定义部分取决于语法依赖。语法依赖关系是根据指令的源寄存器、指令的目的寄存器以及指令从源寄存器到目的寄存器携带依赖关系的方式来定义的。本文讲述的寄存器指的是整个通用寄存器、CSR的某些部分或整个CSR。

那么什么是源寄存器和目的寄存器呢?可以找到如下定义:

源寄存器定义:一般来说,如果满足下列任何条件之一,寄存器R(除X0)就是指令A的源寄存器

  • 在指令A的操作码中,rs1、rs2或rs3被设置为R;
  • A是CSR指令,在A的操作码中,csr被设置为R。如果A是CSRRW或CSRRWI,需要rd不是x0;
  • R是CSR,且是指令A的隐式源寄存器;
  • R是CSR,它是A的另一个源寄存器别名;

目的寄存器定义:一般来说,如果满足下列任何条件之一,寄存器R(除x0)就是指令A的目的寄存器

  • 在指令A的操作码中,rd被设置为R;
  • A是CSR指令,在A的操作码中,CSR被设置为R。如果A为CSRRS或CSRRC,需要rs1不是x0.如果A为CSRRSI或CSRRCI,需要umm[4:0]不是0;
  • R是CSR,且是指令A的隐式目的寄存器;
  • R是CSR,它是A的另一个目的寄存器别名;

比如有以下load和store指令:

lw x1,0(x2)   // x1充当目的寄存器角色

sw x3,0(x4)  // x3充当源寄存器角色

内存指令通常还进一步指定哪些源寄存器是地址源寄存器还是数据源寄存器。大多数非内存访问指令都带有从源寄存器到目的寄存器的依赖项。

那么什么是语法依赖呢?可以找到如下定义:

语法依赖定义:如果以下任何一个条件成立,那么指令j通过i的目的寄存器s和指令j的源寄存器r在语法上依赖于指令i。

  • s和r是同一个,且在i和j之间排序的程序指令没有r作为目的寄存器;
  • 在指令i和指令j之间有指令m,使得以下所有条件都成立:
    • 指令m的目的寄存器q和指令j的源寄存器r在语法上存在依赖;
    • 指令m的源寄存器p和指令i的目的寄存器s在语法上存在依赖;
    • 指令m的p和q存在依赖;

下面两个例子分别对应语法依赖的两种场景:

例子1

指令i:lw x1,0(x2)   // x1充当目的寄存器角色

指令j:sw x1,0(x4)  // x1充当源寄存器角色

这里指令i和指令j通过x1寄存器形成语法依赖,称作指令j依赖于指令i,因为指令j是younger,指令i是older的。

例子2:

指令i:lw x1,0(x2)   // x1充当目的寄存器角色

指令m:add x3,x1,x2   // x1充当源寄存器角色,x3充当目的寄存器角色

指令j:sw x3,0(x4)  // x3充当源寄存器角色

这里指令m和指令i通过x1形成语法依赖,指令j和指令m通过x3形成语法依赖,而且指令m的x1和x3存在依赖,因此指令j和指令i存在语法依赖。

3. 语法依赖类别

对于内存访问操作中,Syntactic Dependencies(语法依赖)可以分为syntactic address dependency(地址依赖),syntactic data dependency(数据依赖)和syntactic control dependency(控制依赖)。

为了说明这个三个依赖的不同之处,假设有a和b两个内存操作,i和j分别是生成a和b的指令。

地址依赖:如果r是j的地址源操作数,并且j通过源寄存器r对i有语法依赖,则b有语法地址依赖于a。

指令i (操作a):lw r,0(r1)

指令j (操作b):sw  r2,0(r)

数据依赖:如果b是一个store操作,r是j的数据源寄存器,j通过源寄存器r对i有语法依赖,那么b对a有语法数据依赖。

指令i (操作a):lw r,0(r1)

指令j (操作b):sw  r,0(r0)

控制依赖:如果在i和j之间有一条指令m,m是一条分支或间接跳转指令,并且m在语法上依赖于i,则b在语法控制上依赖于a。

指令i (操作a):lw r,0(r0)

指令m:bne r,r1,next

指令j (操作b):sw  r3,0(r4)

4. 总结

与其他现代内存模型一样,RVWMO内存模型使用语法依赖关系而不是语义依赖关系。换句话说,这个定义取决于被不同指令访问的寄存器的身份,而不是这些寄存器的实际内容。这意味着必须强制执行地址、控制或数据依赖,即使有些情况可以被优化掉。这种选择确保RVWMO与使用这些错误语法依赖关系作为轻量级排序机制的代码保持兼容。

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

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

相关文章

【C++栈 贪心 决策包容性】3170. 删除星号以后字典序最小的字符串|1772

本文涉及知道点 C栈 模拟 C贪心 LeetCode3170. 删除星号以后字典序最小的字符串 给你一个字符串 s 。它可能包含任意数量的 ‘’ 字符。你的任务是删除所有的 ’ 字符。 当字符串还存在至少一个 ‘’ 字符时,你可以执行以下操作: 删除最左边的 ’ 字符…

Go语言中的控制结构(四)

Go语言中的控制结构详解 控制结构是编程语言中控制代码执行流程的核心部分,Go语言通过if、for、switch等常见的控制结构,以及独有的defer、panic、recover机制,提供了强大且简洁的控制流管理。本文将详细讲解Go语言中的控制结构,包…

ASR-01和ESP32语音控制LED灯——基于VSCODE编辑器和ESP-IDF环境

一、ASR-01部分 大家不要问我软件哪里来,大家哪里买的的,就去哪里要,淘宝客服一定有,没有你就换一家。 图形化编程 原理:通过接收相匹配语音,赋值给ID,然后通过switch语句,判断ID值…

Linux内核USB3.0驱动框架分析--USB Hub代码分析

一、Linux 下USB Hub热插拔处理 1.1 Linux下USB HUB的驱动的实现和分析: USB设备是热插拔,因此在hub_probe函数中调用hub_configure函数来配置hub,在这个函数中主要是利用函数usb_alloc_urb函数来分配一个urb,利用usb_fill_int_u…

金九银十软件测试面试题(800道)

今年你的目标是拿下大厂offer?还是多少万年薪?其实这些都离不开日积月累的过程。 为此我特意整理出一份(超详细笔记/面试题)它几乎涵盖了所有的测试开发技术栈,非常珍贵,人手一份 肝完进大厂 妥妥的&#…

【Linux】操作系统基础

1.冯诺依曼体系结构介绍 冯诺依曼体系结构如下: 在上图中「输⼊设备」和「输出设备」⼀般被称为计算机的外设,⽽「存储器」在冯 诺依曼体系结构中表示「内存」 输⼊设备⼀般包括:⽹卡、磁盘、键盘、触摸屏等 输出设备⼀般包括:…

java 自定义填充excel并导出

首先在resources下面放一个excel模板 1. 方法签名和请求映射 RequestMapping(value "/ExportXls") public ResponseEntity<byte[]> rwzcExportXls(HttpServletRequest request, RequestBody JSONArray jsonArray) throws IOException { RequestMapping(val…

剧场的客户端形式区别,APP,小程序,H5的不同优势以及推广方案

剧场的客户端形式区别与推广策略 在数字化时代&#xff0c;剧场的线上化成为大势所趋。不同的线上平台如APP、小程序和H5各有千秋&#xff0c;如何选择最适合自己的平台&#xff0c;并制定有效的推广方案&#xff0c;成为了剧场管理者需要考虑的重要问题。 APP&#xff1a;深度…

【ONE·Web || HTML】

总言 主要内容&#xff1a;HTML基本知识入门&#xff0c;主要介绍了常见的一些标签使用&#xff0c;以及简单案例演示。       文章目录 总言0、前置说明1、认识HTML1.1、是什么1.2、初识 HTML 标签、HTML 文件基本结构1.2.1、相关说明1.2.2、vscode如何快速生成代码 2、HT…

污水排放口细粒度检测数据集,污-水排放口的类型包括10类目标,10000余张图像,yolo格式目标检测,9GB数据量。

污水排放口细粒度检测数据集&#xff0c;污-水排放口的类型包括10类目标&#xff08;1 合流下水道&#xff0c;2 雨水&#xff0c;3 工业废水&#xff0c;4 农业排水&#xff0c;5 牲畜养殖&#xff0c;6 水产养殖&#xff0c;7 地表径流&#xff0c;8 废水处理厂&…

三菱FX3U PLC绝对定位- DRVA指令

指令格式 相关软元件一览 功能和动作 这是采用绝对驱动的单速定位指令。采用从原点(0点)开始的距离指定方式&#xff0c; 也被称为绝对驱动方式。 1、在指令执行过程中&#xff0c;即使改变操作数的内容&#xff0c;也不反映到当前的运行中。 在下次的指令驱动时才有效…

QT 中如何保存matlab 能打开的.mat数据矩阵!

Windows 上安装并使用 MATIO 库来保存 MATLAB 格式的 .mat 文件&#xff0c;需要进行以下步骤&#xff1a; 1. 下载并安装 CMake MATIO 使用 CMake 构建项目&#xff0c;因此你需要先安装 CMake。 前往 CMake 官网下载适用于 Windows 的安装程序并安装。 2. 下载 MATIO 库源…

Windows,MySQL主从复制搭建

前提&#xff1a;windows环境&#xff0c;同一个服务器安装多个相同版本的mysql数据库 多个MySQL服务搭建完成后&#xff0c;下面我们进行主从复制的相关配置 1.主数据库 执行指令 #创建用户 CREATE USER slavelocalhost IDENTIFIED BY 123456;#授权 GRANT REPLICATION SLA…

专线监控的使用方法:运维团队的全面实战指南

在当今高度信息化的时代&#xff0c;专线网络已成为企业连接不同地域、保障业务连续性的重要基础设施。然而&#xff0c;随着网络架构的复杂化和业务需求的多样化&#xff0c;运维团队面临着前所未有的挑战。为了有效应对这些挑战&#xff0c;运维团队需要深入了解并熟练掌握专…

前端埋点学习

前端埋点 前端数据埋点是在前端页面中通过代码的方式手机用户行为数据和页面性能的过程&#xff0c;通过在页面中插入指定的代码&#xff0c;实现实时监控用户在页面上的操作行为。 通常包括一下事件 定义事件: 定义需要手机的数据事件&#xff0c;如点击&#xff0c;浏览等添…

Linux系列-常见的指令(二)

&#x1f308;个人主页&#xff1a; 羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” mv 剪切文件&#xff0c;目录 重命名 比如说&#xff0c;我们在最开始创建一个新的文件hello.txt 然后我们将这个文件改一个名字&#xff0c;改成world.txt 所以&#xff0c;…

UE5 武器IK瞄准系统

创建空项目 创建基础蓝图类My_GameMode&#xff0c;My_HUD&#xff0c;My_PlayChar&#xff0c;My_PlayController 项目设置地图模式 近裁平面 0.1 My_PlayChar蓝图中添加摄像机&#xff0c;角色骨骼网格体&#xff0c;武器骨骼网格体 编辑角色骨骼&#xff0c;预览控制器使用…

本地生活服务项目入局方案解析!本地生活服务商系统能实现怎样的作业效果?

当前&#xff0c;各大平台的本地生活服务业务日渐兴盛&#xff0c;提高创业者入局意向的同时&#xff0c;也让本地生活服务项目有哪些等问题也成为了多个创业者社群中的热议对象。而从目前的讨论情况来看&#xff0c;在创业者们所询问的众多本地生活服务项目中&#xff0c;通过…

apisix云原生网关

定义 企业级网关通过域名、路由将请求分发到对应的应用上&#xff0c;通常承载数千个服务的流量&#xff0c;对稳定性有较高要求。 CNCF全景图 选型 Kubernetes抽象出两个核心概念&#xff1a;Service&#xff0c;为多个Pod提供统一的访问入口&#xff1b;Ingress&#xff…

DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中?

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 原文链接&#xff1a;DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中? 如何将 (.mdf) 和 (.ldf) 的SQL Server 数据库文件导入到当前数据库中? Step 1.登录到 Sql Server 服…