如今,超标量 RISC cpu 通常支持乱序执行,具有分支预测和推测执行。他们动态地安排工作。
与乱序 CPU 的动态调度相比,编译器指令调度的优势是什么?编译时静态调度对于无序 CPU 是否重要,还是仅对于简单的有序 CPU 重要?
目前似乎大多数软件指令调度工作都集中在 VLIW 或简单的 CPU 上。GCC wiki 的调度页面也对更新 gcc 的调度算法不太感兴趣。
如今,超标量 RISC cpu 通常支持乱序执行,具有分支预测和推测执行。他们动态地安排工作。
与乱序 CPU 的动态调度相比,编译器指令调度的优势是什么?编译时静态调度对于无序 CPU 是否重要,还是仅对于简单的有序 CPU 重要?
目前似乎大多数软件指令调度工作都集中在 VLIW 或简单的 CPU 上。GCC wiki 的调度页面也对更新 gcc 的调度算法不太感兴趣。
静态(编译器)调度的优点:
动态(处理器调度)的优势:
这就是我现在能想到的。
首先,我应该注意当前的 RISC 架构首先编译然后重新调度,因为“高级”汇编命令被编译成更小的 RISC 命令。至少对于 x86/x64 架构是这样。
那么我们可以想象一个执行周期为:编译-优化/重新调度-减小规模-编译-优化/重新调度。
这样就回答了这个问题,编译器对应用程序的可见性范围更广,因此它主要针对宏观级别(应用程序命令块)进行优化,而处理器主要针对微观级别(RISC命令块)进行优化。