Tomasulo算法中用于无序执行和分支推测的重排序缓冲区有2个指针。
每个ROB条目都有4个字段:指令类型,目标,值和就绪字段。
我已经看到许多消息源以这种方式进行教导。 ROB条目不需要提交位或忙位。
对于大小为N的ROB。
如果TAIL = HEAD,我们怎么知道ROB是满还是空?
答案 0 :(得分:1)
通常它是一个圆形缓冲区(索引环绕);几乎充满的状态不必使HEAD = 0,而只需一个任意位置。
是的,如果您使用HEAD和TAIL读/写索引,则在完全与空之间存在歧义。正如wikipedia article所解释的,一种解决方法是跟踪可用容量,该容量可以从0..n开始,而不是0..n-1。
对于CPU而言,这是一个实现细节,而硬件如何解决它并不重要。可以肯定地说,它正确有效地实现了可以使用其所有条目的循环缓冲区。 (或者不太可能,有效ROB的大小要比物理ROB的大小小1。)
顺便说一句,带有HEAD=0
的模型对应于在当前尾部添加指令,但是通过将所有条目向下降低1个索引而不是移动HEAD
来退出(提交)。在 circular 缓冲区中,要注意的条件是HEAD = (TAIL-1)%n
或类似的东西。