论文部分内容阅读
异构系统以峰值性能高、能效比高等诸多优势,逐渐成为高性能计算领域的热点发展方向。然而,由于异构系统同时集成了通用CPU和专用加速器等多种部件,各部件往往拥有不同的系统架构和指令集,并采用分离的存储空间,这对异构系统可编程性、异构性能优化提出了挑战;同时随着高性能计算机系统的规模不断扩大,异构系统的可靠性问题也日益突出并亟待解决。针对这些问题,本文开展了面向异构系统的编程模型、优化方法和容错方法三个方面的研究。论文首先面向MIC(Many Integrated Cores,众核融合架构)平台提出了以加速器为中心的异构编程模型,程序员对异构系统采用以加速器为视角,异构程序采用加速器驱动的方法,将不规则计算和MPI通信通过远程过程调用的方法卸载到CPU端,基于该模型给出了编程接口和运行时系统,简化了异构编程;论文还针对使用以加速器为中心编程时会出现加速器空转的问题进行研究,在运行时系统中实现负载均衡和任务调度等优化技术;同时关于异构系统稳定运行的问题,设计了基于内存双倍份的应用级检查点异构容错方法,重点解决了以加速器为中心编程带来的数据在CPU和加速器间分布问题;最后基于以加速器中心编程实现了异构Linpack,对编程模型、运行时系统以及优化方法的有效性进行了验证。本文的主要创新点包括:1.本课题针对当前异构系统采用的任务卸载编程模型存在的数据在加速器和CPU间频繁传输的问题,利用MIC处理器的自主计算能力,提出了以加速器为中心的编程思想,即将MIC处理器作为主机使用,此时CPU只是作为不规则计算的加速器;从顶层任务划分开始就以加速器数据的存储、CPU和加速器间通信为首要考虑因素,尽可能使数据驻留在加速器的内存中,使得数据更接近计算,从而减少数据频繁通信,以充分发挥加速器的性能。基于该编程思想设计了加速器驱动的任务卸载和MPI通信两个层次的编程接口,提高了编程效率,并给出了CPU-MIC系统的运行时系统,形成一种新的以加速器为中心的异构并行系统编程模型r Offload,提高了异构系统编程和运行效率。2.为解决以加速器为中心编程时加速器向CPU卸载任务存在加速器空转的问题,基于性能模型提出各个计算部件重叠计算的任务划分算法,确定任务平衡划分的比例,使各子划分的执行时间差异尽可能小,以达到均衡在各计算单元上的执行时间的目的,避免等待发生;同时根据计算任务DAG图设计加速器为中心的异构调度算法,在满足依赖关系约束的基础上,对计算资源中的不同任务进行时间和空间上的排序,以减少总任务的执行时间。3.为解决异构系统的可靠性问题,尤其针对采用加速器为中心编程后数据主要驻留在加速器上的容错新挑战,设计了基于内存双备份的应用级检查点异构容错方法,给出了检查点在加速器和CPU上的保存方法,能够很好的解决数据在CPU和MIC上分布问题;实现对检查点保存和恢复开销的优化,满足了大规模系统上的扩展性要求;在以加速器为中心编程框架下给出了编程接口,简化了容错编程。4.为验证以加速器为中心编程模型以及运行时系统的有效性,在CPU-MIC系统上设计并实现了以加速为中心的异构LU分解程序。测试结果表明,采用以加速器为中心编程方法可以有效减少数据在CPU和加速器间的传输,且最终的实现能发挥异构系统的性能。以加速器为中心实现的Linpack在”天河二号“64个节点上的性能优于CPU为中心的实现。在单节点上性能提高了7%,扩展到64节点时,性能优势更加明显,达到12%。同时,通过我们的容错方法的使用,极大的提高了异构应用程序的稳定运行时间,而且检查点容错对程序的正常运行影响较小。