动态调度:

通过硬件在程序执行时重新安排代码的执行序列来减少竞争引起的流水线停顿时间

动态调度流水线具备以下功能:

(1)允许按序取多条指令和发射多条指令----取指(IF)流水级允许按顺序取多条指令进入单口暂存器(single-entry latch)或队列(queue), 指令然后从latch或queue取出,进入ID节拍。

(2)能检查并消除hazards----将ID流水级分为独立的两级:Issue级和Read operand级:

Issue级功能

----指令译码,检查是否存在结构竞争(即在这一流水级解决结构竞争问题);

Read operands级功能

----等到无数据竞争(RAW)后,读出操作数,即在这一流水级解决数据竞争问题

记分牌算法具体设计:

动态调度技术需要将ID译码段分成两个阶段:1是发射,2是读取操作数。发射阶段对指令进行译码,检查结构冒险(例如有四个运算器:整数运算、加法器、乘法器、除法器,检查该指令需要使用的运算器是否正在被占用)读取操作数阶段检查数据冒险(读之前检查寄存器的值是否已经写回,或者是否会覆盖了之前的值)。数据冒险的解决方法(读写冒险(RAW):将指令和操作数保存起来,然后只能在读操作数阶段进行读取;写写冒险(WAW):检测是否有其它指令会写回到相同的寄存器(检测到冒险),有则等待,直到其它的完成)

发射阶段:假如检测到没有结构冒险和数据冒险,那么记分板将会将指令发射到相关的运算器,假如结构冒险或者写写冒险发生了,那么该指令将会等待,直到冒险消失为止。

读取操作数:没有数据相关了以后(之前的指令不会写回源寄存器或者正在写寄存器的情况时,读写冒险),读取操作数。读取操作数后将交给运算器,之后开始运算。发送到运算器的顺序可能是乱序的。

之后就是执行段以及写回段了。没啥好说的。执行段在完成计算以后会通知记分板。记分板直到计算已经完成了,那么它进行读写冒险检验(即写之前是否已经读取了寄存器的值,例如 ADD F10,F0,F8 SUB F8,F8,F14,这里SUB指令写回时要检查ADD指令的F8是否已经读取了,仅此而已)假如检测到冒险,则等待,不然就可以写寄存器了。

记分板由三个部分组成

part1 指令状态:记录指令究竟处于4个阶段中的哪一个阶段

part2 运算器单元FU状态:有9个域,分别是:

a) Busy 标识该器件是否正被使用

b) OP 该器件正在执行的运算 例如 + - * / 等等

c) FI 目标寄存器

d) Fj, Fk, 源操作寄存器

e) Qj Qk functional units producing source registers FJ FK (源操作寄存器正在被什么单元所处理)

f) Rj, Rk 表示Fj Fk 是否准备好的标志位

part3 寄存器结果状态:标识哪一个存储器将会被写回。

以下是记分板流水线的控制流程

Tomasulo算法

由于记分牌算法只能检测竞争(WAR,WAW)并不能消除这两种竞争,所以将记分牌算法改进为Tomasulo算法。

Tomasulo算法的基本思想:

Tomasulo算法采用寄存器重命名(Renaming)方法,将记分牌中的寄存器用一大组虚拟寄存器名来代替,即用虚拟寄存器集来代替真是的FP寄存器组,由于虚拟寄存器集合所含有的寄存器数目远大于真是的寄存器组,所以可以用虚拟寄存器集来实现寄存器重命名。

虚拟寄存器组由三部分组成:

1.每个功能单元(FU)都带有的保留站(Reservation station)

2.取数缓冲区(Load buffers)----保存被访问的存储单元的数据和地址

3.存数缓冲区(Store buffers)

另外,如图所示:

浮点寄存器(FP)通过一对总线与每一个功能单元(FU)相连接,这一对总线分别对应两个操作数,并通过一条总线与存数缓冲区(Load buffer)相连接。

功能单元(FU)的输出和存数缓冲区(Load Buffer)的输出汇总在CDB与浮点寄存器(FP)的输入相连接。

公共数据总线(Common data bus)CDB:CDB与FP,Reservation station,store buffer等输入相连接,唯一无连接关系的是Load Buffer的输入。

由于保留站和Buffer都有对应的标识符,所以这里实现了重命名。

Tomasulo每一级流水功能

1.发射级(Issue)

若是一条FP操作指令,如果保留站有空,则将其送至保留站,如果该指令的操作数已在FP寄存器,将操作数的值送往保留站。

若是一条Load或者Store指令,如果Buffer有空,将其送往相应的Buffer

如果保留站或者Buffer没有空,则存在结构竞争,停顿该指令,知道对应的保留站或者Buffer有空为止。

这一级完成了重命名,因为在保留站中的操作数不在使用寄存器号。

2.执行级(Execute)

若有一个或几个操作数未就绪,等待该操作数,并同时监控CDB。一旦操作数就绪,立即存入相应的保留站,若两个操作数均已就绪,则执行该操作,此级检查了是否存在RAW竞争。

3.写回级(Write Back)

当结果计算出来之后,将其写入CDB,并从CDB写入目的寄存器以及等待此结果的保留站,当连续写同一寄存器时,只有最后一次才能写入,消除了WAW竞争。

流水级的形式化描述:

Tomasulo法和记分牌法的异同

相同之处:

两者消除RAW竞争的思想相同。Tomasulo方法采用了记分牌方法的动态调度的核心思想,多条指令处于发射状态,等待条件成熟,可以不按顺序执行,不按顺序完成的思想,即为动态调度来消除RAW竞争。

不同之处:

Tomasulo方法通过寄存器换名过程可以消除WAR和WAW竞争。

记分牌方法能检测WAR和WAW竞争,一旦检测到存在WAR和WAW竞争,通过插入停顿周期来解决这一竞争。所以,记分牌方法不能消除WAR和WAW竞争。

硬件组织上有两点不同:

1.检测竞争和控制指令执行方式的不同:

Tomasulo方法检测竞争和控制指令执行两方面功能是通过分布在每一功能单元的保留站来进行的,因此Tomasulo方法是一种分布式方法。

记分牌方法的上述功能是通过统一的记分牌来实现的,因此记分牌方法是一种集中式方法。

2.写结果的方法不同:

Tomasulo方法通过CDB直接将功能单元输出的结果送往需要该结果的所有保留站,而不必经过寄存器这一中间环节。

记分牌方法是将结果写入FP寄存器, 因而可能造成等待这一结果的指令都出现停顿现象,之后,所有相关指令的功能单元在读FP 寄存器时又可能出现竞争现象。

Tomasulo方法的流水级功能与记分牌比较:

Tomasulo方法中无检查WAW和WAR竞争功能,因为在指令发射过程中,由issue logic结合保留站完成了register operands的改名过程,即消除了这两种竞争。

CDB起到广播结果的作用,不必通过register file直接结果送到所有需要该结果的保留站和buffers.

Load和Store buffers相当于基本功能单元

记分牌调度算法实现java_动态调度算法:记分牌算法和tomasulo算法相关推荐

  1. 【体系结构】动态调度算法:记分牌算法和tomasulo算法

    记分牌和tomasulo算法 动态调度: 通过硬件在程序执行时重新安排代码的执行序列来减少竞争引起的流水线停顿时间 动态调度流水线具备以下功能: (1)允许按序取多条指令和发射多条指令----取指(I ...

  2. lru调度算法例题_FIFO调度算法和LRU算法

    微信公众号关注我,更多计算机知识告诉你! 一.理论 FIFO:先进先出调度算法 LRU:最近最久未使用调度算法 两者都是缓存调度算法,经常用作内存的页面置换算法. 打一个比方,帮助你理解.你有很多的书 ...

  3. 操作系统之FIFO算法和LRU算法

    首先在做题前,我们要简单理解FIFO算法和LRU算法的本质意思,英文全拼一般在教材上基本都会有,这里简述为FIFO算法即为先进先出算法,计算表格多以从下往上写的顺序来看,LRU算法大致为近期最少未使用 ...

  4. 数据结构与算法之美笔记——基础篇(下):图、字符串匹配算法(BF 算法和 RK 算法、BM 算法和 KMP 算法 、Trie 树和 AC 自动机)

    图 如何存储微博.微信等社交网络中的好友关系?图.实际上,涉及图的算法有很多,也非常复杂,比如图的搜索.最短路径.最小生成树.二分图等等.我们今天聚焦在图存储这一方面,后面会分好几节来依次讲解图相关的 ...

  5. A算法和A*算法详解

    字太多了 直接放笔记的图片吧,如有不对请指正 A算法和A*算法都适用 1.用初始节点初始化搜索图G (动态变化),将初始节点放入open表(还没有扩展的节点)中,然后初试closed(已经扩展完成的节 ...

  6. 算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法

    一.名称 动态规划法应用 二.目的 1.掌握动态规划法的基本思想: 2.学会运用动态规划法解决实际设计应用中碰到的问题. 三.要求 1.基于动态规划法思想解决背包问题(递归或自底向上的实现均可): 2 ...

  7. BF算法和KMP算法

    给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配(string matching,也称模式匹配),T称为模式.这里将介绍处理串匹配问题的两种算法,BF算法和KMP算法. BF算法 (暴力匹配 ...

  8. Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)

    Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...

  9. 操作系统之存储管理——FIFO算法和LRU算法

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  10. 若S作主串,P作模式串,试分别写出利用BF算法和KMP算法的匹配过程。

    目   录 题目: 百度文库-答案: (1) (2) MOOC标准答案: (1) (2) mooc答案-截图: 数据结构(C语言版)-严蔚敏2007 题目: 设字符串S='aabaabaabaac', ...

最新文章

  1. Tensorflow中的mnist例子
  2. Java集合框架List,Map,Set等全面介绍
  3. 头条抖音后端技术3面,centos卸载软件
  4. 【JavaScript DOM 编程艺术】 笔记
  5. MyBatis常用配置解析-mapper标签
  6. 计算机二级web题目(8.2)--基本操作题2
  7. 去重除了indexOf的其他方法(使用对象Key的方法)及统计重复次数
  8. 《现代汉语常用字表》(包括常用字和次常用字共3500个)
  9. idea搭建springcloud项目_Eureka搭建分布式SpringCloud项目
  10. PHP网站发短信到手机
  11. 计算机网络(二)---物理层与数据链路层
  12. JS游戏——flappy bird
  13. sharding-jdbc(ShardingSphere )、mycat、DRDS 三个分布式数据库中间件的简单介绍(纯理论说明)
  14. 计算机网络毕业论文ensp,eNSP实验(一)简单组网实验
  15. 用友计算机审计实验步骤,计算机审计上机实验报告模板详解.doc
  16. 解决Office 2010打开文件提示“文件已损坏,无法打开。”的问题
  17. windows 7 RDP 增强
  18. 用Python实现冰雹猜想(3n+1猜想,角谷猜想,叙古拉猜想)的黑洞演示
  19. MC51F003A4——ADC
  20. 银河麒麟怎么卸载软件_长虹R8麒麟 怎么卸载系统应用?

热门文章

  1. java游戏征途2008_醉剑逍遥-征途天下
  2. 九阳神功,扎马练起!类、对象、实例、实例化的理解!
  3. 关于openpyxl读取excel中图片(shape)的注意点
  4. C#中问号“?”的用法
  5. stm32项目实战ST7735环境质量检测仪
  6. piaget读法_这些手表品牌原来是这么念的!
  7. strut2 上传文件
  8. 关键对话:如何高效能沟通(第二章)
  9. congestion_controller、 remote bitrate estimator、pacing模块浅析
  10. 金庸群侠转2完整攻略(Flash)