论文部分内容阅读
EPIC是一种显性并行指令计算体系结构,主要思想是利用编译器和处理器的协同能力来提高指令级并行度。软件流水是开发循环程序指令级并行性的重要编译优化技术。虽然已经在软件流水方面进行了很多的研究工作,但是对于新的体系结构还有许多问题没有得到圆满的解决。本文结合EPIC体系结构特性,对软件流水技术中的循环展开、寄存器分配、开销模型和决策框架等领域进行了研究,并将其中一些成果应于一个开放源码的编译器,取得了比较好的效果。本文的主要贡献包括以下几个方面:(1) 提出了一种寄存器敏感的循环展开因子(RSU)算法。该方法通过寄存器压力的分析,重新计算循环展开因子,避免了过度展开而导致的寄存器压力过大问题,从而尽可能地保证软件流水的顺利进行;(2) 提出了一种堆栈寄存器分配(SRA)算法。该方法将空闲的堆栈寄存器分配给需要静态寄存器的变量,用软件的方法实现了寄存器功能的动态划分,提高了寄存器的利用率,解决了静态通用寄存器不足引起的软件流水失败问题;(3) 提出了面向程序特性的软件流水开销模型。软件流水的性能会受到计算机体系结构、编译算法和程序特性的限制,该模型提出了软件流水是一种有损策略的新观点,并在确定体系结构和编译算法的条件下对软件流水的开销进行了量化分析;(4) 提出了一种基于相关性分析的软件流水开销测试(DBCT)算法以及软件流水的决策框架。该方法根据循环的相关关系特性对软件流水带来的性能潜力进行估计,从而为编译器进行软件流水决策提供支持;(5) 在开放源码的编译器原型ORC上实现了上述算法并对其软件流水部分进行了改进,这些改进已经发布在最新的版本ORC 2.0中。