一种汇编代码热函数中的热路径搜寻方法技术

技术编号:2852716 阅读:210 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开一种汇编代码热函数中的热路径搜寻方法,用于搜寻汇编代码中执行频率高的路径,包括:将所述汇编代码还原成控制流图,所述控制流图由多个基本块组成,并且包括所述多个基本块的信息;根据所述基本块的信息识别所述控制流图中基本块的循环信息以及循环嵌套信息;分别将所述控制流图中的每一层循环作为当前循环来搜寻该循环中所有的路径,在搜寻当前循环的路径时,不考虑当前循环的子循环的基本块;计算搜寻出的各个路径的执行频率,根据所述路径的执行频率挑选出所述热路径。本发明专利技术方法的优点:能从汇编代码中,快速准确地找出对性能影响最密切、执行频率最高的若干条热路径;有利于开发人员专注分析热路径上的代码,节省工作量。

【技术实现步骤摘要】

本专利技术涉及一种热路径搜寻方法,特别是涉及。
技术介绍
在编译器的开发过程中,开发人员经常会遇到这样的一些问题编译器的性能不如预期的好,却不知道问题出在哪里;做了某种改进之后,结果发现在有些测试例子上性能得到了提高,但是在有些例子上却有所下降;拿到性能不同的两种编译器,想知道它们在优化手段上的差异却不知如何下手。这类问题通常都要靠性能分析来解决。性能分析指的是动态地或者静态地分析程序生成的代码,找出其中的不完善之处或者是有性能潜力之处。性能分析工具可分为动态和静态两种。动态分析指的是在程序运行时,利用软件或硬件收集运行时的信息,最后给出统计信息,辅助开发人员找出性能瓶颈。比如Intel公司的VTune(Intel Corp,VTunePerformance Analyzers)可以按时间或事件对当前执行的指令采样,或者对程序进行插桩(Instrumentation),给出在各个函数、各行代码上CPU执行时间的统计信息。再如HP公司的perfmon(HP Corp,Overview of the Perfmon),它利用IA-64 Itanium处理器上的性能管理部件(PMU),统计CPU时间在各类事件上的分布,如Cache不命中、流水线清空和寄存器栈溢出等。静态分析指的是分析编译器生成的汇编代码,找出问题。ORC是IA64/Linux平台上一个面向研究的开放源码优化编译器。在开发ORC编译器的过程中,先使用VTune和perfmon做动态性能分析。但是perfmon等给出的宏观统计信息对微观问题并无多大帮助。比如虽然它指出了程序多少时间花在了指令停等上,但却无从得知哪些地方可以通过指令调度去克服。再如它指出了程序多少时间花在了执行指令上,但却不知哪些指令可以通过复写传播(CopyPropagation)、死代码删除(Dead-Code Elimination)等技术优化掉。这些信息都要靠从汇编代码中静态分析得来。但在现实中,分析汇编码的工作量很大,开发人员常常会有无从下手的感觉。比如SPEC2000中测试例子的汇编码行数动辄几十万行,无法全部分析。为了解决上述问题,一个易想到的方法是根据程序执行的2/8分布原则程序80%的时间都花在执行20%的代码,因此只需分析那些对性能影响最密切、执行频率最高的少数几个函数,即热函数。但是通常碰到的情况是这些热函数的汇编码也有数万行,特别是在做了内联(Inlining)之后,分析量依然很大。对这种思路继续拓展,可以集中精力去分析热函数中的热代码。要找出热代码,就需搜寻出热路径。所谓热路径,指的是程序执行最常走的几条路径。由于程序绝大部分时间都是花在循环上,如果把整个函数看作最外层的循环,那么每个热路径必然位于某个循环之中。因此对于选定的热函数,先要找出函数中的循环,然后在每个循环中搜寻热路径,最后按执行频率排序,选出最热的几条路径作为性能分析的基础。
技术实现思路
本专利技术的目的是克服现有的编译器静态性能分析时汇编代码数量大,不容易查找出关键代码进行分析的缺陷,提供一种编译器静态性能分析方法,即汇编代码热函数中的热路径搜寻方法,它能在编译器编译生成的汇编代码中,快速准确地找出对性能影响最密切、执行频率最高的若干条路径。为实现上述目的,本专利技术提供了,用于搜寻汇编代码中执行频率高的路径,包括步骤a)将所述汇编代码还原成控制流图,所述控制流图由多个基本块组成,并且包括所述多个基本块的信息;步骤b)根据所述基本块的信息识别所述控制流图中基本块的循环信息以及循环嵌套信息;步骤c)分别将所述控制流图中的每一层循环作为当前循环来搜寻该循环中所有的路径;其中,在搜寻当前循环的路径时,不考虑当前循环的子循环的基本块;步骤d)计算搜寻出的各个路径的执行频率,根据所述路径的执行频率挑选出所述热路径。上述技术方案中,所述基本块的信息包括基本块的执行频率、基本块的前趋块和后继块、基本块前进到后继块的概率。上述技术方案中,在步骤c)中,所述路径从当前循环的入口块开始,并沿着基本块的执行路径前进,如果在前进过程中遇到当前循环的子循环,则跳过该子循环的基本块继续前进,当在前进过程中,一当前基本块满足一终止条件时,将该当前基本块作为该路径的最后一个基本块;所述终止条件为1)所述当前基本块没有后继块;2)所述当前基本块至少有一个后继块不在当前循环内。上述技术方案中,在步骤c)中,还包括设定一阀值,在搜寻路径时,当基本块前进到其一后继块的概率小于该阀值时,则不考虑该基本块到该后继块的执行路径。在步骤d)中,所述路径的执行频率是组成该路径的所有基本块的执行频率以及组成该路径的相邻基本块之间的执行概率的乘积。本专利技术所述方法的优点在于1.能从编译器编译生成的大量汇编代码中,快速准确地找出对性能影响最密切、执行频率最高的若干条热路径。2.有利于编译器开发人员专注精力分析热路径上的代码,节省工作量。附图说明图1为本专利技术方法的流程2为实施例中的hot_path_enum函数的伪代码示意图。图3和图4为实施例中的enum_paths函数的伪代码示意图。图5为对CPU2000gap中的一个函数CollectGarb做热路径搜寻时的一个输出。图6为一个实施例中的代码控制流图具体实施方式下面结合附图和具体实施方式对本专利技术作进一步详细描述。如图1所示,一个汇编代码热函数中的热路径搜寻方法包括以下步骤在步骤10中,将汇编代码还原成控制流图。控制流图是指编译器中所使用的一种抽象数据结构,它是一个程序或过程的抽象表述。在控制流图中,每个节点表示一个基本块,有向边表示控制流中的调转。控制流图还有两个特殊块(block)入口块(entry block),出口块(exit block),控制流通过入口块进入控制流图,通过出口块结束控制流。还原控制流图的目的是为识别循环做准备。还原控制流图的操作是利用编译器profiling技术实现的。编译器profiling是一种取得程序执行信息的技术,它是一种现有技术,利用编译器profiling技术可以动态获取如基本块的执行次数,程序中每个函数执行的时间、控制流转移概率等信息。在还原控制流图操作执行完毕以后,每个基本块至少标记有下列信息Block ID基本块的ID;Frequency基本块的执行频率;Predecessors基本块在控制流图上所有前驱的ID;Successors基本块在控制流图上所有后继的ID;Probabilities依次对应控制流转移到它的每个后继的概率。图6就是一个还原以后的控制流图,在该图中包含了基本块的个数与标识,后继块的执行频率,基本块转移到其后继块的概率等信息。由于本步骤可以采用现有技术实现,在此不再详细描述。在步骤20中,由基本块的信息识别控制流图中基本块的循环信息。编译器在做循环优化时在基本块上记录循环信息,并且在代码输出时随基本块一同输出。识别循环的结果是,每个循环都有如下几种信息Loop entry简称为entry,循环的唯一入口;Loop tail简称为tail,循环的唯一结尾基本块,它有指向入口的循环回边;Loop side exitss0…sm,循环的0个或多个旁出口;Loop blocksbb1…bbn,位于此循环的所有基本块。上述的循环的结尾本文档来自技高网
...

【技术保护点】
一种汇编代码热函数中的热路径搜寻方法,用于搜寻汇编代码中执行频率高的路径,包括:步骤a):将所述汇编代码还原成控制流图,所述控制流图由多个基本块组成,并且包括所述多个基本块的信息;步骤b):根据所述基本块的信息识别所述控制流 图中基本块的循环信息以及循环嵌套信息;步骤c):分别将所述控制流图中的每一层循环作为当前循环来搜寻该循环中所有的路径;其中,在搜寻当前循环的路径时,不考虑当前循环的子循环的基本块;步骤d):计算搜寻出的各个路径的执行频率,根 据所述路径的执行频率挑选出所述热路径。

【技术特征摘要】

【专利技术属性】
技术研发人员:张军超吴承勇
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:11[中国|北京]

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

1