【计算机体系结构】相关

相关

  1. 相关是​导致流水线冲突的主要原因。
  2. 相关
    • 两条指令之间存在某种依赖关系。
    • 如果两条指令相关,则他们就有可能不能在流水线中重叠执行或者只能部分重叠执行。
  3. 三类相关有:数据相关(真数据相关)、名相关、控制相关

数据相关
对于两条指令i (前一条指令)和 j (后一条指令),如果在以下条件之一成立,则称指令j和指令i数据相关。

  1. 指令j 使用指令i 产生的结果
  2. 指令j 与指令k 数据相关,指令k 又与指令i数据相关。

数据相关特点

  1. 具有传递性
  2. 反映了数据的流动关系,即如何从其产生者流动到其消费者

实例:
在这里插入图片描述
存在数据相关的指令:

  1. L.D与ADD.D的数据相关(L.D指令将访存结果写入F0,而ADD.D需要使用L.D的访存结果)
  2. ADD.D与S.D的数据相关(ADD.D将计算结果写入F4,而S.D需要使用ADD.D的计算结果写入存储器)
  3. S.D与DADDIU的数据相关(前者修改R1的值,后者使用R1的值作为分支条件)

数据相关检测

  1. 当数据的流动是经过寄存器时,相关的检测比较直观和容易。
  2. 当数据的流动是经过存储器时,检测比较复杂。
    (原因:1. 相同形式的地址其有效地址未必相同。2. 形式不同的地址其有效地址可能相同)

名相关
名:

  • 指令访问的寄存器或存储器单元的名称(例:R5,0x00001000等)

名相关:

  • 如果两条指令使用相同的名,但是它们之间并没有数据流动,则称这两条指令存在名相关。

细分:

  1. 反相关
    如果指令j 写的名与指令i 读的名相同,则称指令i 和j 发生了反相关。
    实例:
    在这里插入图片描述
  2. 输出相关
    如果指令j 和指令i 写相同的名,则称指令i 和j 发生了输出相关
    实例:
    在这里插入图片描述

名相关的特点

  1. 名相关的两条指令之间没有数据的传递。
  2. 如果一条指令中的名改变了,并不影响另外一条指令的执行。

消除名相关的方法:换名技术(通过改变指令中操作数的名来消除名相关)
例:对于寄存器操作数进行换名称为寄存器换名。

  • 既可以用编译器静态实现,也可以用硬件动态完成。
    实例:
    在这里插入图片描述

控制相关
①控制相关是指由分支指令引起的相关
②为了保证程序应有的执行顺序,必须严格按控制相关确定的顺序执行

控制相关实例:
在这里插入图片描述

  • 这里不能把s 移到if 语句的then 之后
发布了39 篇原创文章 · 获赞 26 · 访问量 899

猜你喜欢

转载自blog.csdn.net/qq_43263647/article/details/105516575