与动态调度相比,编译器指令调度的优势是什么?

时间:2014-02-21 07:44:11

标签: compiler-construction cpu compiler-optimization cpu-architecture vliw

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

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

目前看来,大多数软件指令调度工作都集中在VLIW或简单的CPU上。 GCC wiki's scheduling page对更新gcc的调度算法也没有太大兴趣。

2 个答案:

答案 0 :(得分:3)

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

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

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

  • 照顾实际环境(由于另一个超线程,缓存,算术单元繁忙);
  • 不要强制重新编译每个体系结构升级的代码。

这就是我现在所能想到的。

答案 1 :(得分:0)

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

然后我们可以将执行周期想象成: compile - optimize / reschedule - descrease scale - compile - optimize / reschedule。

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