【问题标题】:Understanding the Tomasulo algorithm了解 Tomasulo 算法
【发布时间】:2012-06-28 11:37:20
【问题描述】:

所以我试图了解用于乱序指令执行的 Tomasulo 算法。到目前为止,这是我所得到的:

  • 指令按顺序获取并存储在指令队列中。

  • 寄存器重命名发生在接下来的某个地方...?据我了解,这是通过给寄存器贴标签来避免 WAR/WAW 危险。说你有 添加 r1,r2,r3 (1) 添加 r3,r5,r6 (2) 您有 WAR 危险,需要确保指令 (1) 在将 r3 的旧值添加到 r1 之前读取它。所以我猜在指令队列(?)中,硬件重命名了寄存器,即 添加 r1,r2,r3#1 添加 r3#2,r5,r6 或类似的东西。

  • 向预订站发出指令。据我了解,每个功能单元都有自己的一套预约站。但是,当适当标记的操作数在公共数据总线上可用时,它是否类似于该功能单元执行的指令队列(FIFO)?

  • 由于指令可以按任意顺序(乱序)完成,并且更多指令可以不断出现......是否存在公共数据总线在更多指令进入之前更新寄存器文件的阶段?我听说使用了重新排序缓冲区,它基本上按顺序对指令进行排序(这必须意味着指令具有某种标签),然后将寄存器结果提交回寄存器文件。

我感到困惑的是寄存器重命名的实现,以及保留站的结构。

感谢您的帮助。

【问题讨论】:

    标签: hardware computer-science computer-architecture


    【解决方案1】:

    Tomasulo 的算法实际上与任何特定硬件无关,事实上,在真实机器中,寄存器重命名通常发生在指令插入指令队列之前。让我们了解几个基本点。首先,程序中表达的寄存器是逻辑寄存器。其次,实际的硬件寄存器称为物理寄存器。 Tomasulo 的算法只是一种将逻辑寄存器映射到物理寄存器的机制。在真机中,一般有两个表将逻辑寄存器映射到物理寄存器。一个在重命名阶段,一个在提交阶段。物理寄存器也必须比逻辑寄存器多。它基本上是这样工作的:

    1. 对于每个逻辑输入,在重命名阶段映射表中查找以找出当前保存该逻辑寄存器值的物理寄存器。
    2. 对于每个逻辑输出,找到一个未使用的物理寄存器并将输出映射到它。更新重命名阶段映射表。如果没有可用的物理寄存器,请等到一个可用。
    3. 在提交阶段,当一条指令被提交时,用新的映射覆盖指令逻辑输出的旧逻辑到物理映射。旧映射中的免费物理寄存器。
    4. 如果出现错误预测(或管道中的任何类型的 squash),提交阶段中的表会覆盖重命名阶段中的表,并且中间管道中的所有内容都会被吹走。

    关于保留站的部分实际上是乱序流水线的具体实现,本质上是与物理寄存器一起出现的。有很多机器并没有真正意义上的预约站。

    Hennessy 和 Patterson 的计算机体系结构书籍是此类内容的标准教科书。我试图尽可能简单地解释这一点,但实际上有成千上万的优化这些东西的建议。

    【讨论】:

    • 谢谢你,我现在实际上正在阅读那本书,并且慢慢地理解了至少一个基本的实现。
    【解决方案2】:
    1. Tomasulo 算法与重新排序缓冲区无关。 Tomasulo算法的目的是实现乱序执行,而reorder buffer的动机是实现精确中断。

    2. 常见的寄存器重命名方案提供的物理寄存器数量超过了 ISA 的需要。在这种情况下,在将指令送入指令队列之前,其架构寄存器的名称(例如 r5)已被修改为物理寄存器(例如 p19)。然而 Tomasulo 算法使用了另一种方法,其中指令的寄存器实际上被“重命名”为部件的编号(部件可以是保留站中的单个槽/条目或任何寄存器)。

      李>

    您可以在这张幻灯片中了解更多详情:

    http://www.slideshare.net/onesuper/understanding-tomasolu-algorithm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多