数据冒险-add x1, x1, x2 add x1, x1, x3 add x1, x1, x4

在这里插入图片描述

第一张图没有传递机制

竞争情况分析

  1. 读后写(RAW)竞争:当某条指令需要读取一个寄存器的值,而该寄存器的值尚未被前面的指令写入时,就会发生这种竞争。

    • 指令2(dadd r1, r1, r3)依赖于指令1(dadd r1, r1, r2)的结果,因为它也需要使用寄存器r1。但是此时指令1还未完成写回(WB)阶段。
    • 指令3(dadd r1, r1, r4)同样依赖于指令2的结果,因此也存在RAW竞争。
  2. 流水线暂停(Stalls):为了处理这些数据竞争,流水线引入了暂停(即指令2和指令3中空白的部分)。这些暂停使得指令可以延迟执行,等待前面的指令写回所需的数据。

第二张图有传递机制

在流水线处理器中,前递(Forwarding),也叫数据转发,是一种解决数据冒险的技术。它通过在指令执行的不同阶段之间直接传递数据来消除依赖,而不是等待指令写回(WB)阶段完成。这样可以减少流水线的暂停(Stall),提高执行效率。

如何用前递解决数据冒险

在图中的例子里,我们有以下指令:

  1. dadd r1, r1, r2
  2. dadd r1, r1, r3
  3. dadd r1, r1, r4

这些指令之间存在**读后写(RAW)**冒险,例如指令2依赖于指令1的结果,指令3依赖于指令2的结果。

解决步骤

  1. 检测数据依赖:流水线需要检测指令之间的数据依赖关系。例如,当指令2在ID(指令译码)阶段时,它会检查寄存器r1的值是否已经被上一条指令(即指令1)修改。

  2. 前递实现:在不使用前递的情况下,指令2必须等到指令1完成WB阶段后才能读取r1的值。但是通过前递技术,处理器可以在指令1的EX(执行)阶段完成计算后,直接将结果发送到指令2的EX阶段,而不是等待WB阶段。

    • 在这种情况下,指令1的执行结果会被直接前递给指令2的EX阶段。
    • 类似地,指令2在EX阶段的结果会前递给指令3的EX阶段。
  3. 减少Stall:通过前递,流水线可以消除许多数据依赖引起的暂停。例如,指令2和指令3不再需要等到前面指令完全写回后才能进行EX阶段的计算。

示例流程(按图中的例子)

假设我们在流水线中实现了前递,那么可以按以下方式执行:

  • 指令1 (dadd r1, r1, r2) 在 EX 阶段计算完结果。
  • 指令1的 EX 阶段结束时,直接将结果前递给指令2的 EX 阶段,这样指令2无需等待。
  • 同理,指令2的 EX 阶段结束后,将其结果前递给指令3的 EX 阶段

在这样的操作下,指令2和指令3不需要等待寄存器的写回过程,而是直接获取前一条指令的执行结果。

总结

  • 前递通过在流水线的执行阶段直接传递数据,消除了指令间的数据依赖。
  • 在前递的帮助下,流水线可以减少或完全避免Stall,从而提高执行效率。
  • 前递通常是在硬件中实现的,通过额外的逻辑单元来检查和转发数据。

这样,通过前递技术,可以在流水线结构中更有效地解决数据冒险问题。

  • 代码来自 从零开始写riscv处理器(五)数据冒险:停顿与前递
    在这里插入图片描述

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

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

相关文章

leetcode138:随机链表的复制

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 n…

使用 Umami 部署博客分析工具

Umami 简介 Umami 是一款开源且注重隐私的网站分析工具,可替代 Google Analytics。它提供网站流量和用户行为等见解,但不使用 Cookie 或收集个人数据,符合隐私法规。Umami 轻巧易用,可自行托管。 如果你有自己的博客,…

巡检任务管理系统(源码+文档+部署+讲解)

本文将深入解析“巡检任务管理系统”的项目,探究其架构、功能以及技术栈,并分享获取完整源码的途径。 系统概述 巡检任务管理、巡检抽查、巡检任务随机分派等功能 本项目名称为巡检管理系统,是对巡检工作进行数字化管理的系统。该系统适用…

RK3288 android7.1 适配 ilitek i2c接口TP

一,Ilitek 触摸屏简介 Ilitek 提供多种型号的触控屏控制器,如 ILI6480、ILI9341 等,采用 I2C 接口。 这些控制器能够支持多点触控,并具有优秀的灵敏度和响应速度。 Ilitek 的触摸屏控制器监测屏幕上的触摸事件。 当触摸发生时&am…

Windows系统中Oracle VM VirtualBox的安装

一.背景 公司安排了师带徒,环境搭建问题一直是初级程序员头疼的事情,我记录一下这些基础的内容,方便初学者。大部分开发者的机器还是windows系统,所以写了怎么安装。 二.版本信息及 操作系统:windows11 家庭版…

HTTP的了解

从输入 URL 到页面展示到底发生了什么?(非常重要) 类似的问题:打开一个网页,整个过程会使用哪些协议? 先来看一张图(来源于《图解 HTTP》): 上图有一个错误需要注意&…

2-149 基于matlab的LDPC译码性能分析

基于matlab的LDPC译码性能分析,LDPC(Low-Density Parity-Check)码作为编码技术,具有优秀的纠错性能和较低的编解码复杂度。为保证可靠的数据传输,对传输过程中可能出现的信道噪声、干扰等进行模拟和分析。分析对比了误…

医学可视化之热力图

在医学领域,热力图是另一种非常有用的可视化工具,它能够以独特的方式展示数据的密度和趋势。 一、热力图的特点 热力图是一种通过颜色变化来表示数据密度或趋势的可视化图表。它通常将数据值映射到不同的颜色区间,颜色越深表示数据值越高&a…

YOLOv11融合[ECCV2024]自调制特征聚合SMFA模块及相关改进思路|YOLO改进最简教程

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《SMFANet: A Lightweight Self-Modulation Feature Aggregation Network for Efficient Image Super-Resolution》 一、 模块介绍 论文链接&#xff1…

【C++】C++移动语义、左值右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符

二十五、C移动语义、左值和右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符 本部分讨论一些更高级的C特性:C移动语义。但是讲移动语义之前我们得先了解什么左值右值、左值引用和右值引用。 1、C的左值和右值、左值引用和右值引用左值是有地址的…

三菱QD77MS定位模块速度更改功能

速度更改功能” 是以任意时机将控制中的速度更改为新指定的速度的功能。更改后的速度直接设置到缓冲存储器中,并根据速度更改指令([cd.15速度更改请求)或者外部指令信号执行速度更改。 但是,机械原点复位的情况下,检测出近点狗 ON 并开始向蠕…

【Django】视图函数

【Django】视图函数 视图函数的本质是Python中的函数,视图函数负责处理用户的请求并返回响应,该响应可以是网页的HTML内容、重定向、404错误、XML文档、图像或者任何东西,一般在应用中的views.py编写,示例代码如下: …

Git 入门篇(二)

前言 Git 入门篇(一) Git 入门篇(二) Git 入门篇(三) 目录 创建远程代码仓库 创建本地代码仓库 同步本地-远程代码仓库 代码托管 创建远程代码仓库 登录:gitee.com ​ 新建仓库 ​ 创建本…

PLC_博图系列☞基本指令”TOF:启动关断延时定时器“

PLC_博图系列☞基本指令”TOF:启动关断延时定时器“ 文章目录 PLC_博图系列☞基本指令”TOF:启动关断延时定时器“背景介绍TOF: 启动关断延时定时器说明参数脉冲时序图示例 关键字: PLC、 西门子、 博图、 Siemens 、 TOF 背…

【RabbitMQ】之高可用集群搭建

一、RabbitMQ 集群简介 1、默认集群原理1-1、RabbitMQ 集群简介 单台 RabbitMQ 服务器处理消息的能力是有瓶颈的,而且可靠性还无法保证,所以需要通过集群来提高消息的吞吐量和提高数据可靠性。 由于 RabbitMQ 本身是基于 Erlang 编写,而 Er…

改进系列(3):基于ResNet网络与CBAM模块融合实现的生活垃圾分类

目录 1. ResNet介绍 2. CBAM 模块 3. resnet cbam 3.1 添加在每个layer层后 3.2 关于训练的建议 4. 垃圾分类实战 4.1 数据集 4.2 训练 4.3 最好的权重 4.4 推理 5. 其它 1. ResNet介绍 ResNet(残差网络)是一种深度卷积神经网络模型&#xf…

Linux 服务器上部署 .NET Core 应用程序,值得收藏!

在 Linux 服务器上部署 .NET Core 应用程序,标志着传统的以微软为中心的部署平台的重大转变。.NET Core 的跨平台特性允许开发人员享受 Linux 环境的性能、可靠性和安全性。本指南提供了在各种 Linux 发行版上部署 .NET Core 应用程序的全面概述,重点是使…

2024-11-01 - 统一身份认证 - OpenLdap - 中间件 - 流雨声

摘要 2024-11-01 周五 杭州 暴雨 调查问卷: https://www.wjx.cn/vm/exIBFDM.aspx# 2024年转瞬即逝,可是生活还在继续,这里有一项关于人工智能和项目管理对于效能关系的调研问卷,AI 对工作的作用和影响。问卷不采集个人信息,在此…

前端页面性能优化的常见问题与解决方案

在当今互联网高速发展的时代,前端页面的性能对于用户体验至关重要。一个加载缓慢、交互卡顿的页面很可能会导致用户流失。本文将深入探讨前端页面性能优化中常见的问题以及相应的解决方案。 一、常见问题 (一)资源加载问题 文件体积过大 …

视频播放相关的杂记

基于QT FFMPEG设计一款 RTMP协议推流、视频录制软件 实现的功能: (1)将摄像头视频流 麦克风音频流合并,并推到流媒体服务器 (2)将摄像头视频流 麦克风音频流保存到本地磁盘 基于QtFFMPEG设计一款RTM…