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

RISC-V笔记——Pipeline依赖

1. 前言

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

2. Pipeline依赖

Pipeline依赖指的是:

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

  1. b是load,在a和b程序顺序之间存在一个store m,m的地址或数据依赖于a,b返回的值是m写的值。
  2. b是store,在a和b程序顺序之间存在一些指令m,m的地址依赖于a。

这两点几乎在所有真实处理器pipeline上都存在的。

关于第一点,是想表明如果old的store的地址或数据还未知的话,load是不能从store转发数据的。也就是必须等a确定执行完之后,得到了m的地址或数据了,才会执行b,所以a和b的全局顺序肯定是保证的。如下图所示。

(f)在(e)的数据确定之前是不能被执行的,因为(f)必须返回(e)写的值,并且在(d)有机会执行之前,旧的值不能被(e)的回写所破坏,因此,(f)将不会在(d)之前执行,也就是它们俩的顺序是固定的。

关于第二点,它与第一点规则有着类似的观察:在可能访问同一地址的所有older load被执行之前,store不能在memory中确定执行。因为store如果提前执行的话,那么旧的值被覆盖了,那么older的load就无法读取到了。同样的,除非知道前面的指令不会由于地址解析失败而导致异常,都则通常不能执行store操作,从这个意义上说,这个一点是之前语法依赖里的控制依赖的某种特殊情况。如下图所示。

在(e)的地址被解析完之前,(f)不能执行,因为结果可能是地址匹配,也就是a1等于0。因此,在(d)被执行并确认(e)地址是否确实重叠之前,(f)不能被发到内存去执行的,也就是(d)和(f)的顺序是固定的。


http://www.kler.cn/news/362853.html

相关文章:

  • Docker部署MySQL主从复制
  • Ubuntu 2张4090,显卡安装,无法双屏显示
  • 十七、行为型(命令模式)
  • element设置时间和日期框早于现在的时间和日期禁用
  • [Hbase]一 HBase基础
  • 华为OD机试 - 篮球比赛 - 递归(Java 2024 E卷 100分)
  • kali的下载与配置
  • css 切角实现(全)
  • ffmpeg的视频滤镜: 抠图-chromakey
  • MongoDB 安装教程(MAC版本)
  • react 基础学习笔记
  • 数据降维与主成分分析
  • Python项目内网环境pdm install超时httpx.ReadTimeout: timed out
  • VMware虚拟机中centos磁盘扩容(非VG分区挂载方案)
  • RabbitMQ 中的交换机学习
  • 项目实战-图书管理系统之个人中心
  • 【02】RabbitMQ客户端应用开发实战
  • gin入门教程(7): 使用 Logrus + Lumberjack 创建日志中间件
  • 【RabbitMQ】如何在 Ubuntu 安装 RabbitMQ
  • react1816中的setState同步还是异步的深层分析
  • 【p2p、分布式,区块链笔记 Blockchain】truffle002 unleashed_rentable_nft 项目
  • 深入理解 IP 协议
  • 大物 真空中的静电场
  • 微前端之模块联邦架构
  • Linux 中 .bash_history、.bash_logout 等用户配置文件
  • Linux杀毒-KVRT