《计算机组织结构》期末复习-第15讲-指令周期和指令流水线

第15讲-指令周期和指令流水线

原文地址

指令周期

  1. 指令周期:处理单个指令的过程(时间)
    • 取指周期:从内存中提取一条指令
    • 执行周期:执行所提取的指令
  2. 只有当机器关闭、发生某种不可恢复的错误或遇到停止计算机的程序指令时,程序执行才会停止
    48592052bac3099b3b2b6a6bc730825 image-20231219140509286
  3. 间址周期
    • 指令的执行可能涉及一个或多个存储器中的操作数,它们每个都要求一次存储器访问
    • 使用间接寻址,还需要额外的存储器访问
    • 间址周期:把间接地址的读取看成是一个额外的指令子周期
    80fffef1906b6d92b4b7840982879dc
    - 取操作数发生了2次
  4. CPU的任务
    • 取指令:CPU 必须从存储器(寄存器、cache 、主存)读取指令
    • 解释指令:必须对指令进行译码,以确定所要求的动作
    • 取数据:指令的执行可能要求从存储器或输入/输出(I/O)模块中读取数据
    • 处理数据:指令的执行可能要求对数据完成某些算术或逻辑运算
    • 写数据:执行的结果可能要求写数据到存储器或I/O 模块
  5. CPU需求:寄存器
    • CPU需要在指令周期中临时保存指令和数据
    • CPU需要记录当前所执行指令的位置,以便知道从何处得到下一条指令
    • CPU需要一些小容量的内部存储器
      • 假定CPU 有:
        • 1个存储地址寄存器(MAR)
        • 1个存储缓冲寄存器(MBR)/ 存储数据寄存器(MDR)
        • 1个程序计数器(PC)
        • 1个指令寄存器(IR)

指令流水线

  1. 流水处理(pipelining):如果一个产品要经过几个制作步骤,通过把制作过程安排在一条装配线上,多个产品能在各个阶段同时被加工
  2. 指令流水线:一条指令的处理过程分成若干个阶段,每个阶段由相应的功能部件完成
    715d9b03a17c0ee53abc1a1de3ef71b
  3. 两阶段方法
    • 将指令处理分成两个阶段:取指令和执行指令
    • 在当前指令的执行期间取下一条指令
    • 问题:执行时间一般要长于取指时间
    • 更多问题
      • 主存访问冲突
      • 条件分支指令使得待取的下一条指令的地址是未知的
    image-20231219142441603
    4. 六阶段方法 - 为了进一步的加速,流水线必须有更多的阶段 - 取指令(Fetch instruction,FI):读下一条预期的指令到缓冲器 - 译码指令(Decode instruction,DI):确定操作码和操作数指定符 - 计算操作数(Calculate operands,CO):计算每个源操作数的有效地址 - 取操作数(Fetch operands,FO):从存储器取出每个操作数,寄存器中的操作数不需要取 - 执行指令(Execute instruction,EI):完成指定的操作。若有指定的目的操作数位置,则将结果写入此位置 - 写操作数(Write operand,WO):将结果存入存储器 - 各个阶段所需要的时间几乎是相等的 - 例:将9 条指令的执行时间由54 个时间单位减少到14 个时间单位
    image-20231219142859800
    - 问题: - 不是所有指令都包含6 个阶段 - 例:一条LOAD 指令不需要WO 阶段 - 为了简化流水线硬件设计,在假定每条指令都要求这6 个阶段的基础上来建立时序 - 不是所有的阶段都能并行完成 - 例:FI 、FO 和WO 都涉及存储器访问 - 若6 个阶段不全是相等的时间,则会在各个流水阶段涉及某种等待 - 限制:条件转移指令能使若干指令的读取变为无效 - 限制:中断,提前处理到一半的过程都需要被清除
image-20231219143134538
5. 超流水线(Super pipelining) - 将六级流水线细分为更多的阶段,增加流水线的深度 - 提升时钟频率,从而提高指令吞吐率
image-20231219143425956
5. 流水线性能 - 假设 - 𝑡 𝑖 : 流水线第𝑖 段的电路延迟时间 - 𝑡 𝑚 : 最大段延迟(通过耗时最长段的延迟) - 𝑘: 指令流水线段数 - 𝑑: 锁存延时(数据和信号从上一段送到下一段所需的段间锁存接收时间) - 周期时间𝑡 = max[𝑡 𝑖] + 𝑑 = 𝑡 𝑚 + 𝑑 - 令𝑇 𝑘,𝑛 为k 阶段流水线执行所有n 条指令所需的总时间 𝑇 𝑘,n = [𝑘 + (𝑛 - 1)] 𝑡 - 加速比 $$ S_{k}=\frac{T_{1,n}}{T_{k,n}}=\frac{nkt}{[k+(n-1)]t}=\frac{nk}{k+(n-1)}=\frac{n}{1 + \frac{n-1}{k}}>1 $$
  • 超标量流水线(Superscalar)
  • 超标量结构:具有两条或两条以上并行工作的流水线结构
  • 单周期→标量流水线: 时间并行性的优化, 主要是对现有硬件的分段
  • 标量流水线→超标量流水线: 空间并行性的优化, 需成倍增加硬件资源
  • 多核CPU:一个CPU 芯片中集成多个超标量处理器核
image-20231219151828703

冒险

  1. 在某些情况下,指令流水线会阻塞或停顿(stall),导致后续指令无法正确执行

  2. 类型

    • 结构冒险(Structure hazard)/ 硬件资源冲突
      • 不同指令同时使用相同的硬件资源,比如访存
    • 数据冒险(Data hazard)/ 数据依赖性
      • 有些数据要等前序计算完成
    • 控制冒险(Control hazard)
      • 比如条件转移
  3. 结构冒险

    • 原因:已进入流水线的不同指令在同一时刻访问相同的硬件资源
image-20231219152258334
- 解决方案1:流水线停顿(stall),插入空泡(bubble)
image-20231219152427936 image-20231219152432931
- 解决方案2:使用不同用途的多个存储器 - 例如:指令和数据放在不同的Cache 中 - 解决方案3:同一个存储器提供分时处理 - 例如:寄存器时钟上升沿写,时钟下降沿读
fc45d97588adcaeda9c26bafb53be84
  1. 数据冒险
    • 原因:未生成指令所需要的数据
    • 例如:一条指令需要使用之前指令的运算结果,但是结果还没有写回
    image-20231219153222041
    - 解决方案1:插入nop 指令(软件) - 问题:如果计算机的结构发生了变化,需要更新软件
    image-20231219153644429
    - 解决方案2:插入bubble(硬件) - 问题:效率低下,流水线失去意义
    image-20231219153957794
    - 解决方案3:前递(forwarding)/ 旁路(bypassing) - 无法解决:一条指令需要使用之前指令的访存结果 Load Use Harzard )(下面第二张图)
    image-20231219154410789 image-20231219154654582
    - 解决方案4:交换指令顺序
    image-20231219154940755
  2. 控制冒险
    • 原因:指令的执行顺序被更改
      • 转移(Transfer): 分支(branch), 循环(loop),
      • 中断(Interrupt)
      • 异常(Exception)
      • 调用/ 返回(Call / return)
    • 影响:
      • 转移指令占比15%~25%(平均每隔4~7 条指令)
      • 转移平均损失10 个周期
      • 流水线越深,超标量数越多,转移指令的影响越大
    • 解决方案1:取多条指令
      • 多个指令流:复制流水线的开始部分,并允许流水线同时取这两条指令,使用两个指令流
      • 预取分支目标:识别出一个条件分支指令时,除了取此分支指令之后的指令外,分支目标处的指令也被取来
      • 循环缓冲器:由流水线指令取指阶段维护的一个小的但极高速的存储器,含有n 条最近顺序取来的指令
    • 解决方案2:分支预测
      • 静态预测(规则不变)
        • 预测绝不发生跳转
        • 预测总是发生跳转
        • 依操作码预测
      • 动态预测(规则变化)
        • 发生/ 不发生切换
        • 转移历史表
        • 仅在连续发生两次错误时改变状态
          • 例如:有一个双层循环,当内循环进行时,总是预测不跳转,最后一次预测错误。如果一次预测错误就切换,那么下一次进入内循环时会预测跳转,然而实际发生跳转,导致两次预测错误。如果一次错误不切换,只有两次错误才切换,那么内循环结束时仍是预测不跳转,下一次进入内循环将会预测正确,总共只有一个错误预测。
        image-20231219161159576 image-20231219161210117
        - 转移历史表
        image-20231219162033073
    • 解决方案3:提前判断
      • 直接无条件转移:例如j Target
        • 在取指阶段即可获得转移目标地址(流水线不停顿)
      • 间接无条件转移:例如 jr $r1
        • 在译码阶段才能获得转移目标地址(流水线停顿1 周期)
      • 直接有条件转移:例如 beq $r1, $r2, Target
        • 在执行阶段才能获得转移目标地址(流水线停顿2 周期)
        • 在寄存器堆输出端增加额外的比较电路(流水线停顿1 周期)
    • 解决方案4:交换指令顺序
    image-20231219163122385
  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值