重排序缓冲区

重新排序缓冲区 (ROB) 是用于扩展 Tomasulo 算法以支持乱序和推测指令执行的硬件单元。 扩展强制指令按顺序提交。

缓冲区是一个循环缓冲区(提供 FIFO 指令排序队列),实现为数组/向量(允许在指令无序完成时记录结果)。

Tomasulo 算法分为三个阶段:发布、执行、写入结果。 在算法的扩展中,有一个额外的提交阶段。 在提交阶段,指令结果存储在寄存器或内存中。 写入结果阶段被修改为将结果放置在重新排序的缓冲区中。 为此,每条指令都在保留站中用其在 ROB 中的索引进行标记。

缓冲区的内容用于缓冲区中调度的其他指令的数据依赖性。 一旦结果有效,缓冲区的头部将被提交。 它的依赖关系将已经计算并提交,因为它们必须在缓冲区中的指令之前,但不一定与它相邻。 指令之间的数据依赖性通常会在指令等待其依赖值时停止流水线。 ROB 允许流水线继续处理其他指令,同时确保提交结果,以防止数据危害,例如先读后写 (RAW)、先写后读 (WAR) 和先写前写 (WAW)。

缓冲区的每个条目中都有附加字段以支持扩展算法:

  • 指令类型(跳转、存储到内存、存储到寄存器)
  • 目的地(内存地址或寄存器号)
  • 结果(到达目的地的值或(未)成功跳跃的指示)
  • 有效性(结果是否已经存在?)
重排序缓冲区

重新排序缓冲区的后果包括精确异常和目标地址错误预测(分支或跳转)的轻松回滚控制。 当跳转预测不正确或在指令流中遇到不可恢复的异常时,清除 ROB 中的所有指令(通过将循环队列尾部设置为头部)并重新初始化保留站。

0

点评

点赞

相关文章