CN108564135B - 构建骨架程序并实现高性能计算程序运行时间预测的方法 - Google Patents
构建骨架程序并实现高性能计算程序运行时间预测的方法 Download PDFInfo
- Publication number
- CN108564135B CN108564135B CN201810393897.7A CN201810393897A CN108564135B CN 108564135 B CN108564135 B CN 108564135B CN 201810393897 A CN201810393897 A CN 201810393897A CN 108564135 B CN108564135 B CN 108564135B
- Authority
- CN
- China
- Prior art keywords
- program
- framework
- communication
- time
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
Landscapes
- Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种构建骨架程序并实现高性能计算程序运行时间预测的方法,在现有骨架程序方法的基础上进行了改进,借助机器学习方法和程序的运行时数据来构建出能预测程序在不同输入下运行时间的骨架程序。和现有的骨架程序相比,使用本方法构建的骨架程序能够对程序在不同的输入下的运行时间做出预测;和同样使用了机器学习技术的回归方法相比,本方法能够在多种运行环境中对程序的运行时间进行预测。
Description
技术领域
本发明涉及程序运行时间预测技术领域,尤其涉及一种构建骨架程序并实现高性能计算程序运行时间预测的方法。
背景技术
在高性能计算领域,对并行程序运行时间的预测是一个重要的研究问题。对程序运行时间的准确预测能够有效地提高并行计算***的任务调度效率,从而提高整个***的效能。
一种常用于进行程序运行时间预测的方法是骨架程序方法。骨架程序是指,以并行程序的通信过程作为基础,将并行程序的计算过程以休眠过程代替,并缩减通信量和计算时间后得到的程序。骨架程序的运行时间远小于原始程序,且和原始程序的运行时间保持固定的比例关系,从而能够通过运行骨架程序来预测原始程序的运行时间。但是,这一方法的主要问题在于,生成的骨架程序没有输入,因此仅能适用于对固定输入下程序的运行时间进行预测,每当程序的输入发生改变,都需要重新构建骨架程序才能进行预测。
另一种常用于进行程序运行时间预测的方法是回归方法。回归方法通常通过建立机器学习模型来对程序的运行时间进行预测。在这类工作中,模型预测的目标都是程序的运行时间,而作为模型输入的特征在各项工作中都有所不同:在一些工作中只使用程序的输入作为特征,而在另一些工作中还会采集程序在运行过程中产生的数据作为特征。使用运行时数据作为特征来建立模型能够更好地反映出程序的运行过程对运行时间造成的影响,因此通常有更好的预测效果,但会使得预测必须要在程序开始运行一段时间后才能进行。这一方法的主要问题在于,无论是否使用程序的运行时数据作为特征,建立的模型都仅适用于当前运行环境。一旦程序的运行环境发生改变,原本建立的模型就不再适用,需要重新建模才能进行预测。
发明内容
本发明的目的是提供一种构建骨架程序并实现高性能计算程序运行时间预测的方法。
本发明的目的是通过以下技术方案实现的:
一种构建骨架程序并实现高性能计算程序运行时间预测的方法,包括:
在程序的每个条件判断的语句后***计数代码;
获取程序的运行时数据,包括控制程序执行的信息,以及程序的通信Trace;所述控制程序执行的信息包括:通过***计数代码记录的分支路径信息与分支循环执行次数;
对程序各个进程的运行时数据进行聚类,并选取出每个聚类中最靠近聚类中心的进程的运行时数据;
结合机器学习方法与选取出的进程的运行时数据,对相应进程的执行过程进行建模;
依据程序的通信Trace,来构建程序的通信骨架;
将通信骨架与所建立模型的输出相结合,使用模型输出的信息来控制骨架程序在计算部分消耗的时间与执行路径,并按照一定的比例常数缩减程序的通信量和计算部分时间,得到能够在不同输入下预测运行时间的骨架程序;
运行并得到骨架程序的运行时间后,将该运行时间按照设定的比例常数进行扩放,得到对原始程序在当前输入下运行时间的预测。
由上述本发明提供的技术方案可以看出,和现有的骨架程序相比,使用本方法构建的骨架程序能够对程序在不同的输入下的运行时间做出预测;和同样使用了机器学习技术的回归方法相比,本方法能够在多种运行环境中对程序的运行时间进行预测。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。
图1为本发明实施例提供的一种构建骨架程序并实现高性能计算程序运行时间预测的方法的流程图。
具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。
本发明实施例提供一种构建骨架程序并实现高性能计算程序运行时间预测的方法,如图1所示,该方法主要包括如下步骤:
步骤1、在程序的每个条件判断的语句后***计数代码。
本发明实施例中,定义了一系列计数变量,用于程序各个分支的执行次数计数。在程序每个进行条件判断的语句后***计数代码,使对应的计数变量的值在该分支每一次执行时累加。
计数变量的命名可以根据代码文件名称、计数变量的数量和所计数语句块的嵌套关系来决定;例如:
1)Filename_10
该变量名中,“Filename”表示此代码文件的名称为“Filename.c/cpp/cc”,而10表明该变量为此文件中不在嵌套中的第10个计数变量。
2)Filename_10d1
与1)中的变量名称的差别在于,在“10d1”中,‘d’表示该计数变量对应的是条件分支语句后的语句块,而‘d’后的数字1表明该语句块是第1个分支语句块。
3)Filename_10_1
该变量名中,“10_1”表示所计数的语句块与Filename_10计数的语句块存在嵌套关系,只有当Filename_10计数的语句块被执行时,Filename_10_1所计数的语句块才有可能被执行。
通常情况下,计数变量于新的源代码文件,如“inst_var.cc”中定义,并在头文件中使用“extern”关键字引用这些计数变量。之后,在所有***了计数代码的文件中引用该头文件,并在main()函数返回时将所有计数器的值输出到文件中。
步骤2、获取程序的运行时数据,包括控制程序执行的信息,以及程序的通信Trace。
本发明实施例中,在Tracing工具的支持下,使用多组不同的输入参数运行程序,获取程序的运行时数据,包括控制程序执行的信息(通过***计数代码记录的分支路径信息及分支循环执行次数),以及程序的通信Trace(程序每次调用通信函数的函数名、开始和结束时间、以及包括通信量在内的函数参数)。
有许多现有的Tracing工具能够用于获取程序的通信Trace。尽管具体的实现机理有所不同,这些工具都是在MPI标准中的Profiling层,即PMPI的基础上实现的,包括mpiP、VampirTrace等。
在Tracing工具的支持下,通过在多组不同输入下运行代码***后的程序,可以获取程序的运行时数据。若目标程序已经在现有的环境中多次运行,并对其输入的分布有所了解的情况下,应按照程序实际的输入分布来生成程序的每次运行的输入;否则,每次运行的输入在程序的输入空间中随机生成。
步骤3、对程序各个进程的运行时数据进行聚类,并选取出每个聚类中最靠近聚类中心的进程的运行时数据。
由于高性能计算程序通常是在多进程下运行的SPMD程序,各个进程产生的运行时数据有所差异。对各节点产生的运行时数据,使用K-means聚类算法来对进程进行聚类。高性能计算程序进程的拓扑结构通常较简单,因此K的取值通常为1、2、3、4,也可以根据对程序的了解和经验来决定K的取值。
在聚类完成后,对每个聚类而言,选取最靠近聚类中心点的数据点作为该聚类所有进程的运行时数据。
步骤4、结合机器学习方法与选取出的进程的运行时数据,对相应进程的执行过程进行建模。
本发明实施例中,建模的目标是在已知输入的场景下,对程序在该输入下的执行过程进行预测,因此,所建立模型的输入为程序每次运行的输入参数,输出为控制程序执行的信息(包括分支路径信息及分支循环执行次数),以及程序的通信量。
为了对控制程序执行的信息和通信量进行有效的建模,需要对通过代码***获取的数据进行分类,并分别进行建模:
1)排除判断异常的语句对应的计数。
由于在代码***中记录了程序所有的分支判断,有许多用于判断异常的语句块也被计数了。在程序正确执行的情况下,这些语句块的计数在所有输入下都是不变的,因此无法作为预测的目标,需要找出并排除。
2)部分计数代码所计数的语句块在执行过程中最多只会执行一次,即计数值为0或1,对这类特征,使用分类算法来对其进行建模;部分计数代码所计数的语句块在执行过程中总是会执行多次,即计数值总是正整数,对这类特征,使用回归算法来对其进行建模。
3)部分计数代码所计数的语句块在执行过程中可能不执行也可能执行多次,这类计数值为0或是一个正整数,对这类特征,首先使用分类算法判断其值是否为0;在不为0的情况下,再使用回归算法来对其进行建模。
对大多数高性能计算程序而言,输入参数之间存在较强的相关性。通过对程序的输入参数进行多项式化,可以生成能反映参数之间关联性的特征。
本领域技术人员可以理解,建模完成后,还需要进行必要的训练,来确保模型的效果。
步骤5、依据程序的通信Trace,来构建程序的通信骨架。
由于程序的调用的通信函数可能是阻塞或是非阻塞的,以及trace生成的时间节点是函数返回时,可能会导致生成的通信Trace的顺序与通信函数被调用的顺序不一致。因此,需要将程序的通信Trace按照程序的通信函数的开始时间排序,来解决上述问题。当通信Trace的条数过多时,全部进行排序的效率较低,可以仅关注MPI_ISend,MPI_IRecv,MPI_Recv,MPI_Send等成对的发送和接收函数。
将重新排序后的通信Trace按照顺序还原为通信函数,并将与其他进程间的通信改为与进程自身进行通信,从而得到通信Trace对应进程的通信骨架。
本领域技术人员可以理解,上述步骤4与步骤5不区分执行的先后顺序,可以同步执行也可以一前一后执行,这两个步骤执行结果输入步骤6执行后续流程即可。
步骤6、将通信骨架与所建立模型的输出相结合,使用模型输出的信息来控制骨架程序在计算部分消耗的时间与执行路径,并按照一定的比例常数缩减程序的通信量和计算部分时间,得到能够在不同输入下预测运行时间的骨架程序。
本发明实施例中,使用模型输出的信息来控制骨架程序中每次通信的时间间隔。这一时间间隔根据两次通信间的语句块是否执行以及执行次数的信息来决定。例如:
在骨架程序的通信函数的间隔中填充这样的代码段,就能够控制骨架程序在计算部分消耗的时间。具体来说,利用分支路径信息控制骨架程序的执行路径,利用分支循环执行次数控制骨架程序在计算部分消耗的时间。
由于骨架程序需要在很短的时间内结束运行,因此,对通信量和计算时间都需要按照一个固定的比例常数进行缩减。在完成该步骤后,就构建出了能在不同输入下预测运行时间的骨架程序。
步骤7、运行并得到骨架程序的运行时间后,将该运行时间按照设定的比例常数进行扩放,得到对原始程序在当前输入下运行时间的预测。
按照上述步骤构建完成后的骨架程序,其输入参数和原始程序一致。在运行并得到骨架程序的运行时间后,将该时间按照步骤6中设定的比例常数进行扩放,可以得到对原始程序在该输入下运行时间的预测。
本发明实施例上述方案,在现有骨架程序方法的基础上进行了改进,借助机器学习方法和程序的运行时数据来构建出能预测程序在不同输入下运行时间的骨架程序。和现有的骨架程序相比,使用本方法构建的骨架程序能够对程序在不同的输入下的运行时间做出预测;和同样使用了机器学习技术的回归方法相比,本方法能够在多种运行环境中对程序的运行时间进行预测。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例可以通过软件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,上述实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (7)
1.一种构建骨架程序并实现高性能计算程序运行时间预测的方法,其特征在于,包括:
在程序的每个条件判断的语句后***计数代码;
获取程序的运行时数据,包括控制程序执行的信息,以及程序的通信Trace;所述控制程序执行的信息包括:通过***计数代码记录的分支路径信息与分支循环执行次数;
对程序各个进程的运行时数据进行聚类,并选取出每个聚类中最靠近聚类中心的进程的运行时数据;
结合机器学习方法与选取出的进程的运行时数据,对相应进程的执行过程进行建模;
依据程序的通信Trace,来构建程序的通信骨架,包括:将程序的通信Trace按照程序的通信函数的开始时间排序,将重新排序后的通信Trace按照顺序还原为通信函数,并将与其他进程间的通信改为与进程自身进行通信,从而得到通信Trace对应进程的通信骨架;
将通信骨架与所建立模型的输出相结合,使用模型输出的信息来控制骨架程序在计算部分消耗的时间与执行路径,并按照一定的比例常数缩减程序的通信量和计算部分时间,得到能够在不同输入下预测运行时间的骨架程序;
运行并得到骨架程序的运行时间后,将该运行时间按照设定的比例常数进行扩放,得到对原始程序在当前输入下运行时间的预测。
2.根据权利要求1所述的一种构建骨架程序并实现高性能计算程序运行时间预测的方法,其特征在于,计数代码的命名根据代码文件名称、计数变量的数量和所计数语句块的嵌套关系来决定。
3.根据权利要求1所述的一种构建骨架程序并实现高性能计算程序运行时间预测的方法,其特征在于,
程序的通信Trace包括:程序每次调用通信函数的函数名、开始和结束时间、以及包括通信量在内的函数参数。
4.根据权利要求1所述的一种构建骨架程序并实现高性能计算程序运行时间预测的方法,其特征在于,使用K-means聚类算法来对进程进行聚类。
5.根据权利要求1所述的一种构建骨架程序并实现高性能计算程序运行时间预测的方法,其特征在于,所建立模型的输入为程序每次运行的输入参数,输出为控制程序执行的信息,以及程序的通信量。
6.根据权利要求1或3所述的一种构建骨架程序并实现高性能计算程序运行时间预测的方法,其特征在于,
对通过代码***获取的数据进行分类,并分别进行建模:
排除判断异常的语句对应的计数;
部分计数代码所计数的语句块在执行过程中最多只会执行一次,即计数值为0或1,对这类特征,使用分类算法来对其进行建模;部分计数代码所计数的语句块在执行过程中总是会执行多次,即计数值总是正整数,对这类特征,使用回归算法来对其进行建模;
部分计数代码所计数的语句块在执行过程中可能不执行也可能执行多次,这类计数值为0或是一个正整数,对这类特征,首先使用分类算法判断其值是否为0;在不为0的情况下,再使用回归算法来对其进行建模。
7.根据权利要求5所述的一种构建骨架程序并实现高性能计算程序运行时间预测的方法,其特征在于,
利用分支路径信息控制骨架程序的执行路径,利用分支循环执行次数控制骨架程序在计算部分消耗的时间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810393897.7A CN108564135B (zh) | 2018-04-27 | 2018-04-27 | 构建骨架程序并实现高性能计算程序运行时间预测的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810393897.7A CN108564135B (zh) | 2018-04-27 | 2018-04-27 | 构建骨架程序并实现高性能计算程序运行时间预测的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108564135A CN108564135A (zh) | 2018-09-21 |
CN108564135B true CN108564135B (zh) | 2020-08-25 |
Family
ID=63537143
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810393897.7A Active CN108564135B (zh) | 2018-04-27 | 2018-04-27 | 构建骨架程序并实现高性能计算程序运行时间预测的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108564135B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109636212B (zh) * | 2018-12-19 | 2023-06-16 | 中国科学技术大学 | 作业实际运行时间的预测方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106933665A (zh) * | 2017-03-09 | 2017-07-07 | 中国科学技术大学 | 预测mpi程序运行时间的方法 |
-
2018
- 2018-04-27 CN CN201810393897.7A patent/CN108564135B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106933665A (zh) * | 2017-03-09 | 2017-07-07 | 中国科学技术大学 | 预测mpi程序运行时间的方法 |
Non-Patent Citations (4)
Title |
---|
Automatic Construction of Coordinated Performance Skeletons;Jaspal Subhlok等;《2008 IEEE International Symposium on Parallel and Distributed Processing》;20080603;第1-5页 * |
Phantom: predicting performance of parallel applications on large-scale parallel machines using a single node;Jidong Zhai等;《Proceedings of the 15th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming, PPOPP 2010》;20100531;第305-314页 * |
Skeleton Based Performance Prediction on Shared Networks;Sukhdeep Sodhi等;《IEEE International Symposium on Cluster Computing and the Grid, 2004. CCGrid 2004.》;20040927;第723-730页 * |
基于程序插桩技术的程序运行时间预测方法;詹石岩;《中国优秀硕士学位论文全文数据库 信息科技辑》;20180315(第3期);I137-86 * |
Also Published As
Publication number | Publication date |
---|---|
CN108564135A (zh) | 2018-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111258767B (zh) | 复杂***仿真应用的云计算资源智能分配方法与装置 | |
CN113703775B (zh) | 一种编译方法、装置、设备及存储介质 | |
US20200026577A1 (en) | Allocation of Shared Computing Resources Using Source Code Feature Extraction and Clustering-Based Training of Machine Learning Models | |
US10606867B2 (en) | Data mining method and apparatus | |
CN107316200B (zh) | 一种分析用户行为周期的方法和装置 | |
US11487535B2 (en) | Ranking of software code parts | |
US20150012629A1 (en) | Producing a benchmark describing characteristics of map and reduce tasks | |
CN105574032A (zh) | 规则匹配运算方法及装置 | |
KR102142943B1 (ko) | 클라우드 기반의 인공지능 연산 서비스 방법 및 이를 수행하는 장치 | |
CN116368494A (zh) | 一种神经网络编译优化方法和相关装置 | |
CN106599122B (zh) | 一种基于垂直分解的并行频繁闭序列挖掘方法 | |
CN108564135B (zh) | 构建骨架程序并实现高性能计算程序运行时间预测的方法 | |
CN106708875B (zh) | 一种特征筛选方法及*** | |
Hernaez et al. | A cluster-based approach to compression of quality scores | |
US11579680B2 (en) | Methods and devices for power management based on synthetic machine learning benchmarks | |
CN115688853A (zh) | 一种流程挖掘方法及*** | |
CN106874215B (zh) | 一种基于Spark算子的序列化存储优化方法 | |
CN111639741B (zh) | 一种用于多目标QoS优化的服务自动组合代理*** | |
CN109901931B (zh) | 一种归约函数数量确定方法、装置及*** | |
KR102294173B1 (ko) | 구조적 정보제어넷 기반 프로세스 마이닝 시스템 및 방법 | |
CN106776623B (zh) | 一种用户行为分析方法和设备 | |
JP2023519292A (ja) | モデリング方法及び装置 | |
KR20140006491A (ko) | 확률 그래프의 효과적인 그래프 클러스터링 장치 및 방법 | |
Maier et al. | Performance and impact of dynamic data placement in ATLAS | |
Emeretlis et al. | A hybrid ILP-CP model for mapping directed acyclic task graphs to multicore architectures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |