流水线调度与分支预测技术解析
在计算机体系结构中,流水线调度、分支预测以及内存层次结构等技术对于提升计算机性能至关重要。下面将详细介绍这些技术的原理和应用。
动态调度的优势
动态调度在计算机编程中具有显著优势。某些调度方面在编译时难以预测,例如缓存未命中情况。当知道实际延迟时,动态调度能更好地安排任务。高度流水线化的调度通常需要大量寄存器,一般机器在 5 位指令字段中只有 32 个寄存器名,但通过运行时寄存器重命名的乱序执行,可以使用几百个实际寄存器,而只需几个静态名称。此外,最优静态调度依赖于了解硬件将达到的精确流水线状态,这在实践中有时难以确定。最后,动态调度不需要为同一指令集的每个不同实现重新编译程序。
分支预测
在许多浮点程序中,基本块较长,指令是长延迟浮点运算,分支是非常可预测的循环退出条件。此时的问题是安排长延迟指令的调度。但在许多程序(如编译器、操作系统、窗口系统、文字处理器)中,基本块较短,指令是快速整数运算,分支更难预测。这里的主要问题是尽快获取指令以便进行解码和执行。
例如,在图 20.11 中展示了比较、分支和加法指令的流水线阶段。在分支执行之前,后续指令的取指操作无法进行,因为要取的地址未知。假设超标量机器一次可以发出 4 条指令,那么在分支被取出后等待 3 个周期才能取出加法指令,这会浪费 11 个指令发布槽(3×4 减去分支占用的槽)。
为了解决这个问题,一些机器会在分支之后立即获取指令。如果分支未被采用,这些获取和解码的指令可以立即使用。只有当分支被采用时,才会出现指令槽停滞的情况。其他机器假设分支会被采用,并开始在目标地址获取指令;如果分支落空,则会出现停滞。有些机器甚至会同时从两个地