【发布时间】:2020-06-05 12:42:39
【问题描述】:
我知道重排序缓冲区可以用作历史缓冲区以满足推测执行的需要,它还允许将寄存器重命名为 ROB 条目(以打破命名依赖关系,如寄存器重命名)。
在线阅读资源/手册,似乎存储缓冲区也用于推测执行。 ROB 是否不足以在路径预测错误的情况下丢弃值?
【问题讨论】:
标签: x86 cpu-architecture
我知道重排序缓冲区可以用作历史缓冲区以满足推测执行的需要,它还允许将寄存器重命名为 ROB 条目(以打破命名依赖关系,如寄存器重命名)。
在线阅读资源/手册,似乎存储缓冲区也用于推测执行。 ROB 是否不足以在路径预测错误的情况下丢弃值?
【问题讨论】:
标签: x86 cpu-architecture
一切在达到退休之前都被视为推测性的 - 按顺序退休是 CPU 检查在执行到达某些稍后执行的指令之前应该发生的异常的方式。还有分支错误预测等。所以两者都是。
ROB 是否足以在路径预测错误的情况下丢弃值?
不,register重命名只处理寄存器,而不是要存储到内存的值。
您需要一个存储缓冲区,以便您可以尽早执行存储,而不会让其他内核看到潜在的错误推测!否则存储必须等到它们到达-order-retirement 阶段,因此在执行之前就知道它们是非投机性的。 (并且缓存行必须处于独占或修改状态)。
存储缓冲区对于将执行与缓存未命中分离也很有价值;如果您可以将其留在存储缓冲区中,则无需等到缓存行到达。这甚至适用于有序管道。它甚至在退休后也适用于 OoO exec,因此缓存未命中存储有一个更大的窗口,不会使管道停止,不依赖于按顺序退休的顺序。
更多详情:Can a speculatively executed CPU branch contain opcodes that access RAM?
相关:Size of store buffers on Intel hardware? What exactly is a store buffer? 可能还有我写的其他一些 SO 答案。 https://stackoverflow.com/search?q=user%3A224132+%5Bcpu-architecture%5D+store+buffer
它还允许将寄存器重命名为 ROB 条目
听起来您在谈论英特尔 P6 系列的实现细节。大多数其他设计(Sandybridge 系列和 AMD)使用单独的物理寄存器文件 (PRF),并且 ROB 只有指向 PRF 条目的指针。这对于寄存器大小较大的 64 位架构更有意义,尤其是当我们考虑 128 位 XMM 寄存器时。
参见https://www.realworldtech.com/sandy-bridge/ - SnB 是从 P6 家族到 SnB 家族的主要变化。
【讨论】: