【体系结构系列】相关与冲突
相关与冲突
相关
概念
- 相关
- 两条指令之间存在某种依赖关系。
- 如果两条指令相关,则它们就有可能不能在流水线中重叠执行或者只能部分重叠执行
- 三类相关
- 数据相关(也称真数据相关)
- 名相关
- 控制相关
数据相关
对于两条指令i(在前,下同)和j(在后,下同),如果下述条件之一成立,则称指令j与指令i数据相关。
- 指令j使用指令i产生的结果;
- 指令j与指令k数据相关,而指令k又与指令i数据相关。
数据相关特点
- 数据相关具有传递性。
- 数据相关反映了数据的流动关系,即如何从其产生者流动到其消费者。
数据相关实例
数据相关检测
- 当数据的流动是经过寄存器时,相关的检测比较直观和容易。
- 当数据的流动是经过存储器时,检测比较复杂。
- 相同形式的地址其有效地址未必相同;
- 形式不同的地址其有效地址却可能相同
名相关(实际就是第二条指令是写)
名
- 指令所访问的寄存器或存储器单元的名称
- 例如,R4,0x10000000等
名相关
- 如果两条指令使用相同的名,但是它们之间并没有数据流动,则称这两条指令存在名相关
细分
- 反相关
- 如果指令j写的名与指令i读的名相同,则称指令i和j发生了反相关。
- 指令j 写的名=指令i 读的名
- 输出相关
- 如果指令j和指令i写相同的名,则称指令i和j发生了输出相关
- 指令j写的名=指令i写的名
- 反相关
解决方案
名相关特点
- 名相关的两条指令之间并没有数据的传送。
- 如果一条指令中的名改变了,并不影响另外一条指令的执行。
- 消除名相关的方法:换名技术
- 换名技术:通过改变指令中操作数的名来消除名相关。
- 对于寄存器操作数进行换名称为寄存器换名:既可以用编译器静态实现,也可以用硬件动态完成。
控制相关
- 控制相关是指由分支指令引起的相关。
- 为了保证程序应有的执行顺序,必须严格按控制相关确定的顺序执行。
流水线冲突
定义
- 流水线冲突是指对于具体的流水线来说,由于相关等原因的存在使得指令流中的下一条指令不能在指定的时钟周期执行。
- 流水线冲突分类
- 结构冲突:因硬件资源满足不了指令重叠执行的要求而发生的冲突。
- 数据冲突:当指令在流水线中重叠执行时,因需要用到前面指令的执行结果而发生的冲突。
- 控制冲突:流水线遇到分支指令和其它会改变PC值的指令所引起的冲突。
问题与基本解决方法
- 问题
- 导致错误的执行结果。
- 流水线可能会出现停顿,从而降低流水线的效率和实际的加速比。
- 基本解决方法
- 暂停部分指令执行:当一条指令被暂停时,在该暂停指令之后流出的所有指令都要被暂停,而在该暂停指令之前流出的指令则继续进行(否则就永远无法消除冲突)。
结构冲突
定义
- 在流水线处理机中,为了能够使各种组合的指令都能顺利地重叠执行,需要对功能部件进行流水或重复设置资源。
- 如果某种指令组合因为资源冲突而不能正常执行,则称该处理机有结构冲突。
- 常见的导致结构冲突的原因:
- 功能部件不是完全流水
- 资源份数不够
解决方法
插入暂停周期
- 为消除结构冲突而插入的流水线气泡
设置相互独立的存储器,使之分别存储指令与数据
有时流水线设计者允许结构冲突的存在
- 主要原因:减少硬件成本
- 如果把流水线中的所有功能单元完全流水化,或者重复设置足够份数,那么所花费的成本将相当高
数据冲突
定义
- 当相关的指令靠得足够近时,它们在流水线中的重叠执行或者重新排序会改变指令读/写操作数的顺序,使之不同于它们串行执行时的顺序,则发生了数据冲突。
- 结果:操作的内容是错误的
分类
- 读后写冲突(RAW)
- 最常见的一种数据冲突,对应于真数据相关。
- 发生条件
- 有两条指令i和j,i在j之前进入流水线
- 在 i 写入之前,j 先去读
- 写后写冲突(WAW)
- 对应于输出相关。
- 发生条件:
- 流水线中不只一个段可以进行写操作,且指令被重新排序了
- 有两条指令i和j,i在j之前进入流水线
- 在 i 写入之前,j 先写。
- 写后读冲突(WAR)
- 反相关
- 发生条件
- 有些指令的写结果操作提前了,而且有些指令的读操作滞后了;或是指令被重新排序了。
- 有两条指令i和j,i在j之前进入流水线。在 i 读取之前,j 先写入。
解决方案
定向
通过定向(旁路、短路)技术减少数据冲突引起的停顿
关键思想
- 在计算结果尚未出来之前,后面等待使用该结果的指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其它指令需要它的地方,那么就可以避免停顿。
作用范围
并不能解决所有数据冲突
指令调度
- 让编译器重新组织指令顺序来消除冲突(中间增加其他操作,消耗掉等待的延时)
控制冲突
定义
- 执行分支指令的结果有两种
- 分支成功:PC值改变为分支转移的目标地址。在条件判定和转移地址计算都完成后,才改变PC值。
- 不成功或者失败:PC的值保持正常递增,指向顺序的下一条指令。
- 控制冲突
- 分支延迟:分支指令引起的延迟
- 最简单的处理方法
- “冻结”或者“排空”流水线
- 前述5段流水线中,改变PC值是在MEM段进行的。给流水线带来了3个时钟周期的延迟
延迟分支
方法
- 从逻辑上“延长”分支指令的执行时间。把延迟分支看成是由原来的分支指令和若干个延迟槽构成,不管分支是否成功,都要按顺序执行延迟槽中的指令。
效果
- 无论分支成功还是失败都能够减少(掩盖)一个时钟周期的延迟
示例:无论是分支成功,还是分支失败,都能起效
延迟槽指令调度
要点
- 在延迟槽中放入有用的指令,由编译器完成。能否带来好处取决于编译器能否把有用的指令调度到延迟槽中。
三个子类
- 从前调度
- 从目标处调度
- 从失败处调度
局限性与进一步改进
- 分支延迟受到两个方面的限制
- 在延迟槽中放入有用的指令,由编译器完成。
- 能否带来好处取决于编译器能否把有用的指令调度到延迟槽中。
- 进一步改进:分支取消机制(处理预测错误的情况)
- 当分支的实际执行方向和事先所预测的一样时,执行分支延迟槽中的指令,否则就将分支延迟槽中的指令转化成一个空操作。
- 分支延迟受到两个方面的限制
分支取消
例子:预测错误后的取消与预测正确的情况
效果
- 如果预测成功:相当于白取了失败分支的指令,和空操作一个效果
- 如果预测失败,那么节省了一个时钟周期
【体系结构系列】相关与冲突相关推荐
- 【显卡】AMD和Nvidia显卡系列相关对比(A100 vs RTX4090)
[显卡]AMD和Nvidia显卡系列&相关对比(A100 vs RTX4090) 文章目录 [显卡]AMD和Nvidia显卡系列&相关对比(A100 vs RTX4090) 1. 介绍 ...
- cap mysql_.NetCore关于Cap(RabbitMQ)结合MySql使用出现MySql相关类冲突问题解决办法
问题还原 引用了 DotNetCore.CAP.MySql MySql.Data.EntityFrameworkCore 在使用MySql相关对象的时候会出现如下冲突,在命名空间加入伪空间名称是不能解 ...
- Servlet的体系结构 || Servlet相关配置
Servlet的体系结构 Servlet -- 接口 | GenericServlet -- 抽象类 | HttpServlet -- ...
- underscore 系列之防冲突与 Utility Functions
防冲突 underscore 使用 _ 作为函数的挂载对象,如果页面中已经存在了 _ 对象,underscore 就会覆盖该对象,举个例子: var _ = {value: 1 }// 引入 unde ...
- 三星S10系列相关参数对比,S10e/S10/S10+/S10 5G
三星S10系列 三星S10系列 在国内共发布了三款机型,分别是:S10e .S10.S10+. 除此之外,在海外还发布了S10 5G,目前能买到的一般是韩版和美版两种. 一.主要参数对比 配置/型号 ...
- 计算机体系结构控制相关实验,实验室简介--中科院计算所计算机体系结构国家重点实验室...
计算机和处理器是信息社会的基础,是信息领域的核心技术:计算机体系结构主要研究计算机和处理器的结构与设计方法,是推动信息技术发展的核心"引擎".随着摩尔定律放缓,计算机和处理器发展正 ...
- ASP.NET AJAX入门系列相关资料收集
声明:转自TerryLee的blog和自己整理的一些资料下载. ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接 ...
- win10中WSL与Intel Haxm系列模拟器产生冲突
windows 中的 wsl 基于微软自家的 Hyper-V (ms WHPX 系虚拟化加速) 有些第三方的安卓模拟器,基于 Intel 家的 Haxm (Intel Haxm 系虚拟化加速) 但是, ...
- 计算机体系结构流水线相关实验报告,计算机系统结构winDLX流水线实验报告汇编.doc...
计算机系统结构winDLX流水线实验报告汇编 计算机科学与技术学院 课程 学 号: 级:专 业: 学生姓名: 年 月 实 验 报 告 学生姓名: 学 号:时间: 地点:实验课程名称:计算机体系结构一. ...
最新文章
- 华为自动驾驶首秀,狂到diss潜在客户
- [CareerCup] 17.6 Sort Array 排列数组
- c# winform实现输出数据到Console控制台窗台
- 2007武汉.NET俱乐部沙龙-VS2008、WPF、Silverlight
- Git-如何将已存在的项目提交到git
- derby数据库操作比较难理解的错误及解决方法大全
- jQuery中的动画理论干货
- Eclipse europa 更新时 Error retrieving feature.xml. [error in opening zip file]的解决
- APP界面的数据可视化设计临摹学习模板
- 如何在 Pr 中创建动作序列?
- input type=image图片按钮具有提交功能
- HTML弹窗上下一步,JS实现从网页顶部掉下弹出层效果的方法
- 图书流通管理系统——软件开发项目实践
- EF批量添加数据BulkInsert
- gooflow学习笔记
- Google Earth Engine(GEE)——导出视频和存储到云端!
- 干货分享 | 创业公司绝对不会告诉你他们在用的工具们
- 不是所有数学命题都是可以被证明或证伪
- js提示“未结束的字符串常量”
- (附源码)Springboot美食教程小程序的设计与实现 毕业设计190900