论文部分内容阅读
随着多媒体应用程序对处理器处理能力的要求越来越高,大部分处理器生产厂商都在处理器内部都提供了专门用于多媒体处理的指令,这些指令被称为SIMD指令。只要把操作数打包存放在寄存器或内存中的,就可以利用这些SIMD指令并发地执行若干次运算操作。自从1994年HP公司首次将MAX-1指令集引入了通用芯片PA-7100LC,SIMD体系结构就成为了通用芯片提高多媒体应用程序性能的重要手段。AMD公司在他们的CPU中加入了3DNow!和对SSE、SSE2的支持,Intel公司则于2004年在他们的Pentium4Prescott芯片中加入了最新的SSE3扩展。与传统指令相比,SIMD指令能大幅度提高多媒体应用程序的性能。因此,软件开发人员对SIMD指令集表现出极大的兴趣,越来越多的应用程序针对SIMD指令集做了优化。尽管基于寄存器的SIMD构架已经面世十年,能生成SIMD指令的商用编译器很少,还有一些处于研究阶段的支持SIMD自动优化的编译器,他们往往只能识别相当明显的可并行代码,而且只对少数几个测试程序有比较好的效果。对于软件开发人员来说,这意味着他们通常必须通过内嵌汇编和内部函数(Intrinsics)的形式来利用SIMD指令来提高软件的性能,这就要求开发人员必须十分熟悉相关的SIMD指令。同时,这样的程序也十分依赖于机器,降低了程序的可移植性。
本文通过在IA32平台上对多媒体测试程序包BerkeleyMultimediaBenchmark(BMW)的分析,找出编译器进行SIMD优化的障碍,提出了数个需要解决的问题,并针对这些问题提出了相应的算法。从实验中也看到,这些算法的确解决了问题,并最终提高了BMW的性能。最后总结分析发掘潜在并行性的经验,以便今后能运用在编译器的优化分析中。