论文部分内容阅读
随着GPU体系结构的发展和GPU编程模型的成熟,越来越多的应用程序采用了高性能GPU架构来开发。NVIDIA公司提出的CUDA编程模型,已经在业界取得了巨大成功,引起了学者们的广泛研究。同时,微体系结构的设计人员使用详细的模拟器代替相应的硬件芯片,来验证芯片在程序性能和能耗方面的设计。然而,尽管CUDA程序在详细的模拟器与它所模拟的真实硬件芯片上运行的性能相近,但是在模拟器环境下,使用测试程序来评价芯片的设计,需要漫长的执行时间。基于行为特征剖析的CUDA程序合成方法为解决模拟器环境下测试程序执行时间漫长的问题提供了有效的手段。在体系结构的性能研究中,为了测试某个芯片的性能或者能耗,体系结构研究人员使用了具有诸多行为特征的测试程序,例如指令混合比例、线程数量、控制流中的跳转概率等,而对于程序的功能不在考虑之列。在CUDA程序合成系统中,使用了从指令级别到线程级别的许多行为特征作为CUDA程序源代码生成器的输入,得到一个合成后的替代程序的内核。尽管合成后的替代程序与原始的程序在使用功能上和动态指令数上是不同的,它却与原始的程序有着非常接近的性能。这是因为,CUDA程序合成的过程中通过扩展GPGPU-Sim模拟器开发了内建的程序剖析工具,以及确定了影响性能的许多重要因素。在生成替代程序后,通过实验比较了合成后的替代程序与原始的程序从指令级别到线程级别的诸多行为特征上的相似性,并采用吞吐率、动态指令数以及运行时间等性能指标来检验CUDA程序合成方法的有效性。使用来自CUDA SDK、Parboil和Rodinia的测试程序的实验结果表明,合成后的替代程序在线程的维度和线程总数上与原始程序完全一致,而在基本块的个数、平均大小、平均后继数量等基本块级别的特征以及静态指令混合比例上,原始程序与合成后的替代程序的保持了较高的相似性。对于所测试的大部分程序,合成后的替代程序的动态指令数和运行时间有了非常明显的减少。在程序整体性能的表现上,所测试的原始程序与合成的替代程序的IPC的误差不到10%。