论文部分内容阅读
通用计算图形处理器(GPGPU,General Purpose Computation on GPU)具有较强的计算能力和较大的存储带宽,使得它在高性能计算方面有着CPU无法替代的优势。随着CUDA、OpenCL等异构并行计算架构的出现,GPGPU在编程效率方面得到了一定程度的提升,进而在通用计算的大道上迈进了大大的一步。尽管如此,编写高性能的GPU程序仍然是一项非常繁琐的工作,并且对程序员有很高要求:一方面,程序员需要分析特定应用的计算模式和访存模式等程序特征;另一方面,程序员需要掌握特定GPU的计算核心和存储系统等硬件特征。除此之外,GPU硬件的升级使得原有的高效的GPU程序变得低效,缺乏有效的兼容性机制。OpenHMPP+(开放的异构多核并行编程)是一种基于制导语句的编程模型,它解决了GPU编程的复杂性,但程序性能无法得到保证。本文提出了源到源翻译器框架HMPPCompiler,能够将带有OpenHMPP+制导语句的C语言自动翻译成优化的CUDA代码,从而大大提高了GPU在通用计算方面的编程效率。
本文的主要研究成果包括:(1)设计了OpenHMPP+到CUDA的源到源翻译系统。该系统需要集成到Cetus编译器框架内部,借助Cetus的内部表示完成源到源的翻译。该系统的内部组件包括HMPP词法分析器、并行循环探测器、CUDA代码生成器。其中CUDA代码生成器为核心组件,它包含了Host端CUDA代码生成和CUDA核心代码生成两个模块。(2)实现了OpenHMPP+串行程序到CUDA并行程序的自动翻译。源到源翻译的核心思想是将串行代码中的for循环映射为CUDA线程。在实现过程中,提出了最优循环搜索算法,并将算法得出的最优循环映射为CUDA线程,用于获得更好的性能。(3)对源到源翻译系统进行了改进。在原有设计的基础之上,对源到源翻译系统实施了改进,用于生成更加高效的CUDA代码,这些改进策略主要包括存储分配、并行性挖掘、CUDA配置参数的选择。在存储分配方面,主要考虑了全局存储器的合并访问,共享存储器和寄存器的合理使用;在并行性挖掘方面,主要考虑了循环展开、循环切片、循环展开;在CUDA配置参数选择方面,提出了最优配置参数的选择机制。首先,编译器通过参数搜索空间精简算法生成包含候选参数集的CUDA kernel模板程序;然后,运行CUDA kernel模板程序,并选出最优的CUDA参数配置。
本文采用完整的Rodinia基准测试程序包对HMPPCompiler框架进行了性能评测。通过实验分析,HMPPCompiler生成的代码的性能能够达到手写代码性能的70%~84%。