论文部分内容阅读
动态二进制翻译(Dynamic Binary Translation, DBT)是一个在运行时将一种可执行代码翻译到另一种可执行代码的过程,并且经过翻译与优化的代码将被立即放在目标平台上运行。在很多领域它已被证明是一个非常重要的技术,比如避免在不同平台之间的代码移植所需要的代码重写的工作,优化本地的二进制代码以提高系统的性能,降低硬件的复杂度,提高能源利用效率以及为应用程序提供动态分析等。然而由翻译过程的开销以及翻译后的代码在目标平台上运行的开销组成的系统开销使得动态二进制翻译系统的性能非常差,这个问题一直困扰着很多研究者。于此同时,随着具有强大运算能力的图形处理器(Graphic Processing Units, GPUs)具有可编程功能,很多研究者开始将其当做用于加速通用程序的协处理器。事实上,在很多情况下将通用程序的部分代码放到图形硬件上运行将比其直接在传统CPU上运行获得的效果更好。然而,当前的GPU编程环境都是基于显示编程的,这使得对它们的利用变得困难。于此同时,GPU还不能直接执行通用程序的可执行代码。为了发挥DBT与GPU的优点同时摒弃它们的缺点,本文提出了一个虚拟执行环境GXBIT。它可将通用程序的可执行代码自动、透明、高效地运行在CPU/GPU平台上。GXBIT是建立在动态二进制翻译器CrossBit基础上的。GXBIT采用两遍执行模式来解决DBT的高开销问题,它将一些耗时较多的任务,比如信息收集、热块提取与分析、代码翻译等,放在初始阶段运行,这样在以后的运行阶段,系统的性能就会明显提升。在介绍GXBIT的实现之前,为了验证两遍执行模式的正确性与可行性,文章首先实现了一个在单独CPU结构下的两遍运行框架SINOF。在SINOF框架下,其第一遍执行是为了收集源可执行程序的在目标平台上对应的可执行代码及其执行信息,然后将经过优化的目标代码及其信相关信息加以保存,以利于以后阶段的运行。依据SINOF的验证结果,GXBIT的第一阶段负责收集二进制顺序代码中的热块及其相关信息,然后生成可以在CPU/GPU上执行的混合代码,为以后的执行做准备。值得一提的是,该虚拟执行环境对那些需要反复运行的计算密集型的程序非常有效。总体而言,本文的贡献点有以下几个方面:1.本文将动态二进制翻译技术与GPU相结合,提出了一个基于两遍执行模式的虚拟执行环境GXBIT。GXIBT可以在不需要源代码的情况下对通用程序的可执行二进制代码进行加速。该虚拟执行环境是建立在CPU/GPU异构平台上的,它充分发挥了动态二进制翻译技术的平台无关性与GPU的高性能的优点,使得以二进制形式存在的通用程序在该虚拟执行环境下自动、透明、高效地运行。2.为了验证GXBIT虚拟执行环境中所使用的两遍执行模式的可行性,本文首先设计与实现了一种在单独CPU平台上运行的适合于动态二进制翻译的静态优化架构SINOF。该框架能够有效地屏蔽动态二进制翻译过程中用于优化过程的信息收集所带来的开销,以及优化策略的开销,显著提高了动态二进制翻译的性能。3.为GXBIT引进了一种中间语言GVInst,该中间语言弥补了在CPU上顺序执行的代码与在GPU上并行执行代码之间的鸿沟,促进了二者之间的转换。4.为了协调CPU与GPU,并使得它们能够发挥各自的性能,文中提出了一系列的解决方案,比如CPU内存与GPU显存之间的数据传递机制,CPU与GPU之间的同步机制,将可在CPU上执行的顺序代码翻译到可在GPU上执行的并行代码的翻译机制等。