计算机组成原理之处理器(流水线)
引言
为什么不采用单周期实现,硬件比较简单?
主要是因为效率太低,处理器中最长的路径(一般是ld指令)决定了时钟周期
流水线概述
流水线是一种能使多条指令重叠执行的技术。
流水线更快的原因是所有的工作都在并行执行,所以单位时间能够完成更多的工作,流水线提高了吞吐率。
RISC-V是五级流水线 约等于五倍加速比
- 从存储器中取出指令IF
- 读寄存器并译码指令ID
- 执行操作或计算地址EX
- 访问数据存储器的操作数MEM
- 将结果写入寄存器WB

流水线冒险
当讲到流水线型的处理器的时候,冒险是绝对不能忽视的。
结构冒险
即硬件不支持多条指令在同一时钟周期执行。但是RIscv是面向流水线设计的,一些结构冒险早已经考虑到了。比如IM与DM的硬件分离。
数据冒险
由于一个步骤必须等待另一个步骤完成而导致的流水线停顿加Data Hazard
一种基本的解决方案是前递法,后面再详细介绍,这里提一下。
例子:
add x19, x0, x1
sub x2, x19 ,x3
sub指令x19使用的是add指令的rd也就是19号寄存器,这里会产生冒险。
前递解决图示:

但是请注意,前递不能解决所有的数据冒险,比如有ld use型指令。ld指令的rd被下一条指令进行使用,这个时候必须要停顿一个周期才能用前递解决。

控制冒险
出现在需要根据一条指令的结果后做决定,而其他指令在执行。
控制冒险的解决,可以采用停顿法或者预测法。停顿法这种保守的方法固然有效,但是太慢了。但是预测也有时候会出错,总之这个是个有优化空间的方案。

预测其实有种动态预测的方法来处理分支。就是比如:上一次预测失败了,这次改变预测的策略。
流水线的通路与控制
概览图

流水线:

WB阶段问题
考虑:
ld x10 0(x11) A
add x1 x2 x3 B
add x4 x5 x6 C
add x7 x8 x9 D
ld运行到WB阶段,将DM中的值写回寄存器但是由于D号指令此时正读,表示X7为writeReg,那么值就会写错!解决这个问题要添加额外的数据通路
如图:

时钟周期切片
如图

控制的添加
既然添加了额外的器件,为了实现流水线,还要添加控制

完整的数据通路
看图看图!

关于冒险进一步说明
关于数据冒险
数据冒险实际上有两对条件。
EX/MEM.RegisterRd = ID/EX.RegisterRs1
EX/MEM.RegisterRd = ID/EX.RegisterRs2
MEM/WB.RegisterRd = ID/EX.RegisterRs1
MEM/WB.RegisterRd = ID/EX.RegisterRs2
下一条要用到上一条的结果。
前递法解决

检测冒险的条件以及解决相应冒险的控制信号
EX冒险


ME冒险

更复杂的

数据冒险与停顿
载入使用型指令必要阻塞(停顿)stall

完整图示

本文由博客一文多发平台 OpenWrite 发布!
相关文章:
计算机组成原理之处理器(流水线)
引言 为什么不采用单周期实现,硬件比较简单? 主要是因为效率太低,处理器中最长的路径(一般是ld指令)决定了时钟周期 流水线概述 流水线是一种能使多条指令重叠执行的技术。 流水线更快的原因是所有的工作都在并行执行,所以单位…...
国际阿里云:云服务器灾备方案!!!
保障企业业务稳定、IT系统功能正常、数据安全十分重要,可以同时保障数据备份与系统、应用容灾的灾备解决方案应势而生,且发展迅速。ECS可使用快照、镜像进行备份。 灾备设计 快照备份 阿里云ECS可使用快照进行系统盘、数据盘的备份。目前,阿…...
计算机msvcp140.dll重新安装的四个解决方法,专门解决dll文件丢失问题的方法
在我多年的电脑使用经历中,曾经遇到过一个非常棘手的问题,那就是电脑提示找不到msvcp140.dll文件。这个问题让我苦恼了很久,但最终还是找到了解决方法。今天,我就来分享一下我解决这个问题的四种方法,希望对大家有所帮…...
提莫的idea的bug是真滴多
问题1:maven reload功能失效 我复制了一段代码到我项目里,这段代码依赖hutool包,于是我用idea快速导入,自动导入的是hutool-all:5.8.4。后来我发现这段还是有个函数报错,需要导入更高版本的hutool包才行,于…...
STM32笔记—EXTI外部中断
一、简介 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行; 中断优先级&…...
小程序分享当前页面
小程序分享页面的时候,大部分的资料都是显示的是onShareAppMessage 这个方法 /*** 用户点击右上角分享*/onShareAppMessage(res) {return {title: 您的好友向您分享了一本通讯录: this.data.setting.name,imageUrl: this.data.setting.share_img,path: pages/shar…...
10. GPIO中断
10. GPIO中断 回顾stm32中断系统STM32中断向量表中断向量偏移NVIC中断控制器 Cortex_A7 中断系统中断向量表GIC控制器中断IDGIC逻辑分块CP15协处理器c0寄存器c1寄存器c12寄存器c15寄存器 中断使能中断优先级设置优先级数配置 GICC_PMR抢占优先级和子优先级位数设置 GICC_BPR优先…...
【离散数学必刷题】谓词逻辑(第二章 左孝凌版)刷完包过!
专栏:离散数学必刷题 本章需要掌握的重要知识: 1.利用谓词表达式表示命题 2.变元的约束 3.谓词公式的定义、谓词公式的赋值 4.谓词公式的翻译(注意在全总个体域时使用特性谓词) 5.有限论域上量词的消去 6.谓词公式中关于量词的等价…...
SpringBoot系列-2 自动装配
背景: Spring提供了IOC机制,基于此我们可以通过XML或者注解配置,将三方件注册到IOC中。问题是每个三方件都需要经过手动导入依赖、配置属性、注册IOC,比较繁琐。 基于"约定优于配置"原则的自动装配机制为该问题提供了一…...
vue3+ts 前端实现打印功能
1.安装插件 npm install vue3-print-nb --save 2.全局引用 import { createApp } from ‘vue’ import App from ‘./App.vue’ import print from ‘vue3-print-nb’ const app createApp(App) app.use(print) app.mount(‘#app’) 例子 <template><div><el-…...
egg.js sequelize数据库操作配置
egg.js sequelize数据库操作配置 文章目录 egg.js sequelize数据库操作配置1. 数据库配置2. 迁移配置3.数据表设计和迁移4.模型创建 1. 数据库配置 安装并配置egg-sequelize插件(它会辅助我们将定义好的 Model 对象加载到 app 和 ctx 上)和mysql2模块&a…...
vagrant安装k8s集群
目录 概述前期准备安装virtualbox安装vagrant安装gitbash 集群架构集群安装集群初始化集群测试 概述 使用vagrant、virtualbox创建。 前期准备 安装virtualbox 访问官网安装,版本7.0.10 安装vagrant 访问官网安装,版本2.3.7 安装gitbash 访问官网…...
ArcGIS进阶:水源涵养功能分级评价操作
首先抛出水源涵养重要性评价的公式:水源涵养量降雨量-蒸散发量-地表径流量,其中地表径流量降雨量*平均地表径流系数 声明:以下数据来源于来自于牛强老师书籍(城乡规划GIS技术)。 以下给出重要性评价阈值表࿱…...
数据结构与算法 | 第四章:字符串
本文参考网课为 数据结构与算法 1 第四章字符串,主讲人 张铭 、王腾蛟 、赵海燕 、宋国杰 、邹磊 、黄群。 本文使用IDE为 Clion,开发环境 C14。 更新:2023 / 11 / 12 数据结构与算法 | 第四章:字符串 字符串概念字符串字符字符…...
2023-11-rust-struct
struct 类似 schema。 ts的interface 和type struct MyStruct {width: i32,height: i32, } 创建实例 let eg1 MyStruct {width: 23,height: 22,}; struct 可以有自己的方法,并且默认第一个参数是该实例 impl MyStruct {fn can_hold(&self, instance: &…...
Docker容器编排
文章目录 基本概念Docker ComposeSwarm分布式NodeTaskservice集群搭建弹性伸缩 基本概念 针对容器生命周期的管理,对容器生命周期进行更方便更快捷的方式进行管理。 依赖管理:当一个容器必须在另一个容器运行完成后,才能运行时,…...
计算机中丢失mfc140u.dll怎么解决
mfc140u.dll是一个Microsoft Visual C库文件,主要用于MFC(Microsoft Foundation Class)应用程序的开发。它包含了MFC应用程序所需的一些常用功能,如对话框、窗口、菜单等。当mfc140u.dll丢失时,可能会导致MFC应用程序无…...
postman设置动态token, 每次登录更新token
postman设置动态token, 每次登录更新token 文章目录 postman设置动态token, 每次登录更新token问题1. 设置全局变量2. 新建登录接口3. 设置脚本4. 切换环境5. 配置动态token 问题 token过期时间一般比较短, 每次使用postman调用接口都token非常麻烦 实现token过期后, 调用一次…...
架构师范文(AI写作)两篇
请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 架构师范文-论区块链技术及应用 2022年3月,我参与了某集团内部一款基于区块链技术的数字资产管理平台,该平台是为了方便管理公司旗下的各种…...
基于SSM的电子病历系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

