【计算机体系结构基础】指令流水线

news2024/11/20 20:28:07

单周期处理器

简要描述单周期处理器的执行过程:

  • PC从指令存储器中读取指令

  • 取指后译码得出相关的控制信号+读取regfile(寄存器堆)

  • 运算器对regfile中取出的操作数进行计算,将计算的结果写回通用寄存器堆或者得到访存指令的地址或者得到转移指令的跳转目标

  • load指令访问数据存储器后,将结果写回到通用寄存器,通用寄存器堆写入数据在计算结果和访存结果之间二选一。
    【注】:新的指令地址可能是顺序的pc+4,也可以是转移指令计算出来的跳转目标
    简单的CPU数据通路如下图:
    在这里插入图片描述
    改进一下,带时序控制逻辑的数据通路:
    clk:更新PC触发器,写寄存器以及访存指令需要时钟
    rst:确保处理器每次上电后都是从相同的位置取第一条指令
    第一个时钟周期:取指、译码、执行、访存、生成结果(回写)
    第二个时钟周期上升沿到来时:将上一个时钟周期的结果写入regfile中的寄存器堆,执行可能的数据存储写操作
    第二个时钟周期内:执行第二条指令,步骤和第一个指令相似。
    单周期处理器的每一条指令基本都在一拍内完成
    在这里插入图片描述

流水线处理器

很显然,单周期处理器中每个周期要完成很多的组合逻辑工作,如果将每个时钟周期的间隔拉长,处理器的主频无法提高,所以引入流水线。

多周期处理器

在这里插入图片描述

  • 第一个时钟周期:通过PC取出指令,在第二个时钟上升沿锁存到指令码触发器R1
  • 第二个时钟周期:将R1译码并生成控制逻辑(译码出需要执行什么类型的操作),读取通用寄存器,读取的res在第三个时钟周期的上升沿锁存到触发器R2
  • 第三个时钟周期:使用控制逻辑和R2进行运算
    分频时钟:将原始的时钟通过分频的方式产生5个时钟,控制PC、R1-R5这5个触发器。(事实上就用了一个时钟周期,只是用分频时钟将它变成了5个,很划算)。
    五级流水线的时空图:

在这里插入图片描述

流水线处理器

这样每条指令的执行时间并不降低,所以需要将同一时刻不同指令的不同执行阶段“重叠”起来,进一步提高处理器执行效率

在这里插入图片描述

指令相关和流水线冲突

指令相关

指令之间的相关分为3类:

  • 数据相关:如果两条指令访问同一个寄存器或者内存单元,且这两条指令中至少有一条是写寄存器或者内存单元的指令,那么就一定存在数据相关。
add.w $r2,$r1,$r1
add.w $r3,$r2,$r2

以上就存在数据相关,因为1中r2寄存器的值还没计算出来,2中无法使用r2计算出正确的r3值。

  • 控制相关:如果两条指令中一条是转移指令且另一条指令是否被执行取决于该转移指令的执行结果
  • 结构相关:如果两条指令使用同一个硬件资源。

数据相关

分为三种:

  • RAW(read after write)
  • WAW(write after write)
  • WAR(write after read)
    主要分析RAW引起的流水线冲突以及其解决方法
add.w $r2,$r1,$r1
add.w $r3,$r2,$r2
ld.w $r4,$r3,0
add.w $r5,$r4,$r4

在这里插入图片描述很显然,如果第二条指令要使用第一条指令写回到寄存器中的结果,就必须保证第二条指令读取寄存器的时候第一条指令的结果已经写回到寄存器中了,为了保证执行正确,最简单粗暴的解决方法就是:让第二条指令在译码阶段等待(阻塞)3拍,直到第一条指令将运算结果写入寄存器后才能读取寄存器。
阻塞在具体电路中的实现就是:将被阻塞流水级所在的寄存器保持原值不变,同时向被阻塞的流水级的下一级输入指令无效信号,用Bubble填充。

流水线前递技术

使用阻塞的流水线的执行效率是很低的,所以出现了流水线前递技术。
“何必非要等这个值沿着流水线一级一级传送下去写入寄存器后再从寄存器读出来呢?直接把这个值取过来不也是可行的吗?
在流水线中读取指令源操作数的地方通过多路选择器直接把前面的指令的运算结果作为后面的指令输入
在这里插入图片描述

控制相关引发的冲突和解决方法

在这里插入图片描述
在这里插入图片描述懒得打字了

结构相关引起的冲突以及解决方法

在这里插入图片描述

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

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

相关文章

边缘数据采集网关如何实现PLC远程上下载

边缘数据采集网关,又称边缘计算网关、工业物联网网关,是连接工业设备与通信网络的桥梁,可以实现不同协议之间的解析转换,打造高效实时的数据采集系统,并借助边缘计算规则对数据进行清洗过滤,适配云平台实现…

QT 学习笔记(十五)

文章目录一、UDP 通信过程1. Linux 下的 UDP 通信过程2. QT 下的 UDP 通信过程3. 在 QT 中实现 UDP 通信的流程4. TCP/IP 和 UDP的区别二、UDP 文本发送1. UDP 文本发送实例演示2. UDP 广播3. UDP 组播三、UDP 文本发送实现代码1. 主窗口头文件 widget.h2. 主窗口源文件 widget…

论文创新及观点

FEW-SHOT TEXT CLASSIFICATION WITH DISTRIBUTIONAL SIGNATURES 任务 Given an N-way K-shot classification task 论文设计图像 数据集 20 Newsgroups is comprised of informal discourse from news discussion forums (Lang, 1995).Documents are organized under 20 to…

数据分析-深度学习 Day2

目录:第一节 机器学习&深度学习介绍第二节 机器学习攻略一、机器学习的框架二、模型训练攻略三、针对Optimization Issue的优化,类神经网络训练不起来怎么办(一) 局部最优点和鞍点(二) 批处理和momentum(三) 自动调节学习率Learning rate(四) 损失函…

vue实现微信端和企业微信端扫码

前要&#xff1a;微信端调用微信的扫一扫和企业微信端调用企业微信的扫一扫获取订单码查询&#xff01;&#xff01; 一、微信端扫一扫 这里使用的是uniapp框架调用微信的内置sdk扫码防伪溯源&#xff01;http引入或者npm安装模块&#xff1a; //public/index.html <!DOCT…

《设计模式》命令模式

《设计模式》设计模式的基本原则 《设计模式》单例模式 《设计模式》工厂模式 《设计模式》原型模式 《设计模式》建造者模式 《设计模式》适配器模式 《设计模式》桥接模式 《设计模式》装饰者模式 《设计模式》组合模式 《设计模式》外观模式 《设计模式》享元模式 《设计模式…

【Java开发】Spring Cloud 03 :Spring Boot 项目搭建

为了体验从 0 到 1 的微服务改造过程&#xff0c;我们先使用 Spring Boot 搭建一个基础版的优惠券平台项目&#xff0c;等学习到 Spring Cloud 的时候&#xff0c;我们就在这个项目之上做微服务化改造&#xff0c;将 Spring Cloud 的各个组件像添砖加瓦一样集成到项目里。上一章…

jacoco:java代码覆盖率实践

文章目录一、jacoco基本了解二、实践准备三、jacoco使用3.1 插桩3.2 dump:覆盖率文件导出3.3 report:可视化报告3.4 merge:合并覆盖率文件四、相关命令扩展4.1 javaagent4.2 dump4.3 merge4.4 report五、资源链接一、jacoco基本了解 jacoco是一款面向java的代码覆盖率工具&…

linux系统中C++中构造与析构函数以及this的使用方法

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;C里面的基本语法结构以及对应的操作方法。 目录 第一&#xff1a;构造函数与析构函数 第二&#xff1a;this指针 第一&#xff1a;构造函数与析构函数 什么是构造函数&#xff1f;构造函数在对象实例化时被系统自动调用&a…

xshell连接Linux一直失败解决方法

文章目录解决对象方法配置防火墙关闭Linux防火墙关闭Windows防火墙xshell连接Linux一直失败解决方法 解决对象 可能出现以下两个问题&#xff1a; Linux防火墙已关闭和Windows防火墙已经关闭配置好 vim /etc/sysconfig/network-scripts/ifcfg-ens33 方法 配置 这个是最容易…

linux系统中实现C++中继承和重载的方法

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;如何实现C中继承和重载的功能。 第一&#xff1a;C中的继承功能 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类&#xff0c;这使得创建和维护一个应用程序变得更容易。这样做&#xff0…

CLRNet: Cross Layer Refinement Network for Lane Detection

Paper name CLRNet: Cross Layer Refinement Network for Lane Detection Paper Reading Note URL: https://arxiv.org/pdf/2203.10350.pdf TL;DR CVPR 2022 文章&#xff0c;自动驾驶公司飞步科技与浙大联合出品。lane anchor-based 方案&#xff0c;在多个数据集上取得 …

Linux中的哈希表:基于双链表的内核模块

1. 前言Linux内核中选取双向链表作为其基本的数据结构&#xff0c;并将其嵌入到其他的数据结构中&#xff0c;使得其他的数据结构不必再一一实现其各自的双链表结构。实现了双链表结构的统一&#xff0c;同时可以演化出其他复杂数据结构。本文对linux中基于双链表实现的哈希表进…

java springboot+mybatis电影售票网站管理系统前台+后台设计和实现

java springbootmybatis电影售票网站管理系统前台后台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言…

RS—|遥感数字图像处理编程练习(python)

目录一&#xff1a;模拟计算图像直方图和累计直方图二&#xff1a;计算图像的均值、标准差、相关系数和协方差三&#xff1a;利用模板进行卷积运算四&#xff1a;获取彩色图像的直方图五&#xff1a;图像直方图均衡化一&#xff1a;模拟计算图像直方图和累计直方图 ① 调用的p…

【雷达入门 | FMCW毫米波雷达系统的性能参数分析】

本文编辑&#xff1a;调皮哥的小助理 FMCW毫米波雷达系统的性能参数主要包含&#xff1a; (1)距离估计、距离分辨率、距离精度、最大探测距离; (2)速度估计、速度分辨率、速度精度、最大不模糊速度&#xff1b; (3)角度估计、角度分辨率、角度精度、最大角度范围。 分析以及…

微服务框架SpringCloud从入门到通神(持续更新)

SpringCloud——>SpringBoot——>JavaWeb 微服务技术栈导学1 哔站up黑马程序员主讲老师&#xff0c;一上来就给介绍了SpringCloud出现的背景&#xff1a;微服务是分布式架构的一种&#xff0c;分布式架构就是要把服务做拆分&#xff0c;而SpringCloud只是解决了服务拆分式…

FTP协议原理简析

FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。21端口用于建立控制连接&#xff0c;并传输FTP指令。20端口用于建立数据连接&#xff0c;传输数据流。 一&#xff1a;FTP功能简介 1&#xff1a;FTP服务器能够进行档案的传输与管理功能&#xff1b; 2&#xff1a;可以…

招生简章 | 欢迎报考中科院空天院网络信息体系技术重点实验室(七室)

官方公众号链接&#xff1a;招生简章 | 欢迎报考中科院空天院网络信息体系技术重点实验室&#xff08;七室&#xff09; 招生简章 | 欢迎报考中科院空天院网络信息体系技术重点实验室&#xff08;七室&#xff09; 中国科学院空天信息创新研究院&#xff08;简称空天院&#x…

【实战篇】38 # 如何使用数据驱动框架 D3.js 绘制常用数据图表?

说明 【跟月影学可视化】学习笔记。 图表库 vs 数据驱动框架 图表库只要调用 API 就能展现内容&#xff0c;灵活性不高&#xff0c;对数据格式要求也很严格&#xff0c;但方便数据驱动框架需要手动去完成内容的呈现&#xff0c;灵活&#xff0c;不受图表类型对应 API 的制约…