乱序

处理器中发射、派遣、执行、写回的顺序可以衍生出“顺序”和“乱序”的概念,将在之后进行讨论

反压

流水线越深,由于每一级流水线需要进行握手,流水线的最后一级的反压信号可能会一直串扰到最前一级造成严重的(Back-pressure)时序问题,需要使用一些比较高级的技巧来解决这些时序问题。在现代处理器设计中,通常有如下3种方法。

  • 取消握手:此方法能够杜绝反压的发生,时序表现非常好。但是取消握手,即意味着流水线中的每一级并不会与其下一级进行握手,可能会造成功能错误或者指令丢失。因此这种方法往往需要其他机制配合,比如重执行(Replay)、预留大缓存等。简而言之,此方法比较激进,辅以一系列其他的配置机制,硬件总体的负责度会比较大,只有在一些非常高级的处理器设计中才会用到。
  • 加入乒乓缓存:加入乒乓缓存(Ping-pong Buffer)是一种面积换时序的方法,也是解决反压的最简单的方法。通过乒乓缓存(有两个表项)替换掉普通的一级流水线(只有一个表项),可以使得此流水线向上一级流水线的握手接受信号仅关注乒乓缓存中是否有一个以上有空的表项即可,无需将下一级的握手信号串扰至上一级。
  • 加入前向旁路缓存:加入前向旁路缓存(Forward Bypass Buffer)也是一种用面积换时序的方法。旁路缓存仅只有一个表项,由于增加了这一个额外的缓存表项,可以将后向的握手信号时序路径砍断,但是对前向路径不受影响,因此可以广泛适用于握手接口。

流水线冲突(Hazards)

主要分为资源冲突和数据冲突

资源冲突:

资源冲突一般指代硬件资源的冲突,最常见的是运算单元的冲突,譬如除法器需要多个时钟周期才能完成运算。因此在前一个除法指令完成运算之前,新的指令如果也需要除法器,则会存在资源冲突。
解决办法可以通过 复制硬件资源 或者 流水线停顿等待硬件资源 的方法解决。

数据冲突:

数据冲突是指 不同的指令之间的操作数存在着数据相关性造成的冲突。

  • WAR(Write-After-Read)相关性,又称先读后写相关性:表示“后序执行的指令需要写回的结果寄存器索引”与“前序执行的指令需要读取的源操作数寄存器索引”相同造成的数据相关性。理论上:“后续指令”一定不能比和它有WAR相关性的“前序指令”先执行,否则,先写后读就会读到错误的值。
  • WAW(Write-After-Write)两次写操作顺序相反会导致前面的将后面的覆盖。
  • RAW(Read-After-Write)顺序相反会导致读取到错误的值。
    解决方法:
    (1)WAW和WAR可以通过寄存器重命名的方法将相关性去除。
    (2)RAW一定要使用和它有RAW数据相关性的前序指令执行完成的结果,从而造成流水线的等待停顿。为了减少等待停顿造成的损失,可以使用“动态调度”的方法。

蜂鸟E200(3)乱序、反压、流水线冲突相关推荐

  1. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (11) - 乱序引擎/重命名器调度器

    Renamer 从上图中可以看出,重命名器是连接"有序前端"与"调度器的数据流世界(即乱序引擎)"的桥梁.它每周期可以最多从微指令队列搬移4条微指令到乱序引擎. ...

  2. 数字IC手撕代码-流水握手(利用握手解决流水线断流、反压问题)

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  3. php 数组 打乱顺序,PHP数组随机乱序和反序的实例详解

    PHP数组随机乱序和反序 在前两篇文章<如何对PHP数组进行排序>和<PHP数组的倒序>中介绍了两组函数,一组升序,一组倒序(降序),今天我们这篇文章跟大家介绍数组的随机乱序和 ...

  4. 蜂鸟E200(2) 流水线介绍

    处理器流水线概述 计算机体系中最多的经典MIPS五级流水线,如下图所示 取指 指令取指(Instruction Fetch)是指将指令从存储器中读取出来 译码 指令译码(Instruction Dec ...

  5. Intel Haswell/Broadwell架构/微架构/流水线 (3)-流水线乱序引擎

    The Out-of-Order Engine 乱序引擎的关键部件与重大增强概述如下: 重命名器(Renamer):重命名器将微指令从微指令队列中移到调度器中,同时绑定对应的发射口与执行资源.Zero ...

  6. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (10) - 乱序引擎概述

    The Out-of-Order Engine 乱序引擎相较于前代微架构提供了更好的性能,同时也具有极佳的电力特征(excellent power chacteristics,即更好的能效).乱序引擎 ...

  7. Pentium M处理器架构/微架构/流水线 (2) - 数据预取/乱序核/退役单元

    Data Prefetching Intel Pentium M处理器支持3种预取机制: 第一种是硬件指令预取,已在上面章节中讲述 第二种是自动的将数据预取到二级缓存.这个机制基本上与Intel Ne ...

  8. Axi:名词解释、乱序、间插、卷绕、窄带访问、非对齐访问、OST

    信号说明: AWBURST.ARBURST: 指示burst type,有3种burst类型. Fixed:固定地址模式,每次burst传输首地址固定,用于访问FIFO INC:递增递增模式,每次传输 ...

  9. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

  10. 谁说国内无RISC-V开源核——您还不知蜂鸟E200?

    目录 1 开源RISC-V挑花眼了? 2 谁说国内没有RISC-V开源核? 3 想要专业水准的开源核? 4 担心性能指标不行? 5 抱怨没有配套SoC? 6 要是可配置就好了? 7 会不会没有文档介绍 ...

最新文章

  1. golang函数——可以为类型(包括内置数据类型)定义函数,类似类方法,同时支持多返回值...
  2. 1.6.2java工业星系_我的世界1.6.4
  3. html multiply属性,NonCommutativeMultiply
  4. git 怎么备份本地分支_Git常用个人备份笔记
  5. 经典C语言程序100例之二零
  6. php调用root权限,PHP执行root权限程序
  7. 1-1Pytorch导学
  8. Objective-C 【从文件中读写字符串(直接读写/通过NSURL读写)】
  9. 零基础学python知乎-零基础人员可以学习python吗?|Python培训基础教程
  10. jQuery中的阻止默认行为
  11. Java菜鸟学习笔记--面向对象篇(十八):对象转型多态
  12. c语言自学方式,c语言学习方法
  13. 在这个520特别的日子里,分享几个用的上的Python代码
  14. cad道路里程桩号标注_怎么用CAD标注道路桩号?
  15. 校园网破解|校园网wifi破解|校园网免认证教程-SaoPanel
  16. L298N电机驱动模块的接线使用与代码实现
  17. Vue高德地图Loca 2.0飞线功能初体验
  18. 机器学习的五大分类,监督学习 无监督学习 半监督学习 迁移学习 增强学习
  19. 关于将微博上视频保存在电脑本地的方法汇总
  20. EM4100 低频125Khz ID卡

热门文章

  1. PP实施经验分享(11)——SAP订单信息系统COOIS应用*增强版*
  2. android des 加密
  3. 大功率高精度恒流源的设计
  4. V831——二维码识别
  5. python矩阵教程_Python Numpy Tutorial / Python Numpy 教程 (矩阵和图像操作)
  6. python print用法举例,Python2和Python3中print的用法示例总结
  7. python实现语音信号的分帧、加窗、预处理
  8. PR视频去水印—中间值
  9. 云呐|常用的固定资产盘点方法有哪些
  10. 帝国站长php主动推送,帝国CMS 链接主动推送插件设置帮助