CA-RW-CH4

Molaters Lv5

[[CA-NotesView]]

指令的静态和动态调度 解决控制相关技术和多指令流出等内容

指令的静态调度 包括循环级并行的处理,寄存器换名和指令调度等等。

指令的动态调度包括目前最常用的两种硬件策略:计分牌和Tomasulo算法

解决控制相关的技术,理解分支预测缓冲技术

多指令流出技术


指令集并行的概念

实际的CPI = 理想CPI + 结构相关的停顿 + 先写后读的停顿 + 先读后写的停顿 + 写后写的停顿 + 控制相关的停顿

本章研究的技术和所克服的停顿:

image.png

循环展开调度的基本方法

  1. 保证正确性
  2. 保证有效性
  3. 使用不同的寄存器
  4. 尽可能地减少循环控制种地测试指令和分支指令
  5. 注意对存储器数据的相关性分析
  6. 注意新的相关性

相关性

  1. 数据相关
  2. 名相关 如果两个指令使用同名的寄存器但是之间并没有数据流,就叫做名相关;
    1. 反相关 知道是i先执行,j指令需要写的名字是i要读的名 先读后写相关
    2. 输出相关 输出相关的指令是不能颠倒的。 写后写相关
  3. 控制相关

指令的动态调度

动态调度原理

为了 乱序执行

流出:指令译码 检查是否存在结构的阻塞

读操作数:没有数据相关引发的阻塞就读操作数

记分牌

在第二阶段的读操作数的时候,只要指令所需要的资源都满足而且没有数据阻塞就允许指令乱序执行

image.png

流水线指令流出和执行的步骤

  1. 流出 IS 如果本质零多需要的功能部件有空闲,并且其他的正在执行的指令使用的目的寄存器和本指令不相同,计分配就向功能部件流出这个指令,并修改记分牌内部的数据记录

  2. 读操作数 RO 记分牌检测源操作数寄存器种数据的有效性,如果前面已经流出的还在运行的指令不对这个指令的源操作数进行写操作,或者一个正在工作的功能部件已经完成了对这个寄存器的写操作,那么此操作数有效。

  3. 执行 EX

  4. 写结果 WR

:luc_battery_charging: 注意还是要考虑到带宽

记分牌记录的信息要分成三个部分

指令状态表:记录正在执行的个条指令已经进入记分牌MIPS流水段四段种的哪一段

功能部件状态表:记录各个功能部件的状态,每个功能部件在状态表中都以剩下的9个域来记录

Busy : 标识功能部件是不是在工作

Op : 功能部件但钱执行的操作.

Fi : 目的寄存器编号

Fj Fk : 代表源寄存器编号

Qj Qk : 代表向Rj,Rk中写结果的功能部件

Rj Rk : 表示Fj Fk是否就绪,是否已经被使用

结果寄存器状态表:每个寄存器在表中有一个域,用于记录写入这个寄存器功能部件。

详细分析:

1
2
3
4
5
6
LD      F6,34(R2)
LD F2,45(R3)
MULID FO,F2,F4
SUBD F8,F6,F2
DIVD F10,FO,F6
ADDD F6,F8,F2

image.png

记分牌的流水线控制方式:

image.png

记分牌的性能受限于

  • 程序指令中可以开发的并行性,也就是是不是存在可以并行执行的不相关的指令

  • 记分牌的容量

  • 功能部件的数目和种类

  • 反相关和输出相关。会引起记分牌中的先读后写和写后写阻塞

问题2和3可以通过增加记分牌的容量和功能部件的数量来解决,这会导致处理器的成本增加,并可能影响到系统时钟周期时间。

Tomasulo算法

将记分牌的关键部分和寄存器换名技术结合在一起,这样的调度机制实现虽然有很多的变化

三个阶段 IS EX WB

核心: 通过寄存器换名的方式来消除写后写和先读后写的相关而可能造成的流水线阻塞

主要不同

  1. 指令流出的逻辑和保留站相结合实现寄存器换名,完全消除了数据写后写和先读后写相关这一类的名相关

  2. 冲突检测和指令执行控制机制分开

  3. 计算的结果通过相关专用通路直接从功能部件进入对应的保留站进行缓冲,而不一定是写到寄存器

Tomasulo 保留站结构

Op 部件所进行的操作

Vj Vk : 源操作数的值。Store缓冲区有Vk区域,用于存放要写入存储器的值。V域和Q域不同时有效

A : 存放存储器地址开始存立即数,计算出有效的地址之后,存放有效地址

Busy: 标识保留站Rs或者响应的功能部件FU是否空闲

Register result status 如果存在在对寄存器的写操作,指示对这个寄存器进行写操作的部件

Qi : 保留站的编号

Tomasulo 算法实现消除阻塞的方法

  1. 产生DIVD指令操作数F6的指令(第一个LD)一旦执行完,DIVD指令对应保留站的Vk区域就保存这个结果,这样DIVD和ADDD之间就不再有冠以F6的限度后写相关,ADDD指令就可以执行下去

  2. 如果第一个LD指令还没有执行完毕,DIVD指令所在的MULT2保留站的Qk域将指向第一条LD指令的保留站LOAD1,从而允许ADDD指令执行并将结果存入结果寄存器而不影响DIVD的执行

1
2
3
4
5
6
LD      F6,34(R2)
LD F2,45(R3)
MULID FO,F2,F4
SUBD F8,F6,F2
DIVD F10,FO,F6
ADDD F6,F8,F2

image.png

Tomasulo 在每个阶段的动作

IS阶段
对于浮点操作,进入条件: 有保留空间站r

image.png

经历的阶段是:

  1. 如果没有就绪就执行换名操作然后进入等待

  2. 如果数据已经又笑了,就将数据传送给V寄存器,然后标识其有效

  3. 设置保留站繁忙且设置操作类型和目标寄存器

对于存/取操作,进入条件:有空闲缓冲r

image.png

这一部分是统一测操作

取操作不同处:

image.png

存操作不同处:

image.png


EX阶段

对于浮点操作,进入的条件是:

两个源操作数都就绪

取和存第一步的进入条件是

第一个操作数就绪并且r到达了缓冲队列的头部


基于Tomasulo算法的动态循环展开

一旦有一条指令没有执行完,其后的指令不允许进入执行段

第一次取数LD,由于Cache miss需要8个时钟周期延迟,之后的取数LD,只需要1个时钟周期,存数需要3个时钟周期

乘法需要4个时钟周期

现在假设连续两遍的循环的所有指令全部流出,但是所有的浮点存/取和运算的操作全部没有完成。给出状态表的信息。

优点

  • 分布式件冲突检测。
  • 利用寄存器换名,彻底消除WAW和WAR这两种名相关
  • 如果多个保留站等待同一个操作数,当操作数在CDB上广播时,他们可以同时获得所害的数据
  • 对于存储器访问,动态存储器地址判别技术可解决RAW冲突(取操作数时判断)、WAR和WAW冲突(存操作数的时候判断)
  • 能够达到很高的性能

控制相关的动态解决技术

分支预测缓冲

  • 标题: CA-RW-CH4
  • 作者: Molaters
  • 创建于 : 2023-11-24 11:30:49
  • 更新于 : 2023-11-20 22:17:47
  • 链接: https://molaters.github.io/2023/11/24/计算机体系结构/CA-RW-CH4/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论