论文部分内容阅读
近几年来,拥有着强大并行处理能力的GPU(Graphic Process Unit)得到了飞速的发展,从而也使得CPU/GPU的架构越来越流行。目前除了使用显式的编程方法比如NVIDIA提供的CUDA(Compute Unified Device Architecture)以及AMD的Stream SDK外,我们并无其它方式来挖掘GPU的并行处理能力。然而在使用显式编程的过程中我们也会碰到重写源代码的耗时问题跟二进制不兼容性问题。一方面,当前有着很多的计算型密集型程序是采用C、C++或其它高级编程语言编写,而这些应用如果想要使用GPU的并行处理能力来缩短程序的执行时间,那么采用显式编程的方式来修改或是重写整个源代码是不可避免的,而更为糟糕的是有些时候我们根本拿不到程序的源代码;另一方面,即使这些应用的源代码按要求被重写后也会产生二进制不兼容性问题:一个在显式编程环境下编译的可执行程序在不同厂商,哪怕是同一厂商的不同型号GPU上将无法或无法正常运行。为了解决重写源代码的耗时跟二进制不兼容性问题,本文的研究目的是通过扩展自主研发的多源多目标的动态二进制翻译系统Crossbit来提供一种虚拟执行环境,既能有效地解决重写源代码的问题,亦能自动地使用GPU的强大并行处理能力,最终使得部分的计算密集型应用获得5-8倍的性能提升。其原理是通过静态与动态的二进制分析技术从二进制文件中提取潜在的可并行代码,然后通过多面体模型分析将那些没有数据依赖的可并行代码并将其放到GPU上加速,最终将执行结果拷贝到主存的相应位置,而那些不可以放到GPU上执行的部分则采用正常的动态二进制翻译执行。由于计算密集型应用的大部分时间用于计算,因而GPU的加速性能使得这些应用的整体性能得到了很大的提升。本文的主要创新点和意义在于:1)提出一种适合于计算密集型应用的虚拟执行环境,有效地屏蔽了使用显式编程去重写源代码来使用GPU的问题;2)利用二进制分析技术与多面体模型提取二进制可执行程序中的可并行部分,为之后的GPU加载并执行这些可并行部分提供了准确的定位;3)通过挖掘GPU的强大并行处理能力,有效地提高了计算型密集型应用的性能。