计算机组成原理之处理器(流水线)
引言
为什么不采用单周期实现,硬件比较简单?
主要是因为效率太低,处理器中最长的路径(一般是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…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...

Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...

一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...