承诺与退休指令

Committed Vs Retired instruction

这可能是一个愚蠢的问题,但我无法找到关于指令生命周期的这两个阶段的明确解释。我最初的想法是它们是同义词,但我不确定了。我开始认为

  1. 对于同时发生的加载提交和退出
  2. 对于存储,提交发生在指令更新寄存器时,退出发生在存储实际离开存储缓冲区时。

这是错误的吗?有人对这些术语有 2 个明确的定义吗?

干杯。

这些术语没有标准定义。我看到它们在不同的书籍或处理器设计中被用来表示不同的东西:

  • 在 Intel 处理器中,当指令占用的重新排序缓冲区条目被解除涂层时,就会发生退役。内存存储还有一个称为提交的额外阶段,存储在该阶段实际执行。那是因为英特尔处理器有存储缓冲区,存储可以在其中标记为已退役。1

  • Hennessy 和 Patterson 的书在关于乱序执行的章节中主要使用术语 "commit"。甚至商店也会在提交阶段执行。有时它使用术语 "retire" 但没有给出将其与提交区分开来的定义。但是,在附录 C 中,存储在第 4 个阶段执行,称为内存阶段,而寄存器更新在第 5 个阶段执行,称为回写。

  • 一些书籍使用术语 "complete" 和 "commit",其中 "complete" 在 Intel 处理器中表示 "retire",而 "commit" 表示 "commit"。顺便说一句,英特尔在他们的手册中也使用了术语 "complete",这可能意味着除退休之外的其他含义,具体取决于上下文。
  • 有时术语 "commit" 指更新寄存器和内存状态,而术语 "retire" 指释放架构资源。
  • 有时可以互换使用。例如,有微体系结构的学术建议可以乱序分配存储但不使用任何存储缓冲区。存储是在 ROB 本身退休时执行的。

这些术语在其他情况下可能用于表示其他事物。通常,您可以从作者使用它们的方式和整体上下文中推断出它们的含义。


脚注 1:英特尔有 a patent 替代实现,允许存储让存储缓冲区乱序,他们没有在他们的任何 CPU 中实现它。

如果 L1D 配备了一种机制来区分缓存中每个有效缓存行的全局可见状态和局部可见状态,则可以在退役前乱序提交存储。需要这种机制来维持商店的可见秩序。在这个假设的设计中,也可以推测性地提交存储,这将需要在错误预测时刷新(部分或全部)本地可见状态。保存存储的存储缓冲区条目可以选择在存储提交时释放,即使它还没有退休。