4

如今,超标量 RISC cpu 通常支持乱序执行,具有分支预测和推测执行。他们动态地安排工作。

与乱序 CPU 的动态调度相比,编译器指令调度的优势是什么?编译时静态调度对于无序 CPU 是否重要,还是仅对于简单的有序 CPU 重要?

目前似乎大多数软件指令调度工作都集中在 VLIW 或简单的 CPU 上。GCC wiki 的调度页面也对更新 gcc 的调度算法不太感兴趣。

4

2 回答 2

3

静态(编译器)调度的优点:

  • 没有时间限制,因此可以使用非常复杂的算法;
  • 指令窗口没有限制。这允许例如用整个函数调用循环交换指令。

动态(处理器调度)的优势:

  • 注意实际环境(缓存、运算单元由于另一个超线程而忙碌);
  • 不要强制为每次架构升级重新编译代码。

这就是我现在能想到的。

于 2014-02-21T07:52:33.413 回答
0

首先,我应该注意当前的 RISC 架构首先编译然后重新调度,因为“高级”汇编命令被编译成更小的 RISC 命令。至少对于 x86/x64 架构是这样。

那么我们可以想象一个执行周期为:编译-优化/重新调度-减小规模-编译-优化/重新调度。

这样就回答了这个问题,编译器对应用程序的可见性范围更广,因此它主要针对宏观级别(应用程序命令块)进行优化,而处理器主要针对微观级别(RISC命令块)进行优化。

于 2014-02-21T07:53:51.013 回答