计算机体系结构中全局指令调度实现


全局指令调度的实现是一种称为跟踪调度的技术。跟踪调度最初应用于为耶鲁大学实验性VLIW机器ELI-512开发的Bulldog编译器(Fisher等人,1984),随后应用于商用TRACE系列VLIW机器的跟踪调度编译器(Colwell等人,1987)。

最近发表的一种新的全局调度技术是FRGS(有限资源全局调度),由IBM为VLIW和超标量处理器开发并进行了实验性实现(Moon和Ebcioglu,1992,Moon等人,1993)。

跟踪调度

这种技术起源于大多数指令调度技术,即水平微代码机器的调度(Fisher,1981)。随后,跟踪调度被重新实现为VLIW机器的指令调度(Fisher等人,1984)。

跟踪调度基于跟踪的概念。跟踪是循环中的执行路径,因此跟踪可以包含条件分支和连接点。如图(a)所示,它显示了在流图中识别的跟踪。

跟踪调度器首先识别程序中的跟踪,然后选择最可能的跟踪并将其作为一个实体进行调度。然后它选择下一个最可能的跟踪并重复此过程,直到整个程序都被调度,如图(b) - (d)所示。

在选择最可能的跟踪时,编译器使用动态分支预测以及程序员提供的提示。如图(a)所示,假设跟踪编号3的概率最高,因此它将首先被调度,如图(b)所示。

每个跟踪都被调度,就好像它是一个单独的基本块一样,如图(c)所示。在这种情况下,调度是全局的,在调度期间,独立指令可以跨条件分支或连接点移动。簿记代码也将被生成并放置到条件分支和连接点的相应路径中,如图(d)所示。

完成跟踪编号3的调度后,选择下一个最可能的跟踪,例如跟踪编号4,然后调度此跟踪,依此类推。

FRGS(有限资源全局调度)

这种全局调度方法旨在避免现有VLIW编译器因编译时间长和代码膨胀而导致的严重效率问题(Moon和Ebcioglu,1992)。它可以应用于VLIW和超标量处理器,这样,此方法首先提供超标量代码,并在需要时,在第二步中可以通过局部转换获得VLIW代码。

有16个通用ALU,其中8个能够执行内存加载/存储操作。同一单元的ALU和加载/存储操作是互斥的。有128个通用寄存器和16个条件码寄存器。

FRGS是一种相当复杂的方法。首先,在每个周期,FRGS选择所有可用于调度的操作(所谓的贪婪选择)。软件窗口用于限制所需的计算量。然后使用简单的启发式方法从可用列表中选择一个操作进行下一个调度,以尽可能地利用硬件资源。

更新于:2021年7月20日

537 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.