论文部分内容阅读
通过同时集成传统通用处理器以及新型协处理器,异构系统具备了多方面的优势:一方面传统通用处理器能够提供通用计算能力,以应对标量计算以及复杂控制任务;另一方面新型协处理器如GPU、Intel Xeon Phi等具备极高的性能功耗比,能够为有高性能计算需求的任务提供加速。因此,异构系统逐渐成为高性能计算领域一种新的发展趋势。然而,随着新型协处理器的引入以及系统规模的扩大,异构系统难以编程的问题也日益突出:首先,异构系统内部多种计算设备各自拥有不同的系统架构、指令集合以及编程模型,这增加了应用开发和调试的难度并降低了代码的可移植性;其次,异构系统规模的扩大导致系统内计算核的数目急剧增加,这对应用算法本身提出了更高要求,为了发挥大规模异构系统的计算潜力,应用必须开发更高的并行度,以利用其中数百万甚至更多的计算核。针对这一问题,本文展开了面向异构系统的并行编程技术研究。论文首先提出了一种面向异构系统的新型编程模型—协作编程模型,将异构系统上应用开发的主体划分为应用专家和计算机专家,并划分了两者的开发任务;基于该模型本文设计了面向异构系统的协作编程框架,为两类开发主体合作开发应用以及应用性能优化提供支持;论文还针对使用框架开发应用时易出现的性能瓶颈进行研究,为框架提供负载均衡和访存等优化方法支持;最后基于协作编程框架实现了千万亿次异构系统上分子动力学应用的模拟,对协作编程模型以及框架的有效性进行了验证。本文的主要创新点如下:1.针对目前异构系统存在的可编程性问题,分析了体系结构及应用两方面的原因,将应用开发的主体划分为应用专家和计算机专家两类,并对两者的开发任务进行了划分,形成了一种新的面向异构系统的编程模型—协作编程模型;基于该理论模型设计了包含应用层、系统结构层以及支撑层三个模块的协作编程框架CPF4H,为应用专家和计算机专家两类用户协同开发应用提供支持,提高了异构系统上应用开发的效率。2.针对使用框架开发应用时存在的任务负载不均衡情况,设计了一种层次化的负载均衡方法。通过在计算节点间采用静态任务分配与动态负载调整结合的方法,在节点内采用基于实测性能的动态任务分配方法,在计算设备内采用基于实测性能的细粒度动态任务分配方法或多计算内核分割方法,实现了整个系统上的负载均衡。3.针对基于框架开发应用时存在的访存问题,设计了一种存储层次感知的访存优化方法。通过设计基于SOA的数据存储方式提高数据局部性,使用SIMD扩展指令增加数据复用以及应对cache失效,利用GPU共享内存实现数据复用以及可替代的原子操作以提高有效带宽,有效缓解了异构系统上并行计算给存储带宽带来的压力。4.为验证协作编程模型以及协作编程框架的有效性,基于CPF4H框架实现了千万亿次异构系统“天河-1A”上的分子动力学模拟应用SWP。测试结果表明,协作编程框架可以有效提高异构系统的可编程性,且最终实现的应用能够发挥异构系统的性能。基于框架实现的SWP模拟在“天河-1A”3000个节点上同时使用CPU和GPU的性能优于在6000个节点上仅使用CPU的性能;模拟在全系统(7000个节点)上通过同时使用CPU和GPU参与热点计算任务,相较于仅使用CPU或GPU取得了1.4倍和1.25倍的加速比。