【萌新的RiscV学习之流水线结构的概述-7】

萌新的RiscV学习之流水线结构的概述-7

之前写完了单周期的指令 目前朝着流水线迈进
由于涉及学业机密 就不展示代码了
主要展示学习过程和一些想法
由于时钟周期必须满足所有指令中最坏的情况,所以不能使用那些缩短常用指令执行时间而不改变最坏情况的实现技术。因此,单周期实现违反了第 章中师速经常性事件这一设计原则。
流水线是一种能使多条指令重叠执行的实现技术。目前流水线技术广泛应用。
同样的原则也可用于处理器,即采用流水线方式执行指令。 RISC-V 指令执行通常包含
五个步骤:
1.从存储器中取出指令。
2.读寄存器并译码指令。
3.执行操作或计算地址。
4.访问数据存储器中的操作数(如有必要)。
5.将结果写入寄存器(如有必要)。
为了使讨论具体化,我们先建立一个流水线。在本例和本章的其余部分,我们只考虑这七条指令:双字载入 (l d) 、双字存储 (sd) 、加 (add) 、减 (sub) 、与 (and) 、或 (or)相等就跳转 (be q)指令。本例将单周期指令执行(每条指令执行需要一个时钟周期)与流水线指令执行的平均执行时间进行对比。假设在本例中主要功能单元的操作时间为:指令或数据存储器访问为200 ps, ALU 操作为 200 s, 寄存器堆的读或写为 IOO 。在单周期模型中,每条指令的执行需要一个时钟周期,所以时钟周期必须满足最慢的指令。
暂定的两种逻辑之间进行对比
流水线
在这里插入图片描述

一个是程序顺序执行
一个是程序按照流水线的形式执行
我们观察到在我们假定的这段区间中,总是以最长的一段一个步骤的时间 作为我们的步长 。
计算机流水线阶段也受限于最慢的阶段,要么是ALU操作,要么是存储器访问。同时我们假设写寄存器发生在时钟周期的前半段,读寄存器堆操作发生在时钟周期的后半段。
流水线在乎的是最长的一个阶段 需要处理多久 他把简单的事情 分成了很多步
而顺序执行在乎的最长的一整个执行流程

在这里插入图片描述

RiscV 仿佛天生为流水线而生的一般
第一点 : RiscV指令长度相同,x86会有1个字节到15个字节不等,在现代设计流水线的过程中,主要将x86转化成类似流水线的结构
第二点 : RiscV只有几种指令格式,源寄存器和目标寄存器的位置相同。
第三点 :存储器操作数只出现在RiscV的load或store

流水线冒险
在流水线中 会出现一种情况 在下一个时钟周期中下一条指令无法执行。

结构冒险

如上所述, RISC-V 指令系统是面向流水线设计的,这使得设计人员在设计流水线时很容易避免结构冒险。然而,假设图 4-25 的流水线结构只有一个而不是两个存储器,那么如果有第四条指令,则会发生第一条指令从存储器取数据的同时第四条指令从同一存储器取指令,流水线会发生结构冒险。

在这里插入图片描述

数据冒险
由于一个步骤必须等待另一个步骤完成而导致的流水线停顿叫 数据冒险
在计算机流水线中,数据冒险源于一条指令依赖千前面一条尚在流水线中的指令(这种关系在洗衣例子中并不存在)。例如,假设有一条加法指令,它后面紧跟着一条使用加法的和的减法指令 (X 19):
add x19 , x0 , x1
sub x2 , x19 ,x3
在不做任何干预的情况下,这一数据冒险会严重地阻碍流水线。 add 指令直到第五个阶段才写结果,这将浪费三个时钟周期。尽管可以尝试通过编译器来消除这些冒险,但结果并不令人满意。这些依赖经常发生,并且导致的延迟太长,所以不可能指望编译器将我们从这个困境中解救出来。

一种基本的解决方案是: 不需要等待指令完成就可以尝试解决数据冒险。对于上面的代码序列,一旦ALU计算出加法的和,就可以将其作为减法的输入。作为前递或旁路。

在这里插入图片描述

同时我们假设写寄存器堆操作发生在时钟周期的前半段,读寄存器堆操作发生在时钟周期的后半段。本章后面将一直莲循这个假设

这是我们初步想要实现的流水线方案
现在以add指令为基础进行下一步的实现
IF示取指令阶段,方框表示指令存储器;
ID 表示指令译码/读寄存器阶段,虚线框表示正在被读的寄存器堆;
EX 表示执行阶段,图中图形表示 ALU;
MEM 表示存储器访问阶段,方框表示数据存储器;
WB 表示写回阶段,虚线表示被写入的寄存器堆。
add指令的效果是 先从指令寄存器中读取出指令的地址 ,然后寄存器根据指令的地址得到指令(译码) 然后将指令传给寄存器,读寄存器号得到相应的数据 ,再把数据传递给ALU进行合适的执行计算。MEM是Datamemory 部分 用到datamemory
接下来的WB 表示写回。

1.取出指令, PC 自增。
2.从寄存器堆读出两个寄存器 x2 x3, 同时主控制单元在此步骤计算控制信号。
3.根据部分操作码确定 ALU 的功能,对从寄存器堆读出的数据进行操作。
4.将 ALU 的结果写入寄存器堆中的目标寄存器 (x1)。

阴影表示该单元被指令使用。因为 add 指令不访问数据存储器,所以 MEM没有阴影。寄存器堆或存储器右半部分为阴影表示该阶段它们被读,而左半部分为阴影表示该阶段它们被写。因此, ID 的右半部分在第二阶段为阴影,因为寄存器堆被读,而 WB 的左半部分在第五阶段为阴影,因为寄存器堆被写

下面介绍一下前递的逻辑
在这里插入图片描述

我们通过前递的概念 将add计算得到的结果 传递给下一步马上需要执行的sub中
这种形式看上去是很巧妙的,但是当我们需要的是另一种比如说load装载一个数的时候 必须等到从datamemory中读出来
这样的话又和R型指令的前递会产生冲突了
所以我们把这种冒险叫作载入-使用型数据冒险。 正式叫法是流水线停顿 ,通俗而言叫气泡。
在这里插入图片描述

当一条 load 指令之后紧跟着一条需要使用其结果的 型指令时,即使使用前递也需要停顿。如果不停顿,从存储器访问阶段的输出到执行阶段的输入这条路径意味着时间倒流,这是不可能的。该图实际是一个示意图,因为直到 sub 指令被取出并译码后才知道是否需要停顿。

第三种产生的冒险被称为控制冒险。 出现这种情况的原因是: 需要根据一条指令的结果做出决定,而其他指令正在执行。
这里的有问题的点在于 类似所说的分支指令 我们拿到之后必须进行合适的判断后才能确定下一条的指令究竟来自哪里 。
一种可能的解决方案是在取出分支指令后立即停顿,一直等到流水线确定分支指令的结果并知道要从哪个地址取下一条指令为止。
在这里插入图片描述

每遇到条件分支指令就停顿以避免控制冒险的流水线。本例假定条件分支指令发生跳转,并且分支目标地址处的指令是 or 指令。分支指令后会插入一个周期的停顿或气泡。我们将在 4.8 节中看到,实际中产生一次停顿的过程要更复杂。这种方法对性能的影响与插入一个气泡是一样的。

假设我们对于分支指令的处理都是暂停一小段时间 然会读取 这会导致速率会严重下降
我们可以通过计算机特有的预测功能。
其实也没有讲的很明白 大体说了一下思路。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

链表(单链表、双链表)

前言:链表是算法中比较难理解的部分,本博客记录单链表、双链表学习,理解节点和指针的使用,主要内容包括:使用python创建链表、实现链表常见的操作。 目录 单链表 双链表 单链表 引入链表的背景: 先来看…

2023年最新电商某东app端sign签名算法与cipher加解密逆向分析(2023-09-26)

前言: 本文仅供学习交流,只提供关键思路不会给出完整代码,严禁用于非法用途,若有侵权请联系我删除!技术交流合作请私信! 一.工具的选择(抓包工具的选择,是门学问) 用…

Android存储权限完美适配(Android11及以上适配)

一、Bug简述 一个很普通的需求,需要下载图片到本地,我的三个测试机(荣耀Android10,红米 11 和小米Android 13都没有问题)。 然后,主角登场了,测试的三星Android 13 死活拉不起存储权限弹窗。 …

深入理解红黑树

小白慎入!本文难度比较高,需要对红黑树有一定的了解再来看! 红黑树 红黑树是一种高级数据结构,是平衡树大家族中的一员,并且听名字就知道这个玩意不是凡物,可能你从未听过,但是你一定会为这样的…

华为OD七日集训第6期 十一特辑 - 按算法分类,由易到难,循序渐进,玩转OD

目录 专栏导读华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢? 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、优先队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治…

大咖共探AGI时代机遇,腾讯云助力大模型规模化应用提速

引言 2023 年,科技圈的“顶流”莫过于大模型。自 ChatGPT 的问世拉开大模型与生成式 AI 产业的发展序幕后,国内大模型快速跟进,已完成从技术到产品、再到商业的阶段跨越,并深入垂直行业领域。 新技术的爆发,催生新的应…

mdobus ASCII转CAN OPEN JAE1939协议网关

Modbus RTU协议转换网关是一种常见的设备,用于将Modbus RTU协议转换为其他通信协议。而CANopen是一种基于CAN总线的通信协议,主要用于工业自动化和控制系统中。本文将介绍Modbus RTU协议转换网关如何支持CANopen协议,以及该功能的应用场景和优…

洗地机哪个牌子好用又实惠?口碑最好的洗地机推荐

智能技术飞速发展的时代,扫地机器人这类智能家电其实也在顺应潮流和用户需求,不断更新迭代。暂且不说市面上现有多少个洗地机品牌,单单一个洗地机品牌旗下,其实每年都会有多个系列的新品亮相,我们面对的选择多了&#…

javaee之黑马乐优商城6

商品品牌的查询 上面就是我们需要根据分类id去找品牌 假设我们现在拿到的是 商品的分类id,我们需要根据分类id查询出对应的品牌即可 下面我们拿到上面的接口,直接撸代码 这个是和品牌相关联的操作,因为先去看一下BrandMapper,这个mapper是…

OpenCV显示10bit Raw数据

参考&#xff1a;10 12 14bit图像存储格式&#xff0c;利用Opencv显示10bit Raw数据,并根据鼠标的移动显示对应位置的灰度值。其他bit位数的Raw数据方法类似。 代码实现&#xff1a; #include<opencv2/opencv.hpp> #include<iostream> #include<opencv/highgu…

Qt扩展-QCustomPlot 简介及配置

QCustomPlot 简介及配置 一、概述二、安装教程三、帮助文档的集成 一、概述 QCustomPlot是一个用于绘图和数据可视化的Qt 控件。它没有进一步的依赖关系&#xff0c;并且有良好的文档记录。这个绘图库专注于制作好看的、发布质量的2D绘图、图形和图表&#xff0c;以及为实时可…

中间相遇法(分治类问题非等大分治的平衡做法)

分治&#xff0c;如果分成两半大小不一样&#xff0c;很容易被卡到 O ( n 2 ) O(n^2) O(n2) 在某些题目中&#xff0c;利用中间相遇法&#xff0c;我们可以优化这个过程 其优化的前提是分治的大头在找分界点 复杂度不用证&#xff0c;很好理解吧 这层找地越久&#xff0c;下…

一维卷积神经网络

假设输入数据维度为8&#xff0c;filter维度为5&#xff1b; 不加padding时&#xff0c;输出维度为4&#xff0c;如果filter的数量为16&#xff0c;那么输出数据的shape就是4*16. 一维卷积不代表卷积核只有一维&#xff0c;也不代表被卷积的feature也是一维。一维的意思是说卷…

regexp 应用

今天同事拿出个小栗子 1 如果用like的话 1,22 的情况会被字符串2匹配到这样会有问题 这里需要用concat将uids处理下 比如第一条处理成&#xff0c;1,2&#xff0c;3&#xff0c; 的形式 去模糊匹配 ‘%,1,%’ 当然like这种模糊匹配不太建议使用 2 regexp 用法 单个值 &#x…

MySQL作业1

目录 一.创建一张表&#xff0c;包含以下所有数据类型 建表&#xff1a;​编辑 二.使用以下六种约束 1.非空约束 2.唯一约束 3.主键约束 4.外键约束 5.检查约束 6.默认值约束 一.创建一张表&#xff0c;包含以下所有数据类型 Text 类型&#xff1a; Number 类型&#…

2023-9-26 JZ 复杂链表的复制

题目链接&#xff1a;复杂链表的复制 import java.util.*; /* public class RandomListNode {int label;RandomListNode next null;RandomListNode random null;RandomListNode(int label) {this.label label;} } */ public class Solution {public RandomListNode Clone(Ra…

【ComfyUI】Pytorch预训练模型(torch.hub)缓存地址修改

序言 最近玩ComfyUI时&#xff0c;每次生成图片&#xff0c;总是会下载一些东西&#xff0c;时间长了&#xff0c;C盘就不够用了&#xff0c;今天清理C盘发现&#xff0c;总是会在C:\Users\yutao\.cache\torch\hub\checkpoints这个路径下&#xff0c;下载大模型文件&#xff0…

适合零基础小白学的 Python 教程,视频或者书籍都可以?

Python 有很多衍生方向&#xff0c;比如 web 开发、网络爬虫、数据分析、数据挖掘、机器学习、人工智能等等&#xff0c;就业范围是很广的&#xff0c;Python 相较于别的编程语言对小白入门还是很友好的&#xff0c;Python 入门推荐这份书籍&#xff1a;PYTHON全案例实践 【PD…

6.wifi开发【智能家居:下】,正式开发:智能开关灯,智能采集温湿度,智能调彩灯

一。WEB Server开发 1.需求分析 用户通过页面操作插座彩灯温湿度 【开发前端1】&#xff1a;智能插座网页设计 智能插座网页设计需求 1.通过浏览器访问ESP8266 webserver 2.显示“创客学院-WiFi-智能家居” 3.显示“智能插座” 4.显示当前插座工作状态 5.按键触发插座动作 2.…

新手必看:Android studio 侧边栏实现,带源码

文章目录 前言效果图正文toolbar 用于定义应用程序的导航栏app_bardrawer_layout 用于创建侧边栏导航nav_header_draw app:menu"menu/activity_main_drawer" 前言 本篇内容主要是自己实现侧边栏后的一些总结&#xff0c;部分理论来着网络和ai助手&#xff0c;如有错…