计算机学院 孙经纬 BA16011009
科学研究的手段可以分为三类,即理论科学、实验科学和计算科学。他们彼此相辅相成地帮助人们认识自然和改造世界。在许多情况下,某一方向的理论基础尚未建立,或者理论模型过于复杂,又或者实验难度大,费用高昂,那么计算的研究方法就成为了主要甚至是唯一的方法。而高性能计算,则是借助大规模的计算设备所产生的强大计算能力来解决各个科学技术领域的难题。
高性能计算在国民经济的各行各业中都有着广泛的应用。例如,在计算材料学、高能物理、凝聚态物理等基础科学研究中,需要借助高性能计算机进行模拟实验,有效减少实验费用和实验风险;在复杂工程、重大装备制造等方面,需要以高性能计算为手段进行模拟与优化设计,缩短研发周期,降低设计成本;在应对重大问题挑战,包括能源短缺、环境污染,气候变化等,高性能计算也在数据分析、模型预测等方面提供了有力的支持。
尽管高性能计算机有着强大的计算能力,但是只有对高性能计算应用进行细致深入的优化,才能尽可能地发挥出高性能计算机的性能。目前对高性能计算应用的优化可以大致分成三个类型:
l 针对物理模型和计算方法的优化:高性能计算领域中求解的计算问题来自各个不同的应用领域。应用领域专家对于计算问题的深入理解和求解方法改进,能够显著的提高计算的效率和效果。完成此类优化工作需要对领域知识有深刻了解,对并行算法和并行程序设计也要有足够了解。并行程序需要根据新的求解方法进行改写或重写。
l 针对硬件平台的优化:硬件平台的发展,使得并行程序必须经过针对硬件特性的优化,才能充分利用高性能计算机上的众多的计算资源。这些硬件的特性包括并行规模、并行粒度、多线程、向量化、各类存储器的容量和访存特点、缓存策略等。研究表明,在不修改高性能应用程序的情况下,简单的使用线程级并行(SMT)技术对大多数高性能应用都能有不同程序的加速。成功的针对硬件优化将使并行程序获得高可扩展性和高计算效率。高可扩展性即并行程序能扩展到成千上万的计算节点上,并且充分使用节点上的多核CPU、异构加速器以及SIMD等指令集并行;高计算效率即并行程序能够发掘数据局部性,减少通信和访存时间。
l 参数配置的优化:并行程序涉及的各个关键软件,例如OpenMP,MPI,编译器,操作系统,还有并行程序自身,都有可调的参数。不同的参数配置将会影响并行程序的性能。许多参数对性能的影响有时没有直接的、简单的经验来评估,因此在参数配置调优时,通常直接采用default配置,或在较小的子集上枚举并选择较优的一组配置。这一类优化往往不需要修改程序代码或者仅需少量的修改。
当优化一个并行程序时,为了达到尽可能高的性能,这三类优化都是需要进行的。通常而言,针对问题模型和求解算法的优化对性能影响最大。例如将一个时间复杂度为O(n2)的算法改进为O(nlogn),其效果十分显著。针对硬件平台的优化若能充分利用所有硬件资源,相对串行程序可以获得数十数百甚至上千倍的加速,其上限视硬件规格而定。参数配置的优化的影响相对较小一些,但在前两类优化完成后,或者在不允许前两类优化的情况下,参数配置的优化也是提高性能的重要手段。
针对问题模型和求解算法的优化往往要求研究者对于领域知识有充分的了解。对于计算机领域的研究开发人员而言,主要从针对硬件平台的优化和参数配置的优化两方面考虑。
高性能计算应用在运行过程中,产生了大量可以反映程序的行为特征的数据。借助这些数据,研究者可以对已有的高性能应用程序进行分析与优化,从而在硬件平台不变更的情况下进一步提高应用的执行效率,提高高性能计算机的利用率。
根据数据来源的不同,这些数据可分为两类。
l 第一类为反映硬件资源使用情况的数据,包括CPU使用率、GPU等加速器/协处理器使用率、内存使用率、内存带宽、SWAP%使用率、SIMD指令使用率、磁盘读写量、网络收发量等。这些数据相对容易获得,且由于比较偏系统底层,因此可以用于分析任何应用。对于没有源代码的应用,例如一些商业软件等,通常只能利用这一类数据来进行分析。
l 第二类为在程序中插入特征检测代码所获得的可以反映程序运行逻辑的数据,包括变量的值,循环执行次数,分支执行情况、函数调用与通信收发事件等。这些数据的获得需要程序的源码,但获得的数据具有更丰富的语义,可以更确切地反映程序行为特征。因此对于有源代码的应用,例如科研机构自行开发的应用、开源应用等,这一类数据可以对程序的分析与优化提供比较有价值的帮助。
并行程序涉及的各个关键软件,还有并行程序自身,都有可调的参数。不同的参数配置将会影响并行程序的性能。例如,OpenMPI的模块化组件架构(Modular Component Architecture)为并行程序提供了在运行时修改MPI参数的接口,可更改的参数有数百个。许多参数对性能的影响有时没有直接的、简单的经验来评估。并行程序的行为特征的数据可能对参数的选择与调优具有指导意义,但是需要对数据进行处理与分析才能获取有价值的信息。
数据挖掘技术的发展对参数的选择与调优带来了新的可能。数据挖掘技术可以从数据中获得隐式的、潜在有用的信息。运用数据挖掘技术,可以从程序代码和历史记录的性能数据中自动地抽取程序特征数据,对程序行为进行建模。模型可以在一定程度上刻画出程序特征与性能之间的映射关系。借助建立的模型,研究者可以预估在某个输入数据和参数配置下并行程序的性能,然后通过选择预估性能最优的参数配置来提高性能。