预测MPI程序运行时间的方法技术

技术编号:15791755 阅读:38 留言:0更新日期:2017-07-09 21:57
本发明专利技术公开了一种预测MPI程序运行时间的方法,可以针对循环、分支语句的定位与计数语句的插入,以及对特定MPI函数的定位操作,之后对多节点产生的特征进行合并操作,进而生成预测模型,实现MPI程序运行时间的预测。该方法针对传统技术中无法对MPI特征进行采集和整合的问题予以修正,并且将基于代码插装的程序特征获取技术扩展到了高性能计算领域中常用的C/C++语言。不仅可以准确预测MPI程序运行时间,同时,还对于程序的输入不敏感,无需使用者考虑特殊输入情况。

【技术实现步骤摘要】
预测MPI程序运行时间的方法
本专利技术涉及程序性能预测
,尤其涉及一种预测MPI程序运行时间的方法。
技术介绍
在超级计算机系统(以下简称超算系统)的运行过程中,其作业调度系统负责对用户提交的作业进行作业调度操作,为了提高系统的整体利用效率,调度系统需要得知作业的运行时间以更好的安排作业队列。而在超级计算机系统中运行的作业程序通常为MPI程序,因此如何对MPI程序进行运行时间预测得到了越来越多的关注。目前在超算系统中常用的方法为经验估计,即根据用户以往提交的程序的运行时间估计之后用户提交的程序的运行时间。这种方法针对重复运行的用户程序具有一定的效果,但是难以对大部分程序产生应有的预测效果。此外,有其他研究人员提出了其他预测方法,可以分为基于数学模型的分析和基于运行数据的分析两种。基于数学模型的分析即通过分析程序本身的数学模型,结合实际运行系统的特性,得出程序的最终运行模型,从而能够对程序的运行时间进行细致的分析。但是这种方法对于研究人员的要求非常高,通常要求研究者同时具备多个领域的专业知识背景,并且研究过程较为耗时。此外,当程序发生变更,或者运行环境发生改变,就必须重新对程序进行建模。基于运行数据的分析,根据数据的获取途径不同,可以分为若干种不同的技术,如基于基准程序、基于程序运行状态采样、基于骨架程序、基于代码插装技术等等。基于基准程序的预测技术主要用于更换运行环境后的程序性能预测,即使用一组基准程序作为比较对象,测出基准程序在不同运行环境下的性能变化,以此估计待测程序的性能变化。这种技术易于实行,但是基准程序的代表性的优劣决定了最终的预测准确度。基于程序运行状态采样的预测技术即通过监控程序运行中的系统状态数据,通过一定的模型分析,得出状态数据与程序运行时间的关联关系。这种技术通常需要运行环境的支持,并且为了不过多消耗系统资源,监控粒度不能做到任意小,并且不能根据程序的输入情况预测其运行时间。基于骨架程序的预测技术即通过某种方式得到一个简化版的程序,称为骨架程序。骨架程序与原程序的运行时间保持一定的比例,最终通过运行骨架程序推算出原程序的运行时间。这种技术的问题在于很难获得一个较优的骨架程序,使得骨架程序与原程序之间保持适当的比例。并且由于该技术缩减了原程序中的大量代码,极有可能遗漏特定输入下的运行状态,从而使得预测变得不准确。基于代码插装技术的预测是一种通过修改程序代码提取程序运行特征的技术。主要做法是通过修改源程序,在不改变源程序语义的前提下,插入特定代码,使修改后的程序可以输出与程序逻辑相关的特征信息,从而用于后续的预测模型的建立。但是目前该技术还并不能适用于MPI程序的特征提取,经过调研,也没有发现其他基于代码插装技术的针对MPI程序的特征提取工具。而在高性能计算领域,大多数应用都使用了MPI技术,因此需要针对现有技术进行优化使得其适用于MPI程序。
技术实现思路
本专利技术的目的是提供一种预测MPI程序运行时间的方法,可以准确预测MPI程序运行时间,同时,对于程序的输入不敏感,无需使用者考虑特殊输入情况。本专利技术的目的是通过以下技术方案实现的:一种预测MPI程序运行时间的方法,包括:对待预测的MPI程序中的待处理语句进行定位;在待处理语句中需要计数的语句之后加入计数语句,并且,在待处理语句中的MPI函数之后加入MPI特征数据计数语句;根据加入的计数语句与MPI特征数据计数语句,生成变量,并写入头文件中,进而获得处理后的MPI程序;根据头文件中的变量名自动生成用于输出计数值的语句,并且对处理后的MPI程序运行过程中,各个节点产生的MPI特征数据进行整合操作;根据处理后的MPI程序输出的计数值和整合后的MPI特征数据,获得预测模型;使用处理后的MPI程序获取待预测的MPI程序的运行特征数据,并输入所述预测模型中,最终获得待预测的MPI程序运行时间的预测值。所述对待预测的MPI程序中的待处理语句进行定位包括:使用LibTooling工具库,采用其提供的VisitStmt函数,配合isa<ForStmt>、isa<DoStmt>和isa<WhileStmt>三个函数来定位三种循环语句,配合isa<IfStmt>函数定位条件分支语句;使用工具库中提供的VisitCall函数,配合工具库中的CallEpxr.getDirectCallee和FunctionDecl.getNameAsString函数并利用MPI函数名实现对MPI函数的定位。所述在待处理语句中需要计数的语句之后加入计数语句包括:需要计数的语句为待处理语句中的循环语句与条件分支语句;在获取到循环语句与条件分支的位置后,首先根据位置信息进行计数变量名称的生成,同时在对应的位置后部插入计数语句,用于程序运行时进行计数。在插入计数语句过程中,需要对插入位置进行判断;在处理循环语句时,首先判断循环语句是否被大括号包裹,若否,则需要手动添加大括号;判断的方法是使用isa方法检测循环语句是否为CompoundStmt类型,如果是,则说明循环语句已经包含在大括号中,否则需要使用Lexer::MeasureTokenLength(),Stmt.getLocStart()和Stmt.getLocEnd()方法结合,为循环语句加入大括号;对于条件分支语句,需要分别对Then和Else部分进行判断,其他操作与循环语句操作相同。在待处理语句中的MPI函数之后加入MPI特征数据计数语句包括:MPI特征数据,发生在发送、收取和集群通信这几类函数中;通过CallExpr.arg_begin()函数获取到MPI函数的参数列表,之后通过查询MPI函数的参数含义,对参数进行摘取并进行计数语句的拼凑。所述对处理后的MPI程序运行过程中,各个节点产生的MPI特征数据进行整合操作包括:对节点的特征数据进行求均值的计算作为最终输出:其中,F为整合后的MPI特征数据,i为节点编号,F1,i表示第1个MPI特征在第i个节点上的记录值,N为节点总数,k为单节点的MPI特征数据,即表示第k个特征在所有节点上的记录平均值。所述根据处理后的MPI程序输出的计数值和整合后的MPI特征数据,获得预测模型包括:所输出的计数值包含了循环语句的计数值、条件分支语句的计数值,以及MPI特征的计数值;所述的循环语句、条件分支语句以及MPI特征统称为特征;则获取预测模型的过程如下:首先,使用m组不同的输入运行处理后的MPI程序,输出m组所有特征的特征数据,设获取到的特征共有n种,记所有的n种特征的特征数据组成了输入X,对应的m次程序运行的时间为Y,其中:X=(x1,x2,…,xn)Y=(y1,y2,…,ym);然后,对X和Y迭代进行多次多元回归分析,重复如下步骤:1)使用多元一次函数对X和Y做一次拟合,得到:Y=AX+b=a1x1+a2x2+...+anxn+b其中,A=(a1,a2,…,an);b为一个常数;2)将上式中绝对值排名前p位的a对应的特征数据xi(i∈1,2,…,n)保留,记:X'=(x1',x'2,…,x'p)并令X=X',重复步骤1)直到被保留的特征数量达到预设目标,记此时剩余的特征数据为X*;最后,利用X*和Y进行建模,获得预测模型。本文档来自技高网
...
预测MPI程序运行时间的方法

【技术保护点】
一种预测MPI程序运行时间的方法,其特征在于,包括:对待预测的MPI程序中的待处理语句进行定位;在待处理语句中需要计数的语句之后加入计数语句,并且,在待处理语句中的MPI函数之后加入MPI特征数据计数语句;根据加入的计数语句与MPI特征数据计数语句,生成变量,并写入头文件中,进而获得处理后的MPI程序;根据头文件中的变量名自动生成用于输出计数值的语句,并且对处理后的MPI程序运行过程中,各个节点产生的MPI特征数据进行整合操作;根据处理后的MPI程序输出的计数值和整合后的MPI特征数据,获得预测模型;使用处理后的MPI程序获取待预测的MPI程序的运行特征数据,并输入所述预测模型中,最终获得待预测的MPI程序运行时间的预测值。

【技术特征摘要】
1.一种预测MPI程序运行时间的方法,其特征在于,包括:对待预测的MPI程序中的待处理语句进行定位;在待处理语句中需要计数的语句之后加入计数语句,并且,在待处理语句中的MPI函数之后加入MPI特征数据计数语句;根据加入的计数语句与MPI特征数据计数语句,生成变量,并写入头文件中,进而获得处理后的MPI程序;根据头文件中的变量名自动生成用于输出计数值的语句,并且对处理后的MPI程序运行过程中,各个节点产生的MPI特征数据进行整合操作;根据处理后的MPI程序输出的计数值和整合后的MPI特征数据,获得预测模型;使用处理后的MPI程序获取待预测的MPI程序的运行特征数据,并输入所述预测模型中,最终获得待预测的MPI程序运行时间的预测值。2.根据权利要求1所述的一种预测MPI程序运行时间的方法,其特征在于,所述对待预测的MPI程序中的待处理语句进行定位包括:使用LibTooling工具库,采用其提供的VisitStmt函数,配合isa<ForStmt>、isa<DoStmt>和isa<WhileStmt>三个函数来定位三种循环语句,配合isa<IfStmt>函数定位条件分支语句;使用工具库中提供的VisitCall函数,配合工具库中的CallEpxr.getDirectCallee和FunctionDecl.getNameAsString函数并利用MPI函数名实现对MPI函数的定位。3.根据权利要求1所述的一种预测MPI程序运行时间的方法,其特征在于,所述在待处理语句中需要计数的语句之后加入计数语句包括:需要计数的语句为待处理语句中的循环语句与条件分支语句;在获取到循环语句与条件分支的位置后,首先根据位置信息进行计数变量名称的生成,同时在对应的位置后部插入计数语句,用于程序运行时进行计数。4.根据权利要求3所述的一种预测MPI程序运行时间的方法,其特征在于,在插入计数语句过程中,需要对插入位置进行判断;在处理循环语句时,首先判断循环语句是否被大括号包裹,若否,则需要手动添加大括号;判断的方法是使用isa方法检测循环语句是否为CompoundStmt类型,如果是,则说明循环语句已经包含在大括号中,否则需要使用Lexer::MeasureTokenLength(),Stmt.getLocStart()和Stmt.getLocEnd()方法结合,为循环语句加入大括号;对于条件分支语句,需要分别对Then和Else部分进行判断,其他操作与循环语句操作相同。5.根据权利要求1所述的一种预测MPI程序运行时间的方法,其特征在于,在待处理语句中的MPI函数之后加入MPI特征数据计数语句包括:...

【专利技术属性】
技术研发人员:孙广中詹石岩孙经纬
申请(专利权)人:中国科学技术大学
类型:发明
国别省市:安徽,34

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1