静态调度OOO处理器

问题描述 投票:0回答:1

LLVM MISched指令调度程序使用了处理器功能单元,管线和等待时间的声明式TableGen描述。想象一下,尝试从这些声明中确定与《英特尔优化参考手册》中的编码准则等效的方法。

广义上讲,静态调度OOO处理器的目标/技术是什么?对于OOO处理器,何时将指令A安排在B之前,何时将A计划在B之后?

超标量处理器一次可以执行多个指令。有序处理器只会考虑原始顺序的指令。乱序(OOO)处理器可以乱序执行指令,然后按顺序提交结果。对于这个问题,猜测并不重要,但是我假设这些处理器是流水线的。考虑一下A53(按顺序)和Haswell(OOO)。

OOO处理器接下来将执行哪一条指令是处理器在运行时做出的调度决策。因此,这通常称为动态调度。顺序处理器执行哪条指令由编译器在编译程序时决定。因此,这通常称为静态调度。

但是,编译器也会静态地针对/计划OOO处理器。在有序和OOO两种情况下,编译器都可以查看较大的指令窗口。编译器必须处理寄存器压力;在这两种情况下,编译器都希望保持功能单元繁忙。 OOO处理器通常还可以重命名寄存器,从而降低寄存器压力。

鉴于OOO处理器动态地调度指令,提前编译器应如何做才能帮助这一点?

llvm compiler-optimization llvm-codegen
1个回答
0
投票

您通常是正确的,但是编译时调度仍可以稍微提高执行速度。发生这种情况是因为编译器可以以更优化的方式重新排列指令以加快解码速度(x86的旧版本只有在序列指定了某些约束的情况下才可以并行解码多个指令),或者将它们更紧密地打包在处理器的指令缓冲区中。引用罗伯特·摩根(Robert Morgan)的“构建优化的编译器”:

The compiler should schedule the insns as if the processor were
not an out-of-order execution processor.  The more effective this
schedule is, the larger the size of the effective insns buffer.

在实践中,胜利通常很小(百分之几)。

© www.soinside.com 2019 - 2024. All rights reserved.