CN110069347A - 一种基于过程重要度的线程划分方法 - Google Patents
一种基于过程重要度的线程划分方法 Download PDFInfo
- Publication number
- CN110069347A CN110069347A CN201910357150.0A CN201910357150A CN110069347A CN 110069347 A CN110069347 A CN 110069347A CN 201910357150 A CN201910357150 A CN 201910357150A CN 110069347 A CN110069347 A CN 110069347A
- Authority
- CN
- China
- Prior art keywords
- program
- different degree
- tuning
- thread
- division
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3447—Performance evaluation by modeling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
Abstract
一种基于过程重要度的线程划分方法,包括步骤:生成过程初始划分方案及计算过程重要度,以及结合过程初始划分方案和过程的重要度,生成过程最佳划分方案,本发明以基于机器学习的线程划分方法生成过程初始划分方案为基础,采用学科交叉研究方法,将可靠性理论中的重要度理论(Importance Theory)引入到线程划分方法研究中,根据过程的特征计算其重要度,并利用人工干预的优势,探索了隐式划分(初始划分方案生成过程)基础上加入显式划分方法(人工干预划分标志位),利用性能评估模型评估,从而找出过程的最佳划分方案,验证了显式并行化的效果总是优于隐式并行化的理论。
Description
技术领域
本发明涉及计算机技术领域,具体说的是一种基于过程重要度的线程划分方法。
背景技术
挖掘程序的并行性是提高程序执行性能的有效途径之一,多核处理器的提出又为并行技术带来了巨大的潜力。但是,物理上并行的结构设计与理论上串行的程序设计和执行模型之间的不匹配,使多核处理器技术面临极其严重的问题,并且,随着半导体工艺的不断进步,该问题还将变得越来越严重。正如斯坦福大学校长John Hennessy的话:“…当人们开始谈论并行化和真正易于使用的并行计算机时,这个问题来的比任何科学计算都要困难。…如果我从事这个行业,我会感到很恐慌”。传统指令级并行提高程序性能的方法已经遇到了难以逾越的障碍,随着片上多核处理器时代的到来,如何利用多核处理器加速串行程序成为当前迫切需要解决的问题。
传统的并行编程模式和编译技术也面临着应对多核带来新变化的挑战。实现上面目标的一个有效方法是串行程序并行化,既解决了传统串行程序的改造,又合理利用了日益发展且丰富的核资源。线程级推测技术(Thread Level Speculation,TLS),即推测多线程技术(Speculative Multithreading,SpMT)能够自动将串行程序以激进的方式划分为多个线程,并允许线程间存在模糊的控制依赖和数据依赖,多个线程在多核处理器上同时执行,实现传统程序设计和现在多核处理器结构的融合,应用于多核并行计算、多核编译器、多核体系结构设计等领域,是串行程序,特别是非规则串行程序并行化的一种有效手段。作为该技术的关键部分,线程划分方法对程序加速比提升至关重要。已有的线程划分方法主要分为三类,分别是基于启发式规则的线程划分方法、基于机器学习的线程划分方法和基于图的线程划分方法。
为了解现有线程划分方法的发展状况,对现有的论文和专利进行了检索、比较和分析,筛选出如下与本发明相关度比较高的技术信息:
基于启发式规则的线程划分方法(Heuristic Rules-based(HR-based)ThreadPartition Approach)在划分串行程序过程中,依据启发式规则确定所有程序划分后生成的线程粒度、线程之间的数据依赖、激发距离等参数的取值范围,从而确定划分标志(sp-cqip点)的位置。
技术方案1:题目《Mitosis:A speculative multithreaded processor based onprecomputation slices》的论文,为了减小激发对(sp-cqip)的搜索空间,使用启发式规则选择候选激发对。在选择过程中,贡献率小于贡献阈值的激发对被放弃,激发对要同时在相同的过程内或者循环体中,激发对的长度小于长度阈值,sp到cqip的概率要大于概率阈值,p-slice长度和推测线程大小比例小于比例阈值。其中,贡献阈值、长度阈值、概率阈值和比例阈值是统一给出,且划分是面向程序而不是过程。
题目《Min-cut program decomposition for thread-level speculation》的论文,利用图的最小割算法划分程序流图,使用启发式来平衡数据依赖、性能代价、加载不平衡等因素的代价,程序划分后获得了性能提升。然而,算法是对程序中过程进行统一划分,同一程序中各个过程使用统一的划分方案。
题目《Compiling for the multiscalar architecture》的论文,为了减小线程间数据依赖和最大化负载均衡,利用基于启发式规则的编译器创建推测线程,在线程粒度、控制流、数据依赖等方面依赖于启发式,线程粒度阈值、控制流阈值和数据依赖阈值是提前设定,且程序中过程使用统一划分方案。
基于机器学习的线程划分方法(Machine Learning-based(ML-based)ThreadPartition Approach)利用机器学习方法学习样本集中的线程划分知识,并根据新输入程序的特征预测其划分方案,利用该划分方案指导该程序过程的划分。
技术方案2:题目《A Novel Thread Partitioning Approach Based on MachineLearning for Speculative Multithreading》的论文,提出了一个基于KNN的线程划分方法。该方法主要包含两个部分:训练样本集的产生,提取样本集中蕴含的划分知识,并利用未知程序和样本之间的相似度选择k个最相似的样本来决定该程序的划分方案。在该方法中,生成的划分方案是针对程序的而不是过程。
题目《Partitioning streaming parallelism for multi-cores:a machinelearning based approach》在一个移动和自动的编译器上使用机器学习方法划分流程序,离线学习先验知识并预测未知流程序的划分结构,实现了流并行到多核的匹配。其中,未知程序的划分结构是通过最近邻模型来预测出,且程序过程都使用该划分结构。
题目《Optimizing partition thresholds in speculative multithreading》的论文,提取影响线程划分的五个主要影响参数,并利用层遍历的方法优化这五个参数,从而为程序过程获得最优划分方案,实验证明此方法比传统方法获得更好的加速比性能。
基于图的线程划分方法(Graph-based Thread Partition Approach)是在程序的加权控制流图(Weighted Control Flow Graph)基础上进行不同路径的综合划分。
技术方案3:《A Graph-Based Thread Partition Approach in SpeculativeMultithreading》《GbA:A graph-based thread partition approach in speculativemultithreading》的论文,提出了一个基于图的线程划分方法,在该方法中,用加权控制流图来形式化表达非规则程序,并利用机器学习方法学习线程划分知识和预测未知程序的划分方案,且生成的划分方案应用于程序的各个过程中。
从目前国内外对非规则程序线程划分方法的研究现状来看:基于启发式规则的线程划分方法具有简单、易操作的优势;基于机器学习的线程划分方法具有智能、自动划分等优势;基于图的线程划分方法能够更加全面表达程序的数据和控制信息。但是,这两类线程划分方法在划分一个程序时,对同一程序中所有过程多采用统一的划分方案,容易忽略过程的差异性,导致部分过程不能获得最佳的划分。为解决上述问题,需要关注三个方面,分别是:(1)过程最佳划分方案的生成。线程划分的对象是过程,目前的划分方法对程序过程采用统一划分方案,不适宜于部分过程,因此,过程最佳划分方案的生成是一个存在的问题;(2)过程特征到划分方案的映射。过程的划分方案依据于其特征,过程特征确定其在程序中的重要度,重要度决定该过程的线程划分方案。因此,如何从过程的特征映射成划分方案也是一个存在的问题;(3)性能评估模型的建立及验证。非规则程序线程划分后,对其进行性能评估是必须的。现有的评估方法多是实证评估,很难实现评估结果快速反馈至线程划分阶段。建立和验证一个性能评估模型,理论上评估线程划分方法对非规则程序的划分结果,弥补实证评估不能应用于划分阶段的缺陷,也是一个问题。
发明内容
为解决上述技术问题,本发明提供一种基于过程重要度的线程划分方法,以基于机器学习的线程划分方法生成过程初始划分方案为基础,采用学科交叉研究方法,将可靠性理论中的重要度理论(Importance Theory)引入到线程划分方法研究中,根据过程的特征计算其重要度,并利用人工干预的优势,探索了隐式划分(初始划分方案生成过程)基础上加入显式划分方法(人工干预划分标志位),利用性能评估模型评估,从而找出过程的最佳划分方案,验证了显式并行化的效果总是优于隐式并行化的理论。
为实现上述技术目的,所采用的技术方案是:一种基于过程重要度的线程划分方法,包括以下步骤:
步骤1、生成过程初始划分方案及计算过程重要度,具体包括:
步骤1.1、将基准程序测试集作为待划分程序集;
步骤1.2、比较已有基于机器学习的线程划分方法,选择出对基准程序测试集进行线程划分取得最优性能的划分方法;
步骤1.3、利用步骤1.2的选择的最优性能的划分方法对待划分程序集中一个程序实施自动线程划分,生成程序划分方案,作为该程序中所有过程的初始划分方案;
步骤1.4、利用程序剖析器统计程序过程特征,建立过程重要度模型,计算出过程的重要度;
步骤2、结合过程初始划分方案和过程的重要度,生成过程最佳划分方案,具体包括:
步骤2.1、设定过程的解为过程的划分方案,构建出划分方案的解空间;
步骤2.2、由过程的重要度设计出手工调优频率和手工调优步长的计算方法,约简解空间;
步骤2.3、建立和遍历过程调用树,在过程初始划分方案基础上,根据手工调优频率和手工调优步长,在解空间中进行搜索,找出过程的可能解;
步骤2.4、根据性能评估模型评估的结果,在可能解中找出最优解,即最佳划分方案。
本发明所述的基准程序测试集为Olden基准测试集和/或SPEC2017基准测试集。
本发明所述的性能评估模型的建立方法是:
S1、结合输入程序在运行的剖析信息和程序的推测控制流图SpCFG,构建程序和过程的WCFG;
S2、基于SpCFG和WCFG的分析,计算程序和过程的串行执行时间和推测并行时间;
S3、根据计算的程序和过程的串行执行时间和并行执行时间,依据阿姆达尔定律计算程序和过程的加速比值。
本发明对过程调用树采用自底向上的遍历顺序,同层之间采用随机顺序。
本发明所述的手工调优频率和手工调优步长的计算方法为:待划分程序中所有过程的重要度按照从大到小进行排序,依据麦克劳林公式,对排序的所有过程设定手工调优系数,即{1/n!|n∈N},N为大于1的自然数,设定过程的手工调优频率为该过程手工调优系数和调优基数(n!)的乘积;调优步长的设置采用先大后小的策略,开始以标志位sp和cqip之间指令条数的一半为步长,逐步设置步长为上次步长的一半,直至步长等于1。
本发明的益效果是:
本发明基于程序过程重要度计算和人工干预,探索非规程串行程序并行化的线程划分方法,旨在实现最大程度挖掘出程序的并行性,为在多核环境上充分利用遗留串行程序提供必要和亟需的线程划分方法和相关基础理论。具体的两个效果是:
(1)程序过程最佳划分方案的有效构造
结合基于机器学习的线程级推测技术产生的初始划分方案,通过计算程序过程的重要度,结合性能评估结果,为程序过程构造出最佳划分方案。验证显式并行化(即人工干预划分)的效果总是优于隐式并行化(即自动并行化)的理论。
(2)性能评估模型的设计
针对本发明线程划分方法的特点,设计出一个性能评估模型,理论上评估加速比性能,弥补现有的TLS性能评估方法不能用于线程划分阶段的缺陷。该评估模型独立于多核处理器平台,与实证评测方法得到误差不大于20%的吻合结果。
附图说明
图1为本发明的原理流程框图;
图2为本发明的过程划分方案的生成图;
图3为本发明的性能评估模型的构建流程图;
图4为本发明的初始样本的部分代码图;
图5为本发明的样本的性能调优框架流程图;
图6为本发明的函数health()的过程调用图;
图7为本发明的步长选择图;
图8为本发明的性能调优过程和p-slice的优化流程图;
图9为本发明的p-slice优化的实例图;
图10为本发明的性能调优次数和获得最佳样本的概率图。
具体实施方式
线程划分方法是在基于机器学习的线程划分方法自动生成程序划分方案的基础上,结合程序过程的重要度,加入人工干预,生成过程的最佳划分方案,利用性能评估模型评估程序和过程的加速比性能,并反馈指导线程划分过程。图1给出了主要研究方案。
(1)过程初始划分方案的生成及过程重要度的计算
本发明对此研究将分成以下四个步骤:i)选择Olden基准测试集和/或SPEC2017基准测试集作为待划分程序集;ii)比较已有基于机器学习的线程划分方法,选择出对Olden基准测试集和/或SPEC2017基准测试集进行线程划分取得最优性能的划分方法;iii)利用步骤ii)得到的最优性能的划分方法对待划分程序集中一个程序实施自动线程划分,生成程序划分方案,作为该程序中所有过程的初始划分方案;iv)利用程序剖析器,统计程序过程特征,建立过程重要度模型,计算出过程的重要度。
(2)结合过程初始划分方案和重要度,生成过程最佳划分方案生成程序过程最佳划分方案是一个寻找最优解的过程,本发明对此研究采用以下技术方法:i)设定过程的解为过程的划分方案,构建出划分方案的解空间;ii)由过程的重要度设计出手工调优频率和手工调优步长的计算方法;iii)建立和遍历过程调用树,依据划分方案搜索算法(在过程初始划分方案基础上,根据手工调优频率和手工调优步长,在解空间中进行搜索),找出过程的可能解;iv)根据性能评估模型评估的结果,在可能解中找出最优解,即最佳划分方案。
其中,手工调优频率和手工调优步长的计算方法为:待划分程序中所有过程的重要度按照从大到小进行排序,依据麦克劳林公式,对排序的所有过程设定手工调优系数,即{1/n!|n∈N},设定过程的手工调优频率为该过程手工调优系数和调优基数(n!)的乘积;调优步长的设置采用先大后小的策略,开始以sp和cqip之间指令条数的一半为步长,逐步设置步长为上次步长的一半,直至步长等于1。
在图2的流程中,首先是建立程序过程的调用树;其次是分层遍历各个过程搜索其最佳划分方案;其中,对过程调用树采用自底向上的遍历顺序,同层之间采用随机顺序。
其中,过程的重要度是通过遍历过程的控制流图所有可能路径,求出各个分路径上的特征和相应权重乘积的和计算。
(3)性能评估模型的建立
本发明综合考虑线程冲突及重启、线程间通信、线程分发与提交、负载不均衡在内的多项推测并行开销,构建出一个基于概率图的性能评估模型,构建流程如图3所示。本发明对此研究采用以下技术方法:i)结合输入程序在运行的剖析信息和程序的推测控制流图(Speculative Control Flow Graph,SpCFG),构建程序和过程的WCFG(图中的边代表程序分支概率);ii)基于SpCFG和WCFG的分析,计算程序和过程的串行执行时间和推测并行时间;iii)分别计算程序和过程的串行执行时间和并行执行时间,依据阿姆达尔定律计算程序和过程的加速比值。
基于上述研究目的和研究方案,本发明亟待解决的主要关键点提炼如下:
(1)过程特征影响其最佳划分方案的内在规律探索
线程划分以过程为单位,过程最佳划分方案依据于过程初始划分方案和过程重要度,而过程的初始划分方案和重要度的确定依据于过程特征,如何根据过程特征制定出该过程最佳划分方案,即如何探索程序过程特征影响其最佳划分方案的内在规律成为本发明不可回避的关键点。
(2)过程重要度对人工干预的约束约简解空间
在划分方案的解空间中搜索最优解不是采用全遍历方式,受到人工干预的限定。以过程的重要度为例:根据过程的重要度的取值范围,决定了对该过程手工调整sp-cqip点的步长和手工调整sp-cqip点的频率,限定了该过程可能解的范围,从而约简了解空间。因此,如何根据过程重要度对人工干预的约束来约简解空间,也是本发明的一个关键点。
实施例1
基于过程重要度的性能调优线程划分方法利用Prophet编译器自动快速地划分Olden基准程序,产生初始样本集(提供划分知识)。在每一个初始样本中携带着线程划分的标志位(sp和cqip点)以及预计算片段p-slice(由pslice_entry和pslice_exit分界)。由于sp,cqip点位置和pslice的指令组成隐含着影响加速比的规律,如何对sp,cqip点和pslice进行性能调优,来实现调优后样本性能的提升是本发明(实例)研究的目的。图4给出了一个生成初始样本中的部分代码,其中有pslice_entry和pslice_exit之间指令组成的pslice,及sp(spawn)和cqip指令。
在启发式规则线程划分中决定线程划分方案的线程粒度、数据依赖数、激发距离取值都在一定的范围,不是精确的值,因此sp和cqip点的生成位置存在一定的随机性。例如,在图4中,按照启发式规则,只要sp和cqip之间的激发距离满足一定范围,即cqip可以插入在虚线框中的任意位置。Prophet编译器划分过程是一次性执行,即sp,cqip点的插入也是一次性完成,即使插入点不是最佳位置,编译器也无法修改。导致传统样本生成方法存在一定局限性,样本性能达不到最优。
1.样本的性能调优
性能调优过程是在Prophet平台上进行的,该平台整体上分为四个模块,即SUIF前端和优化器、Profiler、MachSUIF后端、链接器和模拟器。如图5所示,性能调优过程发生在MashSUIF后端,即在生成mips代码后进行。性能调优模块之前部分可以归结为Prophet编译器,之后是模拟器部分。模拟器负责调优后mips代码进行模拟,测试样本的加速比。
图5给出了样本性能调优的框架,加粗字体部分代表性能调优过程,该过程是基于Prophet平台,在线程划分生成mips代码后加入性能调优过程,调优后的mips代码经过模拟器的加速比评测。然后,反复执行“性能调优-模拟器评测”过程,并由样本对比器统计每次调优的sp-cqip位置和获得的加速比,找出加速比最大时的划分标志位,并恢复sp-cqip至对应的标志位,并重新手工优化p-slice。
生成样本的主要步骤分为:
(1)基于Prophet平台生成初始样本,即基于启发式线程划分规则,样本生成程序(Olden基准程序)经过划分生成带有(sp,cqip)划分标志和p-slice的mips代码;
(2)执行性能调优,即调整sp和cqip点的位置和优化p-slice来构建样本。
基于过程重要度的性能调优样本生成方法主要采用三个措施,分别为:偏置调优、最优点保留和贪婪规则的总结。其中,过程的重要度在性能调优中反映在过程的调优步长、调优频率等参数的设置上。在程序执行过程中,各个过程的划分对程序效率提升的作用程度不一样,被调用次数多的过程对整体性能影响偏大,因此本发明对调用次数多的过程增加调优频率,而对调用次数较少的过程减少其调优频率,从而实现偏置调优,达到程序性能提升和时间消耗降低的目的。在调优过程中,我们按照一定的调优次序,在对某个过程调优后,保存该过程中最优的划分标志位(sp,cqip点)的位置信息和p-slice组成,然后再对遍历次序中下一个过程进行调优,从而保证了调优后性能获得稳步提升。在对划分标志位和p-slice调优中,一些好的通用的调优规则(即贪婪规则)被总结,有利于后续过程的性能调优。
2.基于重要度的最佳线程划分方案生成
2.1样本的重要性
机器学习的目标是利用计算机来挖掘数据中的真实规律。基于机器学习的线程划分方法的研究被划分为两个步骤:从样本中学习线程划分的知识,应用该知识到新程序的划分。样本为基于机器学习的线程划分方法提供线程划分的知识,因此,样本的优劣直接影响着该方法的效率,好的样本生成方法对于基于机器学习的线程划分方法是很有意义。
2.2性能调优的优势
性能调优过程是建立在编译器自动划分的基础上,并且使用反馈式调优,即通过观察性能调优后加速比的变化决定是否对原有调优策略做出改变,并根据改变后的调优策略进行新一轮的性能调优。并且,在程序性能调优过程中使用了最优解保留机制,保证了程序调优后的性能不低于调优前的性能。
2.3性能调优假设
因为线程划分过程受到很多影响因素的限制影响,本发明为性能调优过程做三个假设,具体假设内容显示如下:
(1)处理单元的数目没有限制;
(2)激发点(sp)或者控制无关点(cqip)都能够被调优。调优sp点能够导致数据依赖数和数据依赖距离的改变,而调优cqip点能够导致线程粒度的改变;
(3)多重激发使得数据依赖数和p-slice的计算变得很困难,因此激发层数不超过阈值MAX_SPAWN_LEVEL。
2.4基于重要度的过程调优频率
图6显示了Olden测试集中health()过程调用图。图中的每一个过程方框上的数字代表该过程的被调用次数,虚线箭头代表调优频率的递减方向,无箭头虚线代表调优频率没有变化。方框里面是health()的各个过程,过程上的数字越小代表对该过程性能调优的次数越少。表1中显示了各个过程的调优频率。在计算调优频率时,本发明给从调用者到被调用者的弧上加权。具体的频率计算在公式(1)中给出。
基于Prophet编译器自动生成的样本是带有划分标志位的mips代码,包含sp点和cqip点和预计算片段p-slice。性能调优目的在于调整sp和cqip点的位置和优化p-slice,使样本性能更优。过程调优频率的计算符合下面的步骤:
(i)编号
给所有的应用过程一个编号i(i∈[1,N])(表2给出),从而我们能够通过查询编号值来寻找对应的过程并实施操作。作为过程调用树的根节点,main()被编号为1。
表1程序mst()中各个过程的调优频率
(ii)排序
根据程序中每一个过程被调用次数,本发明对过程进行排序,具体过程在表2中给出。
表2 mst()中各个过程编号,权重和频率统计
过程 | 编号 | 权重 | 频率 |
add_list() | 13 | 4 | 24 |
removeList() | 12 | 4 | 24 |
my_rand() | 11 | 2 | 12 |
generate_patient() | 10 | 1 | 4 |
check_patients_access() | 9 | 1 | 4 |
check_patients_waiting() | 8 | 1 | 4 |
check_patients_inside() | 7 | 1 | 4 |
put_in_hosp() | 6 | 1 | 4 |
alloc_tree() | 5 | 1 | 4 |
dealwithargs() | 4 | 1 | 4 |
getresults() | 3 | 1 | 4 |
sim() | 2 | 1 | 4 |
main() | 1 | 1 | 4 |
(iii)调优频率计算
基于程序每一个过程的被调用次数,本发明为它们设定一个特定的调优频率。被调用次数多的过程在整个程序性能提升中扮演更重要的角色,本发明根据过程的被调用次数分配不同的调优频率(即:偏置调优)。过程的被调用次数越多,它的性能调优频率越高;反之,被调用次数越少,过程的性能调优频率越低。本发明为每一个过程按照递减次数分配调优频率,如公式(1)所示。
式中,F代表调优频率,M为1~n的阶乘1!~n!,其中n等同于所有过程的被调次数最大值。以图6中过程health()为例,被调用次数分为3类,即4,2,1,本发明给出i={1,1/2!,1/3!},其中,M=4!=24。然后,我们根据M的取值和公式(1)计算出调优频率F的值,如表1和表2所示。
注意,本发明通过麦克劳林公式计算获得序列i的值。用泰勒展开式表达f(x),显示在公式(2):
如果用f(x)=exp(x)替换,则得出公式(3):
式中,如果x=1,则得出公式(4):
我们利用麦克劳林序列来产生序列i的原因可以归结为下面几方面:
(1)被调用次数多的过程比被调用次数少的过程对整体性能的提升具有更大的影响,因此我们给被调用次数多的过程更高的性能调优频率;
(2)麦克劳林序列是一个递减序列,能够满足下面的要求:被调用次数越多的过程性能调优频率越高,而被调用次数越少的过程性能调优频率越低。并且,麦克劳林最大系数不超过1,符合概率范围[0,1];
(3)每一个过程对性能提升的影响符合一个非线性关系,因此本发明给被调用的过程分配一个成非线性关系的概率集合;
(4)基于程序的过程调用树(图6),过程调用关系会导致各个过程对整个程序加速比的影响存在不平衡。
(iv)调优步长设置
步长设置按照从大到小原则,即,开始以较大的步长ΔL性能调优sp和cqip点位置,并观察加速比的变化。如果加速比增加,以更大步长ΔL’进行调优;否则,我们以较小的步长ΔL1或者ΔL2(ΔL1<ΔL&&ΔL2<ΔL)进行调优。
图7显示在性能调优的步长选择过程。1号箭头代表sp点到cqip点之间代码段的中间位置,而2号和3号箭头分别代表四分之一和四分之三位置。ΔL,ΔL1,ΔL2是调优步长。开始调优时,以步长ΔL向前或者向后调优sp/cqip点(ΔL是较大步长)。如果性能在sp调优后增加,我们以较大步长(即ΔL’)进行调优;否则,我们以较小的步长(即ΔL1或者ΔL2)进行调优。在1号箭头所在位置,我们根据加速比变化情况进行调优。如果性能下降,我们以步长ΔL1或者ΔL2进行调优。
(v)贪婪规则
为了获得一个全局最大加速比,对于每一个过程的调优规则总结如下:
(1)每一个过程的调用次数应该首先被计算;
(2)在过程调用树中,性能调优顺序是自底向上,即叶子节点首先被调优,而根节点最后被调优;
(3)程序中每一个过程的调优频率不同;
(4)如果通过性能调优获得的加速比小于等于性能调优前获得的加速比,我们恢复划分标志位至调优前的位置。
注意:每一个过程的调用次数是根据过程调用图统计出来,而过程调用图由Prophet编译系统产生出来。
2.5预计算片段的优化
基于性能调优样本集生成方法对p-slice的确定需要经历三个阶段,分别是:(1)确定live-ins;(2)产生初始的p-slice;(3)优化p-slice。
初始预计算片段p-slice是通过从cqip到sp后向遍历控制流图来建立,其中的输入是活跃变量集,包含寄存器变量和内存变量。初始预计算片段包含的指令是那些直接产生线程活跃变量live-ins的指令。然后,将直接产生线程活跃变量live-ins指令的父指令插入到p-slice,产生了初始的p-slice。初始p-slice产生以后,本发明要对其优化,采用的优化措施主要包含:低访问概率分支的删除、低访问频率数据依赖的删除和早删除(EarlyCancellation)。图8给出了性能调优过程和p-slice优化的流程图。
分支删除策略指删除在产生p-slice时需要考虑的低访问概率的分支。这些分支或者隶属于推测线程体或者隶属于推测线程对应的p-slice。在p-slice中删除分支意味着删除该分支上的所有指令,这样就减小了p-slice的大小。数据依赖语句主要是指内存依赖语句,在存在内存依赖情况下,如果某依赖语句访问频率低于一个阈值,这个依赖就被忽略,p-slice的大小因此也减小。早删除策略是编译器根据控制流图分析sp出发的所有路径,在cqip不能标记的路径上插入cancel指令,从而在执行的时候撤销有cancel标记的线程,减少了不必要的激发。早删除策略是编译器实现并完成,本发明的性能调优过程不执行此策略。
图9给出了分支删除和依赖语句的删除,从而减小了p-slice大小的一个案例。图9(a)给出了包含sp和cqip点的控制流图,每一条边上标注有被访问的概率(没有标记概率的边默认访问概率为1.0)。图9(b)给出了初始p-slice的控制流图,图中每一个节点用大写字母加上标(A’,B’,…,H’)标识出它们仅仅包含原始基本块的指令子集。图9(c)罗列出在一些基本块中指令之间的数据依赖(小写字母a代表着附加大写字母A基本块中的指令)。一个推测线程中可能删除的分支为L->N,我们查找经过分支L->N上的数据依赖,删除数据依赖d->n,并删除在p-slice中的相关指令,例如:b->d。下一个要删除的边为E->G,这样就导致数据依赖g->o被删除,进一步导致p-slice中依赖c->g的删除。因为从基本块B和C出发不存在和推测线程依赖关系的指令,因此控制依赖a->b,c也被删除,分支A’->B’,A’->C’,B’->D’,C’->D’被删除。优化后的p-slice控制流图如图9(d)。
3.性能模型的建立和分析
这个部分通过建立一个分析模型理论分析出性能调优方法在提高样本性能方面是合理的。这个过程由四个部分组成,分别是:问题描述,选择建模方法,推导模型的数学表达式,求解模型。下面将分别介绍各个部分。
3.1问题描述
假设Prophet生成的初始样本为包含100条指令的代码段,指令编号从1到100,代码段中只有一条sp和一条cqip指令和一个p-slice,其中sp指令和cqip指令分别在代码段的第33行和第66行,而样本取得加速比最大时sp指令和cqip指令位置分别是在第40行和第70行。表3给出了一个初始样本,表4罗列了模型的变量、假设和目标。
表3初始样本样例
3.2选择建模方法
表4模型的变量、假设和目标
考虑随机变量X和Y,它们分别表示sp和cqip指令的插入行号。因为Dspawn=10,因此X的取值有种,可以取以下离散集合中的任何一个数值:
X∈{x1,x2,x3,x4,…,x90},其中xi=i,i∈{1,2,3,4,….,90},
同理,Y的取值是在X取值后来决定其范围,有种,即
Y∈{y1,y2,y3,…,y(90-X)},其中yi=X+10+i
3.3推导模型的数学表达式
假设X=xi(i∈[1,90])的概率是Pi,我们记
Y=yj(j∈[1,90-X])的概率可以表达为:
根据公式(5)和(6),我们可以计算出初始样本是最佳样本的概率为:
公式(7)意味着通过启发式规则获取的初始样本能够获得最佳性能的可能性很小。在基于启发式规则生成的初始样本基础上,经过一次性能调优,样本是最佳样本的概率为:
同理,经过2次,3次,…,n次调优,样本是最佳样本的概率分别显示在公式(9),(10),…,(11)中。
… … …
根据公式(11),调整次数n和最佳样本概率Pn的关系如图10所示。从图中可以看出随着性能调优次数增多,获得最优样本的概率呈递增趋势,并且,Pn的导数为:
当n≤49,140-2n>0,则从而得出Pn是一个单调递增函数。
3.4模型的求解过程
公式(7)中计算出的概率意味着初始样本中sp-cqip点插入位置是最佳位置的可能性很小,用公式(13)得出概率值。
图10显示出随着性能调优次数加大,sp-cqip点调整至最优划分位置的概率在上升,即获得最佳样本的概率在不停上升。随着性能调优次数增大,sp-cqip点一定能够调整到最佳位置。
Claims (5)
1.一种基于过程重要度的线程划分方法,其特征在于:包括以下步骤:
步骤1、生成过程初始划分方案及计算过程重要度,具体包括:
步骤1.1、将基准程序测试集作为待划分程序集;
步骤1.2、比较已有基于机器学习的线程划分方法,选择出对基准程序测试集进行线程划分取得最优性能的划分方法;
步骤1.3、利用步骤1.2的选择的最优性能的划分方法对待划分程序集中一个程序实施自动线程划分,生成程序划分方案,作为该程序中所有过程的初始划分方案;
步骤1.4、利用程序剖析器统计程序过程特征,建立过程重要度模型,计算出过程的重要度;
步骤2、结合过程初始划分方案和过程的重要度,生成过程最佳划分方案,具体包括:
步骤2.1、设定过程的解为过程的划分方案,构建出划分方案的解空间;
步骤2.2、由过程的重要度设计出手工调优频率和手工调优步长的计算方法,约简解空间;
步骤2.3、建立和遍历过程调用树,在过程初始划分方案基础上,根据手工调优频率和手工调优步长,在解空间中进行搜索,找出过程的可能解;
步骤2.4、根据性能评估模型评估的结果,在可能解中找出最优解,即最佳划分方案。
2.如权利要求1所述的一种基于过程重要度的线程划分方法,其特征在于:所述的基准程序测试集为Olden基准测试集和/或SPEC2017基准测试集。
3.如权利要求1所述的一种基于过程重要度的线程划分方法,其特征在于:所述的性能评估模型的建立方法是:
S1、结合输入程序在运行的剖析信息和程序的推测控制流图SpCFG,构建程序和过程的WCFG;
S2、基于SpCFG和WCFG的分析,计算程序和过程的串行执行时间和推测并行时间;
S3、根据计算的程序和过程的串行执行时间和并行执行时间,依据阿姆达尔定律计算程序和过程的加速比值。
4.如权利要求1所述的一种基于过程重要度的线程划分方法,其特征在于:对过程调用树采用自底向上的遍历顺序,同层之间采用随机顺序。
5.如权利要求1所述的一种基于过程重要度的线程划分方法,其特征在于:所述的手工调优频率和手工调优步长的计算方法为:待划分程序中所有过程的重要度按照从大到小进行排序,依据麦克劳林公式,对排序的所有过程设定手工调优系数,即{1/n!|n∈N},N为大于1的自然数,设定过程的手工调优频率为该过程手工调优系数和调优基数(n!)的乘积;调优步长的设置采用先大后小的策略,开始以标志位sp和cqip之间指令条数的一半为步长,逐步设置步长为上次步长的一半,直至步长等于1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910357150.0A CN110069347B (zh) | 2019-04-29 | 2019-04-29 | 一种基于过程重要度的线程划分方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910357150.0A CN110069347B (zh) | 2019-04-29 | 2019-04-29 | 一种基于过程重要度的线程划分方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110069347A true CN110069347A (zh) | 2019-07-30 |
CN110069347B CN110069347B (zh) | 2022-10-25 |
Family
ID=67369620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910357150.0A Active CN110069347B (zh) | 2019-04-29 | 2019-04-29 | 一种基于过程重要度的线程划分方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110069347B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110501363A (zh) * | 2019-08-30 | 2019-11-26 | 中国科学院长春应用化学研究所 | X射线衍射仪用多线程样品测试方法 |
CN111459633A (zh) * | 2020-03-30 | 2020-07-28 | 河南科技大学 | 一种面向非规则程序的自适应线程划分方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101515231A (zh) * | 2009-03-23 | 2009-08-26 | 浙江大学 | 基于数据流分析的单线程程序并行化的实现方法 |
US20100281489A1 (en) * | 2009-04-29 | 2010-11-04 | Samsung Electronics Co., Ltd. | Method and system for dynamically parallelizing application program |
CN102968295A (zh) * | 2012-11-28 | 2013-03-13 | 上海大学 | 基于加权控制流图的前瞻线程划分方法 |
CN105260166A (zh) * | 2015-10-15 | 2016-01-20 | 西安交通大学 | 一种应用于机器学习线程划分的手工样本集生成方法 |
CN105373424A (zh) * | 2015-10-14 | 2016-03-02 | 西安交通大学 | 一种基于机器学习的推测多线程划分方法 |
US20180129534A1 (en) * | 2016-11-04 | 2018-05-10 | Microsoft Technology Licensing, Llc | Thread Importance Based Processor Core Partitioning |
WO2019026104A1 (ja) * | 2017-07-31 | 2019-02-07 | 富士通株式会社 | 情報処理装置、情報処理プログラム及び情報処理方法 |
-
2019
- 2019-04-29 CN CN201910357150.0A patent/CN110069347B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101515231A (zh) * | 2009-03-23 | 2009-08-26 | 浙江大学 | 基于数据流分析的单线程程序并行化的实现方法 |
US20100281489A1 (en) * | 2009-04-29 | 2010-11-04 | Samsung Electronics Co., Ltd. | Method and system for dynamically parallelizing application program |
CN102968295A (zh) * | 2012-11-28 | 2013-03-13 | 上海大学 | 基于加权控制流图的前瞻线程划分方法 |
CN105373424A (zh) * | 2015-10-14 | 2016-03-02 | 西安交通大学 | 一种基于机器学习的推测多线程划分方法 |
CN105260166A (zh) * | 2015-10-15 | 2016-01-20 | 西安交通大学 | 一种应用于机器学习线程划分的手工样本集生成方法 |
US20180129534A1 (en) * | 2016-11-04 | 2018-05-10 | Microsoft Technology Licensing, Llc | Thread Importance Based Processor Core Partitioning |
WO2019026104A1 (ja) * | 2017-07-31 | 2019-02-07 | 富士通株式会社 | 情報処理装置、情報処理プログラム及び情報処理方法 |
Non-Patent Citations (3)
Title |
---|
YUXIANG LI,YINLIANG ZHAO,QIANGSHENG WU: "A Graph-Based Partition Approach in Speculative Multithreading", 《IEEE XPLORE》 * |
YUXIANG LI,ZHIYONG ZHANG,LILI ZHANG,DANMEI NIU: "Thread-Level Speculation Review and Perspectives", 《IEEE XPLORE》 * |
马巧梅: "基于程序特征的线程划分方法的研究", 《计算机科学与探索》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110501363A (zh) * | 2019-08-30 | 2019-11-26 | 中国科学院长春应用化学研究所 | X射线衍射仪用多线程样品测试方法 |
CN111459633A (zh) * | 2020-03-30 | 2020-07-28 | 河南科技大学 | 一种面向非规则程序的自适应线程划分方法 |
CN111459633B (zh) * | 2020-03-30 | 2023-04-11 | 河南科技大学 | 一种面向非规则程序的自适应线程划分方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110069347B (zh) | 2022-10-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108509335B (zh) | 基于遗传算法优化的软件测试数据生成方法 | |
US5889999A (en) | Method and apparatus for sequencing computer instruction execution in a data processing system | |
CN103116540B (zh) | 基于全局超级块支配图的动态符号执行方法 | |
US20130097593A1 (en) | Computer-Guided Holistic Optimization of MapReduce Applications | |
Lawrence et al. | Improving a neural semantic parser by counterfactual learning from human bandit feedback | |
CN112732577A (zh) | 一种多任务软件测试用例进化生成方法 | |
CN105808438B (zh) | 一种基于函数调用路径的测试用例复用方法 | |
CN108647146B (zh) | 基于修正条件判定组合覆盖的测试用例生成方法 | |
CN107491508B (zh) | 一种基于循环神经网络的数据库查询时间预测方法 | |
CN113407185B (zh) | 基于贝叶斯优化的编译器优化选项推荐方法 | |
CN110069347A (zh) | 一种基于过程重要度的线程划分方法 | |
CN105373424B (zh) | 一种基于机器学习的推测多线程划分方法 | |
Hsu et al. | Constraint Partitioning for Solving Planning Problems with Trajectory Constraints and Goal Preferences. | |
Lokuciejewski et al. | Multi-objective exploration of compiler optimizations for real-time systems | |
CN108932137A (zh) | 一种基于推测多线程的汇编级过程间指针分析方法 | |
CN105988855B (zh) | 即时编译参数优化方法及装置 | |
CN114911844A (zh) | 基于机器学习的近似查询优化系统 | |
CN105260166B (zh) | 一种应用于机器学习线程划分的手工样本集生成方法 | |
Moriguchi | Acceleration and enhancement of reliability of simulated annealing for optimizing thinning schedule of a forest stand | |
Kadavy et al. | The ensemble of strategies and perturbation parameter in self-organizing migrating algorithm solving CEC 2019 100-digit challenge | |
CN110109811B (zh) | 一种面向gpu计算性能问题的溯源方法 | |
Otten et al. | A case study in complexity estimation: Towards parallel branch-and-bound over graphical models | |
CN116431516A (zh) | 一种用于变异测试的程序语句选择方法及系统 | |
Tao et al. | Multi-objective grammar-guided genetic programming with code similarity measurement for program synthesis | |
CN110879778A (zh) | 一种新的动态反馈和改进型补丁评价的软件自动修复方法 |
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 | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20190730 Assignee: Henan kuizhuo Network Technology Co.,Ltd. Assignor: HENAN University OF SCIENCE AND TECHNOLOGY Contract record no.: X2023980036095 Denomination of invention: A Thread Partitioning Method Based on Process Importance Granted publication date: 20221025 License type: Common License Record date: 20230531 |
|
EE01 | Entry into force of recordation of patent licensing contract |