什么是基本块调度?
基本块调度是一种简洁但效率最低的代码调度技术。因此,只有基本块内的指令才能重新排序。结果,可行的加速取决于真实的数据和控制依赖性。基本块调度器通常用于轻度和中度并行的ILP处理器,例如流水线和早期超标量处理器。
大多数用于ILP处理器的基本块调度器都属于列表调度器类别,例如为MIPS处理器、Sparc处理器、RS/6000、HP精密架构和DEC α 21064开发的那些调度器(Kerns和Eggers,1993,Gibbons和Muchnick,1986)。
列表调度器可用于许多上下文,包括在运筹学中调度装配线的任务,在计算中调度多处理器的任务,调度水平微程序机器的微代码,或者像在这种情况下一样,调度ILP处理器的指令。
用于基本块调度的列表调度器
列表调度器是基于列表的,并分步骤调度项目。在每个步骤中,它首先使用选择规则生成可用于下一个调度的项目列表,然后使用第二个规则创建下一个调度的最佳选项,如图所示。在每个步骤中,都会调度一个或多个元素。
就用于基本块调度的列表调度器而言,已调度的元素是指令。关于每个步骤中各种已调度的指令,流水线和超标量处理器的代码调度器一次交付一条已调度的指令。
**选择规则**选择一组可用于调度的指令。符合条件的指令是无依赖性的,也就是说,它们在DDG中没有前驱,并且可用的硬件资源。
**选择“最佳调度”的规则**可以查看最有可能与后续指令产生互锁的指令。此规则通常是启发式方法。
大多数调度器通过在DDG中寻找关键执行路径并选择与关键路径相关的特定节点进行调度来执行这些启发式方法。但是,**“关键路径”**可以用各种方法解释,并且可以选择基于偏好或标准。
**基于优先级的调度器**根据所选择的启发式方法为每个符合条件的指令计算优先级值。在流水线和超标量处理器基本块列表调度器的方法中,“符合条件节点”的“优先级值”通常隐式地表示为从正在应用的节点到基本块末尾的一致路径的长度。
计算所有优先级值后,通过选择具有最大优先级值的节点来做出最佳选择。当多个节点具有相同的最高优先级值时,需要一个打破平局的规则。
相反,**基于标准的调度器**按给定的顺序对要调度的项目使用一组选定的标准。“最佳选择”是通过发现满足最高可用排名标准的第一个项目来构建的。调度器还必须为打破平局提供额外的标准或规则。