论文部分内容阅读
随着多媒体应用在计算领域中的重要性日趋显著,为了在多媒体应用中获得更为出色的性能表现,几乎所有的通用处理器生产厂商都为他们的处理器集成了一个或多个多媒体扩展部件。由于多媒体应用的核心代码往往具有高度的可并行性,并且对计算精度的要求远低于通用处理器所提供的计算能力,因此这些多媒体扩展部件往往以通用处理器已有的计算资源为基础,通过一系列整合后,以向量部件的形式出现。而相应的扩展指令集则以单指令多数据(Single Instruction Multi Data)的向量指令为主,我们将这些指令称作“SIMD多媒体扩展指令”,简称“SIMD指令”,同时,我们称这些多媒体扩展部件为SIMD部件。 目前,程序员只能通过编译器有限的支持来使用各种SIMD指令,例如通过嵌入汇编代码,或者使用编译器提供的内部函数(intrinsic function)等手段在代码中显式地使用SIMD部件的指定计算功能。这些手段的使用要求程序员深入了解SIMD部件的体系结构,并且具备基本的向量化程序开发能力,大大提高了多媒体程序开发的难度。一方面,由于各种处理器中集成的SIMD部件及相关的SIMD指令各不相同,针对不同SIMD部件开发的代码也不完全相同,从而导致了代码的可重用程度较低。为了降低开发的难度,提高代码的可重用程度,我们必须加强编译器对SIMD扩展指令集的支持,使之能够利用SIMD指令自动优化高级语言编写的多媒体代码,编译器的这一功能被称作SIMD编译优化。 虽然,SIMD编译优化技术隶属于向量化技术,然而,由于通用处理器中集成的多媒体部件与传统的向量处理器之间存在着显著的差异,致使传统的向量化技术无法被简单地移植于SIMD编译优化中。迄今为止,只有少数商业编译器(如ICC8.0)能够对个别多媒体程序实施有效地SIMD优化。而在学术界,针对SIMD编译的研究往往过于理想化,而无法提高真实多媒体应用的性能。 本文阐述了将传统的向量化方法运用于SIMD编译优化中的可能性与潜在的障碍。并以此为基础,展开了SIMD编译优化技术的研究,提出了多项能够显著提高代码性能的编译优化技术。并以开放源代码(Open Source)编译器Gcc3.5,以及并行编译平台Aggassiz为基础实现了SIMD优化编译的原型系统。其中,主要的工作与创新包括: 1.详细研究了当前常见的多媒体应用的核心代码以及流行的SIMD部件的体系结构,指出了SIMD多媒体编译优化技术与传统向量化方法的共同点与重要区别。 2.针对向量化技术中常用的位宽分析无法适应SIMD编译的需求,提出了基于双向数据流分析的有效位分析方法,为SIMD编译优化控制数据宽度、提高并行度提供了必要的分析基础。 3.由于SIMD微处理器体系结构的多媒体扩展与高级语言中的整数扩展规则有不协调之处,严重影响了程序的执行效率。为此,我们提出溢出控制方法,分别在饱和计算模式和封闭计算模式上解决了这一问题。 4.我们针对SIMD扩展,解决了一阶线性递归饱和计算的向量化问题,避免了在向量部件与串行部件之间交换数组,提高了计算效率。此外我们还提出了周期常量的识别以及变化周期的求解方法,对存在周期常量的多媒体应用程序扩大了可向量化范围。 5.以Gcc3.5与Aggassiz编译系统为基础实现了两个编译原型系统,并利用这两个原型系统对本文提出的分析与优化技术进行了正确性验证与优化效果分析。 综合来说,本文以提高SIMD多媒体编译优化能力为出发点,对其中若干关键技术进行深入研究,着重讨论了如何提高分析精度以适应SIMD编译需求,以及如何在饱和模式下开发潜在并行性的方法等问题。并通过实验验证了研究成果的正确性与有效性。