Architecture ARM体系结构中顺序执行和无序执行的区别

Architecture ARM体系结构中顺序执行和无序执行的区别,architecture,arm,sequential,Architecture,Arm,Sequential,根据我对ARM处理器的理解,以下是顺序执行的特性 1按顺序执行指令 2在当前指令完成之前,它不会执行下一条指令。 3执行速度较慢 无序执行与有序行为正好相反。 1以非顺序顺序执行指令 2即使当前指令未完成,它也将执行下一条指令。仅当下一条指令不依赖于当前指令的结果时,才执行此操作 3更快的执行速度 除了上面提到的功能外,还有其他功能上的区别吗?差不多就是这样。无序执行贪婪地尽可能快地执行每一条指令,而无需等待以前的指令完成,除非它们依赖于尚未完成的指令的结果 如果指令等待读取内存,这显然是最有用

根据我对ARM处理器的理解,以下是顺序执行的特性 1按顺序执行指令 2在当前指令完成之前,它不会执行下一条指令。 3执行速度较慢

无序执行与有序行为正好相反。 1以非顺序顺序执行指令 2即使当前指令未完成,它也将执行下一条指令。仅当下一条指令不依赖于当前指令的结果时,才执行此操作 3更快的执行速度


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

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

如果指令等待读取内存,这显然是最有用的。有序实现只会暂停,直到数据可用,而无序实现可以提供前面的指令,这些指令无法独立执行。在处理器等待从内存中传递数据时,执行其他操作

请注意,编译器和如果编译器不够聪明,程序员可以利用这一点,将可能昂贵的读取从内存中移出,尽可能远离实际使用数据的位置。这对有序实现没有影响,但有助于在无序实现中隐藏内存延迟,从而使代码运行更快


当然,缺点是无序的实现往往更复杂、更耗电,因为它涉及到所有的簿记工作。

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

如果指令等待读取内存,这显然是最有用的。有序实现只会暂停,直到数据可用,而无序实现可以提供前面的指令,这些指令无法独立执行。在处理器等待从内存中传递数据时,执行其他操作

请注意,编译器和如果编译器不够聪明,程序员可以利用这一点,将可能昂贵的读取从内存中移出,尽可能远离实际使用数据的位置。这对有序实现没有影响,但有助于在无序实现中隐藏内存延迟,从而使代码运行更快


当然,缺点是无序实现往往更复杂、更耗电,因为它涉及所有簿记工作。

还可以提到,无序执行的处理器在传入的字节单位指令上有一个窗口。它自然是由于指令混乱造成的。如果以下字母是处理器要处理的字节。。。C B D A E F,最理想的方法是执行AB CD EF-处理器只有3个字节的窗口,它将执行CB DE A F。它无法查看全部传入指令。这个窗口是构成一个好的处理器的许多品质之一


在我的示例中,相邻的字母可以同时完成—因为它们是不相关的—而其他字母则不能。

还可以提到,无序执行的处理器在传入的字节单位指令上有一个窗口。它自然是由于指令混乱造成的。如果以下字母是处理器要处理的字节。。。C B D A E F,最理想的方法是执行AB CD EF-处理器只有3个字节的窗口,它将执行CB DE A F。它无法查看全部传入指令。这个窗口是构成一个好的处理器的许多品质之一


在我的示例中,相邻的字母可以同时完成-因为它们是不相关的-而其他字母则不能。

体系结构与此无关,在ARM中,一个更重要的区别是内存排序可以在用户的控制下非常轻松。即使是顺序3级管道Cortex-M也有需要使用ISB和DSB的场景

按顺序执行指令

这是始终呈现给程序员的视图,因此它实际上没有太多描述

在当前指令完成之前,它不会执行下一个指令 指示

不对。所有现代处理器都是流水线的,并且都是fetch/d ecode/branch predict可以全部发生在订单机器中,而之前的指令仍在执行中。在某些地方,状态可能会被缓存,以防需要恢复

执行速度较慢

不能保证。宽有序机器的IPC可能高于无序机器。不过,建造它并不一定有意义

按非顺序执行指令

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

排序的另一个示例是一个场景,其中有两个整数管道和一个浮点管道。不仅管道的长度可能不同,而且如果依赖关系得到处理,就没有必要说它们必须以设定的顺序映射到传入指令

即使当前指令未完成,它也将在下一步执行 指示只有在下一条指令未执行时,才能执行此操作 取决于当前指令的结果

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

更快的执行速度


也许,取决于约束条件。值得注意的是,编译器将从理解最佳顺序中获益,如果二进制文件需要对单个目标设备或广泛的设备进行优化,则会产生不同的效果。

体系结构与此无关,在ARM中,一个更显著的区别是内存排序可以在用户的控制下非常轻松。即使是顺序3级管道Cortex-M也有需要使用ISB和DSB的场景

按顺序执行指令

这是始终呈现给程序员的视图,因此它实际上没有太多描述

在当前指令完成之前,它不会执行下一个指令 指示

不对。所有的现代处理器都是流水线的,当早期的指令还在运行时,提取/解码/分支预测都可以在顺序机器中进行。在某些地方,状态可能会被缓存,以防需要恢复

执行速度较慢

不能保证。宽有序机器的IPC可能高于无序机器。不过,建造它并不一定有意义

按非顺序执行指令

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

排序的另一个示例是一个场景,其中有两个整数管道和一个浮点管道。不仅管道的长度可能不同,而且如果依赖关系得到处理,就没有必要说它们必须以设定的顺序映射到传入指令

即使当前指令未完成,它也将在下一步执行 指示只有在下一条指令未执行时,才能执行此操作 取决于当前指令的结果

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

更快的执行速度

也许,取决于约束条件。值得注意的是,编译器将受益于对最佳顺序的理解,如果二进制文件需要对单个文件进行最佳排序,那么它将产生影响 e目标设备或范围广泛的设备