当前位置: 首页 > article >正文

《计算机原理与系统结构》学习系列——处理器(中)

系列文章目录

目录

  • 流水线数据通路与控制
    • 概述
      • 5个流水级
        • 指令周期与流水级
      • 流水线性能
        • 流水线时钟周期的长度T和数量cycles
        • 流水线性能
    • 流水线数据通路
      • 流水线寄存器
      • 流水线分析
      • 图形化流水线
      • 流水线控制

流水线数据通路与控制


概述

5个流水级

指令周期与流水级

在这里插入图片描述
在这里插入图片描述

单周期实现中,任一时刻只有部分硬件在运行
将指令执行分散在五个周期,每个周期只执行一个阶段,这样的方法对于效能浪费大
指令1进入ID周期后,指令2可以使用IF部分硬件
指令1进入EX周期后,指令2可以使用ID部分硬件…

与指令周期五个阶段相对应,把数据通路分为五个流水级,形成流水线


流水线性能

流水线时钟周期的长度T和数量cycles

假设五个阶段各需200ps(1ps = 1 0 − 12 s 10^{-12}s 1012s),将最慢阶段的200ps作为时钟周期

时钟周期数 = 指令数 + 流水级数 - 1 cycles = IC + n -1
理想加速比 = 流水线级数 S n 理想 = n S_{n理想} = n Sn理想=n
(理想条件为:1.每个流水级时间等长 2.流水线没有开销 3.指令数足够大)

在这里插入图片描述
假设五个阶段需要的时间分别为200ps、100ps、200ps、200ps、100ps
仍然将最慢阶段的200ps作为时钟周期(简单源于规整)
现在考虑lw指令后面跟着一条add指令,add指令在ID阶段需要lw取出的数据,而此时lw还没取出数据,这导致了冲突
因此省略流水周期可能导致两条指令抢占同一流水级的硬件部件引发结构冒险


流水线性能

只管查一条指令,可以发现流水线没有减少单挑指令的执行时间,而是通过增加指令的吞吐率来提高性能,即在同一时间处理多条指令的不同阶段,实现指令级并行

理想情况下,流水线CPI为1,IC不变,由时钟周期长度决定的吞吐率是评价流水线性能的重要指标

提高流水线性能,可以进一步划分流水级缩短时钟周期。在IC和CPI不变的情况下,进一步缩短T,减少CPU执行时间,提高吞吐率提升

过度划分流水级会导致调度开销增大、分支性能下降、抵消性能


流水线数据通路

流水线寄存器

任一时刻,每个流水级只被一条指令占用,用一条数据通路执行5条MIPS指令不会造成结构冒险

但每条指令使用和生成的数据不同,为了保留指令各自的数据需要在两个流水级之间插入流水线寄存器(以左右两个流水级命名非别为IF/ID,ID/EX,EX/MEM,MEN/WB)
在这里插入图片描述
在这里插入图片描述

流水线分析

(左半边涂灰表示写入,右半边涂灰表示读取,组合单元涂灰表示使用)

  • IF:一切指令都要读取,将PC+4和指令传给IF/ID
  • ID:一切指令都要译码产生控制信号,除j以外均要读取寄存器。PC+4继续传给ID/EX,rs和rt的数据扩展后的立即数也要传给ID/EX
  • EX:多选器ALUSrc选择ALU源操作数和rs相加。ALU结果、Zero标志位、分支目标地址都要传给EX/MEM

在这里插入图片描述

  • MEM:从数据存储器中读取数据,和ALU运算结果一并传给MEM/WB
  • WB:将访存读取的数据写回寄存器,为写回rt,需要保存rt地址
    在这里插入图片描述在这里插入图片描述

图形化流水线

以下面五条指令为例
lw $10,20($1)
sub $11,$2,$3
add $12,$3,$4
lw $13,24($1)
add $14,$5,$6
在这里插入图片描述

流水线控制

流水线控制信号和单周期控制信号的种类、数量、功能完全相同
每条指令在ID级产生控制信号后,下一周期会后续指令覆盖
因此,控制信号也需要从ID级依次传递到EX级、MEM级、WB级。EX级使用该级的信号(ALUSrc和ALUOp)后不再使用,可以丢弃,MEM级同理,这就是跨流水级的控制信号传送

请添加图片描述
请添加图片描述


http://www.kler.cn/news/367490.html

相关文章:

  • 【C语言刷力扣】1768.交替合并字符串
  • 2024年CentOS镜像下载地址,包括CentOS官网、国内镜像下载,超详细也
  • ELK之路第一步——Elasticsearch集群的搭建以及踩坑记录
  • MATLAB中 exist函数用法
  • Java基础第五天(实训学习整理资料(五)练习题)
  • 【NOIP提高组】加分二叉树
  • Linux:socket实现两个进程之间的通信
  • #单体到微服务架构服务演化过程
  • Mermaid流程图完全指南
  • 2024年10月25日练习(双指针算法)
  • Redis 主从同步 问题
  • python一键运行所有bat脚本
  • 机器学习(10.14-10.20)(Pytorch GRU的原理及其手写复现)
  • P1588 [USACO07OPEN] Catch That Cow S
  • Unity C#脚本的热更新
  • 单细胞 | 转录因子足迹分析
  • Docker容器间通信
  • 深入了解 MySQL 中的 INSERT ... SELECT 语句
  • iOS弹出系统相册选择弹窗
  • VS/Qt Creator +QT生成带.ico图标的.exe 并打包
  • qt QLabel详解
  • 智能合约在Web3中的作用:区块链技术的创新实践
  • JAVA基础-树和Set集合
  • uiautomatorviewer中的两个错误
  • 在虚拟化环境中,虚拟机的资源分配是否真的能够完全等效于物理服务器?是否有某些特定的工作负载在虚拟化环境中始终无法达到理想表现?
  • 【ChatGPT插件漏洞三连发之一】未授权恶意插件安装