论文部分内容阅读
近年来,由多核CPU和众核加速器而构成的新型异构众核系统以其高性能、低能耗和低成本等优势在高性能计算领域得到了迅猛发展,基于异构众核系统而开发的并行应用也日益增多。但由于异构众核系统复杂的体系结构以及简单易用的异构协同并行编程模型的缺乏,导致绝大部分并行应用仅能有效利用异构众核系统中某一类计算设备,这造成了异构众核系统中其它计算设备的浪费,难以充分发挥异构众核系统的性能优势。因此,如何充分利用异构众核系统中所有可用的计算设备来高效协同执行并行应用已成为一个迫切需要解决的课题。异构协同并行计算旨在充分利用异构众核系统中多个任意类型的计算设备来相互协作、并行地执行指定的计算任务,以提高异构众核系统的计算性能。然而异构系统中不同类型的计算设备具有完全不同的体系结构、指令集、计算能力、存储能力和通信能力等,这给异构协同并行计算带来了极大的挑战。本文围绕面向新型异构众核系统的多设备协同并行计算的关键技术展开了较为深入的分析和研究。本文的研究工作主要集中在以下四个方面:(1)为降低异构协同并行编程难度、减轻编程负担并高效支持基于异构众核系统的数据级并行应用的多设备协同并行计算,提出了一个基于指导语句的异构协同并行编程框架(简称Open HCPP)。通过扩展广为使用的Open MP给编程人员提供了一种更为简单灵活的方式来充分利用异构众核系统中所有可用的计算设备来协同执行数据级并行应用。借助于Open HCPP提供的源到源的编译器和运行时系统,编程人员无须关心如何在参与协同并行计算的各设备间高效地划分计算任务和传输数据。实验结果表明采用Open HCPP能有效提高基于异构众核系统的数据级并行应用的开发效率和执行效率。(2)为能在异构众核系统中利用多个计算设备合理高效地协同执行数据级并行应用,提出了两种高效支持异构协同并行计算的设备间动态任务调度策略,包括反馈式动态弹性任务调度策略和抢占式动态弹性任务调度策略。前者较适合于计算和数据均匀分布的且计算内核仅需执行一次或少量重复执行的数据级并行应用,而后者较适合于计算和数据非均匀分布的且/或计算内核需大量重复执行的数据级并行应用。实验结果表明,采用本文提出的设备间动态任务调度策略不仅能让各计算设备得到充分利用、设备之间达到较好的负载均衡,而且能避免频繁的设备初始化、kernel启动、设备间数据传输和设备间同步所带来的开销。(3)鉴于异构众核系统中设备间通信容易成为某些数据级并行应用的多设备协同并行计算的性能瓶颈,为有效隐藏、减少或避免设备间通信开销,提出了一种增量式数据传输方法和一种基于软件流水线的通信优化方法。前者基于反馈式动态弹性任务调度,充分考虑了如何避免设备间重复冗余的数据传输,实现了能有效避免设备间重复传输的反馈式动态任务调度;后者基于反馈式动态弹性任务调度和抢占式动态弹性任务调度,充分考虑了如何尽可能地重叠加速器端计算内核执行与主机-加速器间数据传输,实现了能有效隐藏设备间通信开销的反馈式动态弹性任务调度和抢占式动态弹性任务调度。实验结果表明,采用本文提出的设备间通信优化方法能显著改进某些存在较大设备间通信开销的数据级并行应用的多设备协同并行计算的整体性能。(4)综合应用所提出的异构协同并行编程框架、设备间任务调度策略和设备间通信优化方法,实现了一个复杂应用–求解子集和问题的并行二表算法–的高效CPU-GPU协同并行计算。鉴于并行二表算法的生成阶段的异构协同并行计算中易出现设备间负载不均衡且存在较大设备间通信开销,在生成阶段的CPU-GPU协同并行执行中采用了避免设备间重复传输的反馈式动态任务调度策略。针对并行二表算法的剪块与搜索阶段存在计算和数据分布不均匀的问题,在剪块与搜索阶段的CPU-GPU协同并行执行中采用了抢占式动态弹性任务调度策略。实验结果表明本文提出的求解子集和问题的并行二表算法的CPU-GPU协同并行实现显著优于CPU/GPU-only并行实现,这得益于CPU和GPU的充分利用、CPU-GPU间良好的负载均衡以及CPU-GPU间较小的通信开销。