【体系结构系列】相关与冲突

相关与冲突

相关

概念

  • 相关
    • 两条指令之间存在某种依赖关系。
    • 如果两条指令相关,则它们就有可能不能在流水线中重叠执行或者只能部分重叠执行
  • 三类相关
    • 数据相关(也称真数据相关)
    • 名相关
    • 控制相关

数据相关

  • 对于两条指令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个时钟周期的延迟

延迟分支

  • 方法

    • 从逻辑上“延长”分支指令的执行时间。把延迟分支看成是由原来的分支指令和若干个延迟槽构成,不管分支是否成功,都要按顺序执行延迟槽中的指令。
  • 效果

    • 无论分支成功还是失败都能够减少(掩盖)一个时钟周期的延迟
  • 示例:无论是分支成功,还是分支失败,都能起效

  • 延迟槽指令调度

    • 要点

      • 在延迟槽中放入有用的指令,由编译器完成。能否带来好处取决于编译器能否把有用的指令调度到延迟槽中。
    • 三个子类

      • 从前调度
      • 从目标处调度
      • 从失败处调度
  • 局限性与进一步改进

    • 分支延迟受到两个方面的限制
      • 在延迟槽中放入有用的指令,由编译器完成。
      • 能否带来好处取决于编译器能否把有用的指令调度到延迟槽中。
    • 进一步改进:分支取消机制(处理预测错误的情况)
      • 当分支的实际执行方向和事先所预测的一样时,执行分支延迟槽中的指令,否则就将分支延迟槽中的指令转化成一个空操作。

分支取消

  • 例子:预测错误后的取消与预测正确的情况

  • 效果

    • 如果预测成功:相当于白取了失败分支的指令,和空操作一个效果
    • 如果预测失败,那么节省了一个时钟周期
  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,作为人工智能,我无法提供思维导图。但我可以为您介绍一下流水线工作原理和冲突处理方法。 计算机体系结构流水线的工作原理: 流水线是一种计算机结构,用于提高指令处理速度。流水线将一个指令处理分成若干个流水段,每个流水段负责执行一个指令处理的一部分。同时,多条指令可以在不同的流水段同时处理,从而提高了处理效率。 流水线中一般包含以下五个流水段: 1. 取指令(IF):从内存中读取指令。 2. 指令译码(ID):将指令翻译为计算机可以理解的指令。 3. 执行指令(EX):执行指令的操作。 4. 存储访问(MEM):访问内存来获取数据。 5. 写回结果(WB):将执行的结果写回内存或寄存器中。 冲突处理方法: 1. 数据相关(Data Hazards):当一条指令需要用到另一条指令才能执行时,就会出现数据相关。 解决方法: ① 前推技术(Forwarding):让结果直接流动到需要的地方,绕过数据相关的指令。 ② 排队技术(Stalling):将流水线暂停,等待需要的数据指令完成。 2. 控制相关(Control Hazards):当分支指令的结果未知时,即分支指令的条件尚未满足,就会出现控制相关。 解决方法: ① 预测分支指令的结果,提前预测好接下来的指令,以减少等待时间。 ② 延迟槽技术(Delayed Branch):在分支指令之后加入一个无操作指令,使得下一条指令一定会执行。 以上是计算机体系结构流水线的相关冲突处理方法的介绍,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值