【问题标题】:Difference between In-oder and Out-of-order execution in ARM architectureARM架构中按序执行和无序执行的区别
【发布时间】:2014-09-07 08:15:10
【问题描述】:

根据我对 ARM 处理器的理解,以下是顺序执行的特点 (1) 按顺序执行指令 (2) 直到当前指令执行完毕,才会执行下一条指令。 (3) 执行速度较慢。

乱序执行与 In-order 的行为正好相反。 (1) 以非顺序执行指令 (2) 即使当前指令未完成,也会执行下一条指令。 (仅当下一条指令不依赖于当前指令的结果时才会这样做) (3)更快的执行速度。

除了上面提到的,还有其他的功能区别吗??

【问题讨论】:

    标签: arm cpu-architecture


    【解决方案1】:

    差不多就是这样。乱序执行“贪婪地”尽可能快地执行每条指令,而不用等待前面的指令完成,除非它们依赖于尚未完成的指令的结果。

    如果一条指令等待读取内存,这显然非常有用。有序实现只会停止直到数据可用,而无序实现可以(前提是前面有不能独立执行的指令)在处理器等待数据传递时完成其他操作记忆。

    请注意,编译器和(如果编译器不够聪明的话)程序员都可以利用这一点,将内存中潜在的昂贵读取移动到远离数据实际使用点的地方。这对有序实现没有影响,但可以帮助隐藏无序实现中的内存延迟,从而使代码运行得更快。

    当然,不利的一面是,由于涉及所有簿记,无序实现往往更复杂且更耗电。

    【讨论】:

    • 按顺序执行只是意味着指令开始按程序顺序。现代有序 ARM CPU 会跟踪传入的负载,并且在尝试读取尚未准备好的负载结果寄存器之前实际上不会停止。这允许内存级并行性,这对于现代 CPU 的性能至关重要,其中 DRAM 距离延迟数百个周期。 (就像 hit-under-miss 隐藏一个缓存未命中,miss-under-miss 隐藏多个缓存未命中。)乱序 exec 可以隐藏(一些)内存延迟,即使在加载后不久使用结果,所以它在实际代码中仍然非常强大。
    【解决方案2】:

    架构与它几乎没有关系,在 ARM 中更显着的区别之一是内存排序可以非常放松(可能在用户的控制下)。即使是有序的 3 级流水线 Cortex-M 也有需要使用 ISBDSB 的场景。

    按顺序执行指令

    这是一直呈现给程序员的视图,所以并没有真正描述太多。

    直到当前指令执行完毕,才会执行下一条 操作说明。

    不正确。所有现代处理器都是流水线的,获取/解码/分支预测都可以在有序机器中发生,而早期的指令仍在运行中。有些地方可能会缓存状态以防需要还原。

    执行速度较慢。

    不保证。宽的有序机器可以具有比无序机器更高的 IPC。不过,构建它不一定有意义。

    以非顺序执行指令

    这称为“无序调度”或“推测执行”(这是另一回事,在更高级别上工作)。 在实际的 ARM 内核中,“乱序完成”更为常见。这是计算负载和存储的地方,然后将其发送到一组缓冲区。即使是具有单个内存接口的单个​​发行机器也可以具有多个存储缓冲区,以允许存储排队,同时 ALU 操作在处理器中继续进行。使用多个内存接口(或 AXI 之类的总线)时,可以在完成任意数量的其他事务的同时进行慢速加载。乱序完成比任何形式的乱序调度更容易实现,并且在 ARM 体系结构中通过“精确中止”(发生在程序顺序的逻辑位置)和“不精确中止”(发生在后期当内存系统最终无法解决事务时)。

    另一个排序示例是有 2 个整数管道和一个浮点管道的场景。不仅管道的长度可能不同,而且没有什么可以说它们必须按照设定的顺序映射到传入的指令上——只要处理了依赖关系。

    即使当前指令没有完成,它也会执行下一条 操作说明。 (只有在下一条指令没有 取决于当前指令的结果)

    这通常适用于所有流水线处理器。任何阶段都可能在依赖于一些较早的指令取得进展时停止。

    更快的执行速度。

    也许,取决于约束条件。重要的是,编译器将从了解最佳排序中受益,如果二进制文件需要对单个目标设备或多种设备进行优化,它会有所作为。

    【讨论】:

      【解决方案3】:

      还可以提到,乱序执行的处理器在传入的字节单位指令上有一个“窗口”。它是由于指令混乱而自然产生的。如果以下字母是处理器要处理的字节... CBDAEF,最佳方法是执行 AB CD EF - 处理器只有 3 个字节的窗口,它会执行 CB DE AF反而。它看不到指令的总传入。这个窗口是构成一个好的处理器的众多品质之一。

      (在我的示例中,彼此附近的字母可以同时完成 - 因为它们不相关 - 而其他字母则不能)。

      【讨论】:

        猜你喜欢
        • 2017-05-20
        • 2018-06-16
        • 2020-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-02
        • 1970-01-01
        相关资源
        最近更新 更多