论文部分内容阅读
流处理器以其强大的计算能力、较低的功耗和灵活的可编程性,成为当前高效能计算系统定制加速部件的主要选择之一,已成功运用于2008年TOP500排名第一的IBM Roadrunner系统。然而,原本面向多媒体领域开发的流编译器,在处理数据依赖关系更加复杂的科学计算应用时,表现出较差的适应性,对流存储系统特征的利用十分有限,致使存储墙问题更为严重,成为制约其性能发挥的瓶颈。因此,研究面向科学计算流处理器的编译存储优化技术成为释放流处理器强大计算能力,有效缓解存储墙问题的关键。本文重点研究了如何通过编译优化技术来改善流处理器的存储性能。流存储系统包括三级存储层次:本地寄存器文件(Local Register File,简称LRF)、流寄存器文件(Stream Register File,简称SRF)和片外存储系统。优化片上存储器的局部性、隐藏访存延迟和避免片上存储器溢出,能有效改进流处理器性能。本文在分析了大量具有不同性能特征的科学计算流程序的访存行为后,面向科学计算从优化片上存储器局部性、隐藏访存延迟和避免SRF溢出等方面进行了深入的研究。本文的主要工作和创新如下:1.当前流编译器通过簇间通信机制发掘簇间记录复用,然而大量簇间通信的引入严重影响了程序性能。本文提出了流转置方法ST,该方法根据程序的复用信息重新组织数据,将簇间记录复用等价地转换为同一运算簇内的记录复用。同时,为避免因数据重组导致的存储体冲突,该方法给出了发生存储体冲突的判别定理,并采用循环分割技术避免冲突发生。该方法在不引入任何簇间通信且不影响流访存性能的同时,有效发掘了ALU簇间记录复用,改进了LRF的局部性。与当前流编译器的簇间复用发掘方法相比,ST方法获得了高达46%的性能提升。2.发掘SRF中的流复用能有效改进SRF的局部性。据我们所知,迄今为止还没有现成的方法,能够自动发掘流程序中起始或终止边界为变量的变界流之间的复用,只能依靠程序员手工完成。本文提出了定界流替换方法CBSR,该方法是国际上第一个自动发掘变界流完整复用的方法,由一系列创新性的理论、机制和算法组成,包括首次提出的流复用识别理论、首次定义并构建的用于描述流复用信息的流复用图(SRG)、基于SRG发掘流完整复用的程序变换算法和SRF压力评估与缓解算法等。CBSR方法有效发掘了变界流之间的完整复用,避免了数据的重复加载,改进了SRF局部性,提升了程序性能。与当前流编译器的流调度方法相比,CBSR方法获得了1.14~2.78的性能加速比。3.存在于流的访存子序列之间的流部分复用,是流编程模型所特有的一类复用。当前流编译器无法发掘变界流之间的部分复用,面向传统体系结构的编译技术中也没有可借鉴的方法。本文对CBSR方法进行扩展,首次提出了发掘流部分复用的E-CBSR方法,该方法包括:定义并量化流部分复用;提出并证明它的识别与判定理论;改进SRG以描述该类复用;扩展CBSR方法中的程序变换算法使其能够处理流部分复用。该方法同时发掘了变界流之间的完整和部分复用,消除了流的冗余加载,改进了SRF的局部性。与当前流编译器的流调度方法相比,E-CBSR方法获得了1.27~2.54的性能加速比。4.数据预取是隐藏访存延迟的一种有效方法,但资源分配冲突会导致预取失效。本文提出了一种基于SRG的SRF资源分配避免算法SRFACA。与已有SRF资源分配算法相比,该算法在SRF预取开销更小的同时,避免了SRF资源分配冲突,增加了预取的有效性。实验结果表明,在CBSR/E-CBSR方法优化后的流程序基础之上,SRFACA算法进一步获得了高达1.88的性能加速比。5. SRF溢出将导致流复用和流预取带来的好处尽失。当前流编译器采用循环分段算法避免SRF的溢出,却破坏了程序中跨迭代流复用的发掘和流预取。本文提出了基于SRG的循环分块算法。与当前流循环分段技术相比,该算法可给出更加精确的SRF空间需求,自动确定合适的块大小,在有效避免SRF溢出的同时,确保跨迭代流复用的发掘和流预取。与循环分段算法相比,该算法获得了1.12~2.61的性能加速比。