x86 - promise 与退休指令

标签 x86 cpu-architecture cpu-cache instructions

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

  • 对于负载提交和退休同时发生
  • 对于存储,提交发生在指令更新寄存器时发生,而退出发生在存储实际离开存储缓冲区时。

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

    干杯。

    最佳答案

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

  • 在 Intel 处理器中,当指令占用的重新排序缓冲区条目被取消涂层时,就会发生报废。内存存储有一个额外的阶段,称为提交,其中实际执行存储。这是因为英特尔处理器具有存储缓冲区,可以将存储标记为已停用。1
  • Hennessy 和 Patterson 的书在乱序执行一章中主要使用术语“提交”。甚至存储也会在提交阶段执行。有时它使用术语“退休”,但没有给出将其与提交区分开来的定义。但是,在附录 C 中,存储在第 4 阶段执行,称为内存阶段,而寄存器更新在第 5 阶段执行,称为回写。
  • 一些书籍使用术语“完成”和“提交”,其中“完成”在英特尔处理器中表示“退役”,而“提交”表示“提交”。顺便说一句,英特尔还在他们的手册中使用了“完整”一词,根据上下文,这可能意味着除退休之外的其他含义。
  • 有时术语“提交”是指更新寄存器和内存状态,而术语“退休”是指释放架构资源。
  • 有时可以互换使用。例如,有一些关于微体系结构的学术建议,可以无序调度存储,但不使用任何存储缓冲区。存储是在从 ROB 本身退出时执行的。

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

    脚注 1:英特尔有 a patent在另一种实现上,允许商店无序地离开存储缓冲区,他们没有在任何 CPU 中实现它。

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

    关于x86 - promise 与退休指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52761055/

    相关文章:

    assembly - 如果 x86 没有符号标志 (SF),它仍然是完全可编程的吗?

    visual-studio - 具有 MASM 代码的 Visual Studio C/C++ 项目产生错误 `error A2008: syntax error : .`

    c++ - 在比较中,GCC 似乎更喜欢小的即时值。有没有办法避免这种情况?

    macos - Clang:输出 32 位和 64 位组合 .dylib

    x86 - i386 中的哪个寄存器存储 CPL?

    performance - clflush 是否也会删除 TLB 条目?

    operating-system - 什么是缓存大小和缓存行大小?

    c++ - 从程序集调用 Win32 的 Sleep 函数会产生访问冲突错误

    linux - 如何使用 Intel Pin 工具生成分支列表?

    c++ - 在二维数组上缓存不友好的循环比缓存友好的循环更快