计算机体系结构----计分板(scoreboard)算法

news2025/1/12 10:47:41

计分板算法简介

计分板记录着所有必要的信息,用来控制以下事情:

  1. 每条指令何时可以读取操作数并投入运行(对应着RAW冲突的检测)
  2. 每条指令何时可以写入结果(对应着WAR冲突的检测)
  3. 在计分板中,WAW冲突是在issue阶段检测的,因此仍会导致整个流水线的停顿(另一篇博文提到的Tomasulo算法提供了一种更优美的解决方案)

需要强调的是,计分板算法和普通的流水线是不一样的,一般我们讨论的普通的五级流水线只有一个ALU,所以当一条指令在使用ALU时,其它指令是没法进入EXE阶段的,但是计分板算法不一样,它有多个功能部件,如果指令使用的是不同的功能部件,是能同时进入EXE阶段的。同理,计分板算法对寄存器堆的读取也是可以多条指令同时进行的,但是普通流水线是只有一条指令能访问,普通流水线和计分板算法一样的是一个cycle最多发射一条指令。下面的计分板示例流程会说明计分板算法的特点

动态调度核心思想回顾

  1. 允许就绪指令越过前面的停顿指令,率先投入运行,即乱序执行
  2. 为了支持乱序执行,需要对ID阶段进行改造,因为就绪指令就是在ID阶段被阻塞的
  3. 为了改造ID,需要分析ID阶段的约束条件和存在的问题:
  • 约束条件:ID阶段必须按序执行,因为,如果前一条指令还未译码,后续的指令就无法进行冲突检测
  • 存在的问题:在一个必须按序执行的阶段,执行了过多的检测,导致停顿增加
  1. 解决方案:将ID阶段拆分为两个阶段:
  • Issue:对应之前的ID阶段,但精简操作,只做最必要的事:如指令译码、资源冲突检测
    这一阶段仍是按序执行的,并且,在这一阶段停顿的指令,同样会阻塞后面的所有指令比如下面例子中因为资源冲突而未能发射的第二个LD阻塞了后面所有的指令
    – 但这一阶段不再检测所有数据冲突,因此不管就绪还是非就绪的指令,都有机会发射出去
  • Read operands:等待数据冲突消除,然后读取操作数
    – 这一阶段检测数据冲突,也是乱序执行实际发生的位置:非就绪指令会停顿在这一阶段,就绪指令会直接投入运行
  1. 不管是什么样的动态调度流水线,都要将ID做这样的拆分,差别主要是如何管理已发射、未就绪的指令:计分板算法使用计分板,Tomasulo算法使用保留站

每条指令的执行阶段

在这里插入图片描述
Issue阶段通过停顿整个流水线所有级解决WAW冲突。
Read operands通过监控源操作数是否可获得(available)来判定这个指令是否能执行以解决RAW冲突,这只会造成单条指令的停顿,流水线还是能继续
Write result阶段如果有数据需要写回,计分板会先判断是否有先前的指令在读这个数据且还没读完,通过引入停顿的方式解决WAR冲突,这只会造成单条指令的停顿,流水线还是能继续

计分板算法标记简介

在这里插入图片描述

计分板算法运行示例

在这里插入图片描述

在这里插入图片描述
注意cycle1阶段,发射的时候就已经知道源和目标操作数以及源和目标操作数是否准备好,并不需要等到Read operands阶段。
在这里插入图片描述
Cycle2时,因为Read oprands操作,读取完操作数后把Rj从Yes变成No,使得其他指令没法对R2进行写,这样可以避免WAR冲突。同时由于Interger部件被占用,第二条指令及后面的流水线全部停顿直至第一条指令执行完毕。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
注意:cycle5阶段,虽然第一个条指令已经过了excution阶段到了write result阶段,但是第二条load指令并不会发射,只能在下一个周期发射。且注意write result阶段会把计分板中和这条指令相关的所有功能部件状态及寄存器状态清空

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:cycle11是可以一次读取两个oprands的,MUL和SUB指令同时在这个时钟周期读取了操作数
在这里插入图片描述
注意:cycle12、cycle13中不同的指令可以利用不同的功能部件同时执行,MUL和SUB指令同时在这两个时钟周期处理了操作数
在这里插入图片描述
注意,cycle14阶段,最后一条ADD指令只会在SUB写回的下一个周期才开始发射
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:cycle23阶段,DIV读完操作数ADD就可以写回了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

计分板算法性能分析

  1. 计分板算法没有处理控制冲突,乱序执行仅局限在一个基本块内
  2. 没有消除WAR/WAW冲突,这些冲突仍会导致停顿
  • 上述例子中的ADD.D的写回操作就被DIV.D给阻塞而停顿了。这属于WAR冲突
  • WAW冲突在上述例子中没有显示出来,但是很显然计分板算法没解决这个问题,只能通过停顿解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1373135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css三大特性

css 三大特性 一、层叠性:css样式冲突采取原则(后者覆盖前者) 二、继承性:对于部分属性样式会有天生的继承 (1)字体系列属性 font-family:字体系列 font-weight:字体的粗细 fon…

TS 36.306 V12.0.0

​本文的内容主要涉及TS 36.306,版本是C00,也就是V12.0.0。

鸿蒙Harmony--状态管理器--双向同步@Link详解

你这一生最重要的责任,就是保护好自己脆弱的梦想,熬过被忽略的日子,就轮到你上场了。 如何解决大模型的「幻觉」问题? 目录 一,定义 二,装饰器使用规则说明 三,变量的传递/访问规则说明 四&…

web第一次作业

题1&#xff1a; <form action"#" method"post"><table><tr><td>用户名&#xff1a;</td><td><input type"text" name"UserName" maxlength"20" size"15"></td>…

Windows启动MongoDB服务报错(错误 1053:服务没有及时响应启动或控制请求)

问题描述&#xff1a;修改MongoDB服务bin目录下的mongod.cfg&#xff0c;然后在任务管理器找到MongoDB服务-->右键-->点击【开始】&#xff0c;启动失败无提示&#xff1a; 右键点击任务管理器的MongoDB服务-->点击【打开服务】&#xff0c;跳转到服务页面-->找到M…

C# 使用Fleck创建WebSocket服务器

目录 写在前面 代码实现 服务端代码 客户端代码 调用示例 写在前面 Fleck 是 C# 实现的 WebSocket 服务器&#xff0c;通过 WebSocket API&#xff0c;浏览器和服务器只需要做一个握手的动作&#xff0c;然后浏览器和服务器之间就形成了一条快速通道&#xff1b;两者之间…

机器学习周刊第二期:300个机器学习应用案例集

大家好 前文&#xff1a;机器学习项目精选 第一期 继续分享我最近看过并觉得非常硬核的资源&#xff0c;包括Python、机器学习、深度学习、大模型等等。 1、Python编程挑战 地址&#xff1a;https://github.com/Asabeneh/30-Days-Of-Python 30天Python编程挑战是一个逐步学…

漫画演绎策略设计模式

引言 本篇主要通过一小篇漫画的形式给大家讲讲策略模式&#xff0c;由于策略模式本身不是很难&#xff0c;这里就不花太多的言辞描述了&#xff0c;一起看漫画吧 普通设计 从前有一个妈妈&#xff0c;她有一个叛逆的儿子&#xff0c;妈妈每天除了上下班就是要教育儿子&#…

【前端】使用javascript开发一个在线RGB颜色转换

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是是《前端》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌…

海量数据处理数据结构之Hash与布隆过滤器

前言 随着网络和大数据时代的到来&#xff0c;我们如何从海量的数据中找到我们需要的数据就成为计算机技术中不可获取的一门技术&#xff0c;特别是近年来抖音&#xff0c;快手等热门短视频的兴起&#xff0c;我们如何设计算法来从大量的视频中获取当前最热门的视频信息呢&…

P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布————C++

目录 [NOIP2014 提高组] 生活大爆炸版石头剪刀布题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code调用函数的Code&#xff08;看起来简洁一点&#xff09;运行结果 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 …

12.22 探探 数分 已HR面

岗位信息 1222 3.30PM 1面 40min 能感觉数据基建还不是很完善 因此 问了一些指标体系的问题还挺多 自我介绍能力考察1.说说你是怎么异常归因的以付费场景项目为例2.归因中如果遇到一个页面同时存在有3个实验在跑 无法归因出数据的异常是哪个改动造成的怎么办&#xff1f;3.讲…

服务器配置SSL证书到nginx基于Fdfs存储服务器或者直接阿里云绑定SSL

1.如果用FDFS存储服务器内置nginx设置SSL证书 1.验证当前nginx是否存在 http_ssl_modulehttp_ssl_module模块 如果存在直接配置就行 server {listen 80 default backlog2048;listen 443 ssl; server_name 域名; ssl_certificate /usr/local/nginx_fdfs/ssl/xxxx.top.crt; ssl…

Linux---gcc编译

目录 前言 一、gcc编译 二、程序的编译过程 三、gcc查看编译过程 1.预处理阶段 2.编译 3.汇编 4.链接 动静态库链接的内容 动静态库链接的优缺点 5.总结记忆 前言 在前面我们学会使用vim对文件进行编辑&#xff0c;如果是C或者C程序&#xff0c;我们编辑好了内容…

嵌入式-Stm32-江科大基于寄存器点亮LED灯

文章目录 前言&#xff1a;一&#xff1a;搭建基于寄存器控制LED的工程二&#xff1a;用江科大的STM32板子实现基于寄存器点亮LED灯三&#xff1a;用非江科大stm32板子实现基于寄存器点亮LED灯道友&#xff1a;一星陨落&#xff0c;黯淡不了星空灿烂&#xff1b;一花凋零&#…

脚本编程游戏引擎会遇到哪些问题

在游戏开发中&#xff0c;脚本编程已经成为了一种非常常见的方式&#xff0c;用来实现游戏逻辑和功能。但是脚本编程游戏引擎也可能会面临一些挑战和问题。下面简单的探讨一下都会遇到哪些问题&#xff0c;并且该如果做。 性能问题 脚本语言通常需要运行时解释执行&#xff0…

3.4 在开发中使用设计模式

现在&#xff0c;我们应该对设计模式的本质以及它们的组织方式有了初步的认识&#xff0c;并且能够理解ROPES过程在整体设计中的作用。通过之前章节对“体系结构”及其五个视图的探讨&#xff0c;我们打下了坚实的基础。初步了解了UML的基本构建模块后&#xff0c;我们现在可以…

计算机二级WPS Office考试须知、如何备考、备考建议

本文从计算机二级考试须知、如何备考、备考建议以及考试的注意事项等方面进行讲述&#xff0c;认认真真看&#xff0c;对你受益匪浅。 一、计算机二级考试须知 2021年3月27日至29日将举办第60次全国计算机等级考试&#xff08;NCRE&#xff09;&#xff0c;从今年起&#xff0…

python json模块

json是JavaScript对象表示法的缩写&#xff0c;是一种轻量级的数据交换格式&#xff0c;经常被用于Web应用程序中。python中的json库是用于解析和生成json数据格式的库。 import jsondata {"name": "张三","age": 18,"hobbies": [&q…

Gitlab-ci:从零开始的前端自动化部署

一.概念介绍 1.1 gitlab-ci && 自动化部署工具的运行机制 以gitlab-ci为例&#xff1a; (1) 通过在项目根目录下配置.gitlab-ci.yml文件&#xff0c;可以控制ci流程的不同阶段&#xff0c;例如install/检查/编译/部署服务器。gitlab平台会扫描.gitlab-ci.yml文件&…