论文部分内容阅读
由于具有不同的结构特点,使得通用CPU和加速器组成的异构系统能够更有效的处理通用计算任务。典型的加速器有NVIDIA GPU、AMD GPU、Intel XeonPhi协处理器,它们对应的编程模型分别为CUDA、OpenCL和Xeon Phi制导语句。而这些原生的编程模型存在着一些技术局限性:一是CUDA、OpenC L等低级语言编程复杂,优化困难。二是由于加速器和CPU的计算模型存在很大的差异性,移植原程序到加速器上对程序员来说是一项十分艰巨的任务。三是用针对特定硬件平台的语言开发的程序,硬件升级时软件也要升级,而频繁的软件升级将给用户带来巨大负担。四是投资方难以选择,各种加速器都有自己的编程语言,并且彼此之间不兼容,这给用户选择硬件平台和开发语言带来了困扰。OpenACC标准通过添加编译制导语句指示编译器将相关的代码段或循环卸载到加速器上执行,可以克服上文提到的四个技术局限性。本文面向Intel Xeon P hi平台设计并实现了源到源翻译工具OpenACC_JX,能够将带有OpenACC制导语句的C语言程序自动翻译成优化的Intel Offload代码,从而实现了Intel Xeon Phi协处理器对OpenAACC的支持,并大大提高了Xeon Phi协处理器在并行计算方面的编程效率。本文的主要研究内容和成果包括:(1)设计了OpenACC到)Keon Phi平台上并行程序的自动翻译工具,该翻译工具基于LLVM编译框架下的Clang编译器实现,重点扩展了Clang的预处理器、语法分析器和语义分析器来识别OpenACC制导语句以及利用它的重写机制实现代码的转换,并基于Lib Tooling库将翻译工作封装成为工具。本文的翻译工具实现了在Xeon Phi平台上支持OpenACC,并提高了Xeon Phi编程效率。(2)实现了OpenACC制导语句到Offload制导语句的自动映射。根据OpenACC制导语句的分类将映射关系分为任务管理、数据管理、并行性管理三部分的映射。(3)为了保证翻译后的Offload代码的性能,在原有设计的源到源翻译系统中实现了两种优化技术,分别为数据传输优化和向量化优化。其中采取数据传输优化策略是因为对于很多应用,处理器之间的通信是并行程序执行时重要的时间开销来源,降低数据传输操作带来的开销对于提高程序整体性能有着重要作用;采取向量化优化策略是为了能够利用Xeon Phi的向量处理单元进行批量计算,从而提高计算速度。本文采用NPB测试集对OpenACC_JX翻译工具进行了性能评测。实验结果表明,OpenACC_JX翻译工具翻译而成的Offload代码的性能对于三种问题规模Class A, ClassB, Class C在平均情况下分别能够达到手写代码性能的74%,76%,80%。