体系结构笔记------动态调度中的记分板算法

  • 动态调度
  • 流水线划分
    • 相关冲突
      • 结构冲突
      • 数据冲突
    • 记分板控制
      • 流出
      • 读数
      • 执行
      • 写回
  • 具体算法
    • 大致流程
    • 局限

动态调度

在程序执行的过程中,由硬件来对代码进行调度来减少由于相关导致的停顿。
对于基本的流水线而言,一旦一条指令受阻,其之后的所有指令都会因此停顿,为了提高流水线的性能我们需要使其可以进行乱序执行。

流水线划分

对于原先的五段流水线,即取指周期(IF)、译码与读数周期(ID)、计算与执行周期(EX)、访存与分支跳转(MEM)、写回周期(WB)。我们将译码与读数周期分为两个阶段,也就是流出阶段与读操作书阶段。
流出阶段:指令译码,检查是否存在结
构冲突。
读操作数等待数据冲突消失,然后读操作数。

相关冲突

结构冲突

对于多条指令同时对于同一硬件资源提出请求时产生的冲突为结构冲突,主要是由于有限的硬件资源所导致的。

数据冲突

RAW:当前指令需要使用前面指令的结果,所以需要前面指令先写入结果之后当前的指令再读,主要由于真数据相关导致。
WAR:指令间读操作在前,写操作在后,这是为保证读到的数据为未被修改的数据,所以必须保证先读后写,对指令的执行顺序有严格要求。
WAW:指令间写操作的顺序,如果两条指令同时有写数据的操作并且其操作的目标对象为同相同的寄存器或者内存单元,则也要保证其运行的先后顺序,保证最终写入的数据是最后执行的指令的。

这里注意一点就是对于读操作数这个阶段,记分板算法处理的方式是等待冲突消失而不是处理冲突。

记分板控制

记分板控制分为四级:流出、读数、执行、写回。(注意不同阶段消耗的时钟周期数不同!)

流出

这一阶段进行指令译码,检查是否含有结构冲突,也就是检查当前的指令要使用的硬件的使用状况,之后是检查数据冒险,如果不存在其他运行的指令与当前指令有相同的目的寄存器(WAW)就将指令流出(相应的功能单元更新其内部数据),如果存在结构冲突或者数据冒险就停顿等待冲突消失。(并没有实际解决冲突)

读数

如果之前运行的指令没有要写入源操作数,或者当前运行的功能单元没有准备写入包含操作数的寄存器时,则源操作数可用。当操作数可用时进行数据读入,并准备运行。(动态的解决RAW)这样指令可以不按执行顺序的进入执行阶段。

执行

执行运算,完成后进入写回阶段。

写回

在写回阶段,会先进行WAR冲突的检查,如果存在先读后写就进行停顿等到读结束之后写回。(还是等待的方式处理)

具体算法

记分板中记录着程序运行时的状况,主要可以三个表来描述。
指令的运行过程:也就是上面的四个步骤。

功能部件的状态:由以下字段描述
Busy:用于描述功能部件硬件资源的占用情况
Op:说明运行时所用的是哪一个功能部件
Fi:目标寄存器
Fj, Fk:源操作数或寄存器
Qj, Qk:是否有某个功能单元占用源寄存器Fj或Fk。
Rj, Rk:用于标识源寄存器是否准备好。

寄存器的写入状态:如果有某个功能部件最终将结果写入该寄存器就将该寄存器标注上这个功能部件,如果没有就是空白。

大致流程

首先是取指令然后到ID段,分为译码与读数两个部分,先检查结构冒险(检查该指令需要使用的运算器是否正在被占用,通过相应功能部件的Busy段可得),有就等待没有就进行操作数的检查也就是数据冒险的检查(检查目的寄存器是否被功能单元占用等待写入,通过寄存器的写入状态FU表对应)。若无数据冲突则指令流出至读取操作数段。这里解决了相关的WAW冲突与结构冲突。流出指令后对于对应的FU表中就应有相应的标识了。
读取操作数阶段会通过上面的Qj,Qk段与Rj,Rk字段来判断是否有功能单元对源寄存器有写入操作,防止RAW发生,如果有的话就会等待相关的冲突结束,也就是相关的功能部件将结果写入后再读操作数。读取后就交由运算器处理。这样对于运算器而言有些先流出的指令会因为操作数的读取而后执行,实现了指令的乱序执行
指令的执行就没啥可说的了,不同的指令执行周期不同,等到指令执行结束通知版准备写回。
在写回段主要检查是否含有(WAR),如果有就等待相应的指令读数结束在进行写回操作,将结果写入寄存器中。

在图中ADD完成了运行,但是Div中的F6却就绪了,由于F0的RAW并未读入操作数,这时ADD
的结果也不能写入,必须等到相应的读操作结束才能写入。

局限

对于冒险的处理大多以等待来解决,效率低。
存在结构冒险,就暂停发射指令;
无法消除 WAR 和 WAW 两种相关,仅通过暂停来处理。
并行性的使用仅在处理RAW 相关时使用来乱序执行减少停顿周期。

体系结构笔记------动态调度中的记分板算法相关推荐

  1. Java学习笔记--Java中必记常见异常

    JAVA常见异常 Java.io.NullPointerException null 空的,不存在的 NullPointer 空指针 空指针异常,该异常出现在我们操作某个对象的属性或方法时,如果该对象 ...

  2. sv验证中记分板的作用_将记分员添加到您的Python游戏中

    sv验证中记分板的作用 这是有关使用Pygame模块在Python 3中创建视频游戏的系列文章的第10部分. 以前的文章是: 通过构建一个简单的骰子游戏,学习如何用Python编程 使用Pygame模 ...

  3. 用java编写一个记分_如何在Android for Java中创建带有textview,2个变量和一个按钮的记分板...

    我知道这是一个简单的问题,但我不会去学习java,只是在线学习. 如何使用初始值为0的textview,然后每按一次按钮,它就会将25分指向记分板. 起初我希望button按下在42-57之间添加一个 ...

  4. 【学习笔记】记分板结构

    记分板的结构 记分牌中有三个表(分为两部分,R和F),如图所示: 记录寄存器结果状态 此表保存哪个FU将在每个寄存器中产生结果(如果有).该表由R表示.R中的条目 数等于寄存器数m.如果Regr是寄存 ...

  5. 基于VC++的记分板调度方法仿真

    资源下载地址:https://download.csdn.net/download/sheziqiong/85640394 1. 实验名称 记分板调度方法仿真 2. 实验报告作者 3. 实验内容 3. ...

  6. 一文看懂自动驾驶中应用的机器学习算法

    本文来自AI新媒体量子位(QbitAI) 机器学习算法已经被广泛应用于自动驾驶各种解决方案,电控单元中的传感器数据处理大大提高了机器学习的利用率,也有一些潜在的应用,比如利用不同外部和内部的传感器的数 ...

  7. 机器学习(二十二)——推荐算法中的常用排序算法, Tri-training

    推荐算法中的常用排序算法 Pointwise方法 Pranking (NIPS 2002), OAP-BPM (EMCL 2003), Ranking with Large Margin Princi ...

  8. 我的世界java版记分板_我的世界计分板教程 计分板指令详解

    我的世界计分板教程 计分板指令详解.啊下面就给大家详细的介绍一下我的世界中的计分板吧!计分板的指令主要是objectives.players.teams.那下面就将这三个指令教程详细的分享一下吧!希望 ...

  9. 数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF

    数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF 一.概述 参考:特征点匹配+特征检测方法汇总 ORB的全称是Oriented ...

最新文章

  1. 微软和谷歌分别开源分布式深度学习框架,各自厉害在哪?
  2. 将图片缩放成指定尺寸
  3. Redis 基数统计:HyperLogLog 小内存大用处
  4. sublime python运行快捷键_SublimeREPL执行Python快捷键
  5. windows 环境 docker踩坑
  6. Asianux Server 3.0安装截图
  7. HDU 1042 N!
  8. 火狐插件youdao word capturer无法删除。
  9. Java io字符流读入英文_Java IO 系列教程(四)-字符输入流(2)
  10. 领域驱动DDD原理简介与实践
  11. java enum枚举类型的使用
  12. PipedInputStream/PipedOutputStream
  13. utilities(C/C++)(二)
  14. json 例子_json-简单的例子
  15. linux连接苹果鼠标,Linux 5.13添加对苹果Magic Mouse 2和微软SAM的支持
  16. 基于JavaWeb网上商城(以卖书为主)
  17. mac mini u盘安装系统_系统安装丨如何制作U盘启动盘?
  18. ocr识别身份证护照阅读器
  19. [线段树][数学]JZOJ 4237 Melancholy
  20. javascript caller

热门文章

  1. c语言程序中文复制到word变乱码,Visual Studio 2010 复制代码到word时出现中文乱码的解决办法...
  2. Java 前后端分离业务封装 对后端返回值进行封装 PageVO封装
  3. 【Verilog】10.10练习题——Verilog语法知识点补充 和 一些注意点
  4. 项目实战 | 利用seurat包标记感兴趣的细胞群(再次分析)
  5. 云服务器网无响应,服务器之家教你dns服务器未响应导致无法上网怎么办
  6. History.pushState(),动态添加历史记录.页面离开如何保存状态?
  7. 正则十八式-第二式:控鹤擒龙
  8. 【第二弹】没有一个程序员,可以拒绝这三个摸鱼神器
  9. ubuntu系统下安装GTX1660ti的Nvidia驱动
  10. 具体数学 递归问题1.1 从河内塔/汉诺塔开始