所以我试图理解用于乱序指令执行的 Tomasulo 算法。这是我到目前为止所得到的:
指令按顺序取出并存储在指令队列中。
寄存器重命名发生在接下来的某个地方......?据我了解,这是通过给寄存器贴标签来避免 WAR/WAW 危险。假设您有 add r1,r2,r3 (1) add r3,r5,r6 (2) 您有 WAR 危险,需要确保指令 (1) 在将其添加到 r1 之前读取 r3 的旧值。所以我猜在指令队列(?)中,硬件会重命名寄存器,即 add r1,r2,r3#1 add r3#2,r5,r6 或类似的东西。
向预订站发出指示。据我了解,每个功能单元都有自己的一套预约站。但是,当适当标记的操作数在公共数据总线上可用时,它是否类似于该功能单元执行的指令队列(FIFO)?
由于指令可以以任意顺序(无序)完成,并且更多指令可以不断出现......是否存在公共数据总线在更多指令进入之前更新寄存器文件的阶段?我听说使用了重新排序缓冲区,它基本上按顺序对指令进行排序(这必须意味着指令具有某种标签),然后将寄存器结果提交回寄存器文件。
我感到困惑的是寄存器重命名的实现,以及保留站的结构。
感谢您的任何帮助。