计算机组成原理之处理器(流水线)

news2024/11/18 23:36:47

引言

为什么不采用单周期实现,硬件比较简单?

主要是因为效率太低,处理器中最长的路径(一般是ld指令)决定了时钟周期

流水线概述

流水线是一种能使多条指令重叠执行的技术。

流水线更快的原因是所有的工作都在并行执行,所以单位时间能够完成更多的工作,流水线提高了吞吐率。

file

RISC-V是五级流水线 约等于五倍加速比

  • 从存储器中取出指令IF
  • 读寄存器并译码指令ID
  • 执行操作或计算地址EX
  • 访问数据存储器的操作数MEM
  • 将结果写入寄存器WB

file


流水线冒险

当讲到流水线型的处理器的时候,冒险是绝对不能忽视的。

结构冒险

即硬件不支持多条指令在同一时钟周期执行。但是RIscv是面向流水线设计的,一些结构冒险早已经考虑到了。比如IM与DM的硬件分离。

数据冒险

由于一个步骤必须等待另一个步骤完成而导致的流水线停顿加Data Hazard

一种基本的解决方案是前递法,后面再详细介绍,这里提一下。

例子:

add x19, x0, x1

sub x2, x19 ,x3

sub指令x19使用的是add指令的rd也就是19号寄存器,这里会产生冒险。

前递解决图示:

file


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

file

控制冒险

出现在需要根据一条指令的结果后做决定,而其他指令在执行。

控制冒险的解决,可以采用停顿法或者预测法。停顿法这种保守的方法固然有效,但是太慢了。但是预测也有时候会出错,总之这个是个有优化空间的方案。

file

预测其实有种动态预测的方法来处理分支。就是比如:上一次预测失败了,这次改变预测的策略。

流水线的通路与控制

概览图

file


流水线:

file


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,那么值就会写错!解决这个问题要添加额外的数据通路

如图:

file

时钟周期切片

如图

file

控制的添加

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

file

完整的数据通路

看图看图!

file


关于冒险进一步说明

关于数据冒险

数据冒险实际上有两对条件。

EX/MEM.RegisterRd = ID/EX.RegisterRs1

EX/MEM.RegisterRd = ID/EX.RegisterRs2

MEM/WB.RegisterRd = ID/EX.RegisterRs1

MEM/WB.RegisterRd = ID/EX.RegisterRs2

下一条要用到上一条的结果。

前递法解决

file

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

EX冒险

file

file


ME冒险

file

更复杂的

file


数据冒险与停顿

载入使用型指令必要阻塞(停顿)stall

file


完整图示

file

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

Adversarial Training Methods for Deep Learning: A Systematic Review

Adversarial Training Methods for Deep Learning: A Systematic Review----《面向深度学习的对抗训练方法:系统回顾》 摘要 通过快速梯度符号法(FGSM)、投影梯度下降法(PGD)和其他攻击算法,深度神经网络暴露在对抗攻击的风险下。对抗性训练是用来防御对抗性攻击威…

【86 backtrader实现crypto交易策略】backtrader和ccxt对接实现中低频自动化交易-01

最近有点空闲,尝试把backtrader和一些实盘交易的接口对接一下,方便大家进行中低频交易,主要目标包括:股票(qmt),期货(ctpbee), crypto(ccxt),外盘交易(ib,已实现,但是版本比较旧,后期会继续更新). 这个周末尝试实现了backtrader和ccxt的对接,主要是参考了下面的开源代…

使用74HC165扩展uno的输入管脚

74HC165管脚定义: 使用3个管脚扩展接入个独立开关 const int dataPin 2; /* Q7 */ const int clockPin 3; /* CP */ const int latchPin 4; /* PL */ const int numBits 8; /* Set to 8 * number of shift registers */ void setup() { Serial.begin…

暴力递归转动态规划(十五)

题目 给定一个正数n,求n的裂开方法数, 规定:后面的数不能比前面的数小 比如4的裂开方法有: 1111、112、13、22、04 。 5种,所以返回5 暴力递归 用暴力递归方法进行尝试,整体思路是这样: 暴力递…

Java --- 直接内存

一、直接内存 1、不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。 2、直接内存是在Java堆外的,直接向系统申请的内存区间。 3、来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存。 4、访问直接内存的…

Ubuntu 创建并发布 Django 项目

Ubuntu 创建并发布 Django 项目 升级操作系统和软件 sudo apt updatesudo apt -y dist-upgrade 安装 python3-pip sudo apt -y install python3-pip安装 django pip install -i https://pypi.tuna.tsinghua.edu.cn/simple djangosudo apt -y install python3-django创建 dj…

MongoDB基础知识~

引入MongoDB: 在面对高并发,高效率存储和访问,高扩展性和高可用性等的需求下,我们之前所学习过的关系型数据库(MySql,sql server…)显得有点力不从心,而这些需求在我们的生活中也是随处可见的,例如在社交中…

使用visualStudio发布可执行文件

编译成功后会在程序项目的路径下创建一个debug文件夹和一个release文件夹 文件夹中的具体文件入下所示 生成32位的可执行文件 32位的可执行文件可以在64位的计算机中执行,而64位的操作系统程序只能在64位的计算机中执行安装运行库的安装包根据电脑的版本选择合适的…

手机开机入网流程 KPI接通率和掉线率

今天我们来学习手机开机入网流程是怎么样的。以及RRC连接和重建流程(和博主之前讲TCP三次握手,四次挥手原理很相似)是什么样的,还有天线的KPI指标都包括什么,是不是很期待啊~ 目录 手机开机入网流程 ATTACH/RRC连接建立过程 KPI接通率和掉…

【YOLOv5】【模型压缩与加速】【量化】FP32、FP16、INT8

量化是将模型参数的存储类型从高精度存储降到低精度存储,从而达到减小模型体积大小、加快模型推理速度的效果。 目录 FP32量化 FP16量化 INT8量化 FP32量化 这个直接使用yolov5的export导出32位存储的 engine格式模型即可 python export.py --weights runs/train/…

前端---认识HTML

文章目录 什么是HTML?HTML的读取、运行HTML的标签注释标签标题标签段落标签换行标签格式化标签图片标签a标签表格标签列表标签表单标签form标签input标签文本框单选框复选框普通按钮提交按钮文件选择框 select标签textarea标签特殊标签div标签span标签 什么是HTML&a…

No188.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

C语言基础篇4:变量与存储

1 局部变量和全局变量 在介绍局部变量和全局变量前,先,了解一些关于作用域方面的内容。作用域的作用就是决定程序中的哪些语句是可用的,换句话说,就是程序中的可见性。作用域有局部作用域和全局作用域,那么局部变量就具…

深入研究SVN代码检查的关键工具:svnchecker vs. SonarQube,选择最适合你的代码检查工具

目录 一、SVN代码检查(整合svnchecker)1、创建SVN代码库2、下载安装包3、修改SVN配置4、新建代码检查配置文件(名称自定义)5、hooks目录添加配置文件6、设置只对Java文件进行检查7、测试 二、SonarQube代码检测1、什么是SonarQube2、MySQL数据库的安装3、SonarQube服务端软件安…

Python之函数进阶-函数执行原理

Python之函数进阶-函数执行原理 函数执行流程 C语言中,函数的活动和栈有关。栈是后进先出的数据结构。栈是由底端向顶端生长,栈顶加入数据成为压栈、入栈、栈顶弹出数据称为出栈。 def add(x, y):r x yprint(r)return rdef main():a 1r add(a, 2)r…

Pytorch损失函数、反向传播和优化器、Sequential使用

Pytorch_Sequential使用、损失函数、反向传播和优化器 文章目录 nn.Sequential搭建小实战损失函数与反向传播优化器 nn.Sequential nn.Sequential是一个有序的容器,用于搭建神经网络的模块被按照被传入构造器的顺序添加到nn.Sequential()容器中。 import torch.nn …

【操作系统】1.1 操作系统的基础概念、功能和目标以及特性

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

Mac电脑配置Flutter开发环境

1.进入官网下载页: Flutter SDK releases | Flutter 可以看到有 Windows、macOS、Linux三种系统的下载包 选择macOS,然后点击下载 Stable channel(稳定版)中的最新版本,下载完成后可以移动到资源库Library中。 2.下载…

使用easyui前端框架构建一个crud应用(看完这篇就够了)

easyui是博主最喜欢的前端框架,因为它提供了多种主题样式和各种好看的ui组件。 这篇文章将会详细地介绍easyui前端框架的使用,通过创建一个crud应用来帮助大家快速掌握easyui的使用。 一、快速开始 这个章节主要介绍easyui前端框架的下载,ea…

Leetcode—680.验证回文串II【简单】

2023每日刷题&#xff08;二十七&#xff09; Leetcode—680.验证回文串II 实现代码 class Solution { public:bool judgeFunc(string s, int left, int right) {while(left < right) {if(s[left] ! s[right]) {return false;}left;right--;}return true;}bool validPalin…