重排序缓冲区:指针值已满?

问题描述 投票:0回答:1

Tomasulo算法中用于无序执行和分支推测的重排序缓冲区有2个指针。

  • 头指针:指向最早的指令。这将是下一个要执行的指令。
  • 尾指针:将在其中添加最新指令的点。

每个ROB条目具有4个字段:指令类型,目标,值和就绪字段。

我已经看到许多资料来源以这种方式进行教学。 ROB条目不需要提交位或繁忙位。

对于大小为N的ROB。

  • 如果ROB为空或刷新,则TAIL = HEAD。
  • 如果ROB有一个空闲插槽且HEAD = 0,则TAIL = N-1。
  • 如果ROB已满并且HEAD = 0,则TAIL =?

如果TAIL = HEAD,我们怎么知道ROB是满还是空?

buffer cpu-architecture microprocessors circular-buffer
1个回答
1
投票

通常是一个circular缓冲区(索引环绕);几乎充满的状态不必使HEAD = 0,而只需一个任意位置。

是的,如果您使用HEAD和TAIL读/写索引,则在完全与空之间存在歧义。正如wikipedia article所解释的,解决此问题的一种方法是跟踪可用容量,该容量可以从0..n开始,而不是0..n-1。

考虑CPU,这是一个实现细节,其中如何硬件如何解决;可以安全地假设它正确有效地实现了可以使用其所有条目的循环缓冲区。 (或者不太可能,有效ROB大小比物理ROB大小小1。)


顺便说一句,您的带有HEAD=0的模型对应于在当前尾部添加指令,但是通过将所有条目向下移动低1个索引而不是移动HEAD来退出(提交)。在circular缓冲区中,要注意的条件是HEAD = (TAIL-1)%n或类似的东西。

© www.soinside.com 2019 - 2024. All rights reserved.