轮廓技术编译的优化方法及装置的制造方法

文档序号:8298901阅读:437来源:国知局
轮廓技术编译的优化方法及装置的制造方法
【技术领域】
[0001 ] 本发明实施例涉及网络技术,尤其涉及一种轮廓技术编译的优化方法及装置。
【背景技术】
[0002]现代优化编译器的一般做法是采用轮廓(Profiling)技术,轮廓技术是一种用于收集程序运行时信息的重要方法,包括边轮廓技术(edge profiling)、跨距轮廓技术(stride profiling)、值轮廓技术(value profiling)等多种形式,其中以 edge profiling的应用最为广泛。
[0003]现有的Edge Prof iling方法,是在编译时生成的控制流图上,插入可以计算每条边执行次数、但数目最少的插桩函数;这样生成的可执行文件将在运行时刻数次调用插桩函数,收集程序的运行时信息并以文件形式保存。图1为现有的边轮廓技术中的划分基本块示意图,如图1所示,在编译器中,源程序会首先被转换成中间表示,并在中间表示上划分基本块(这里仍然将中间表示表达成C语言的形式),如等。图2为现有的边轮廓技术中的控制流图及插桩示意图,如图2所示,由基本块构建控制流图,并给其中的每一条边标号,并对控制流图上的主要边插桩(有些编译器是对每一条边都做插桩),即插入函数调用用以计数该条边的执行次数(Edge id表示边的序号),插桩函数如INSTRU1、INSTRU2。
[0004]现有的Edge Profiling方法,由于加入了大量的插桩函数调用,执行效率十分低下。

【发明内容】

[0005]本发明实施例提供一种轮廓技术编译的优化方法及装置,以克服现有技术中轮廓技术编译时执行效率较低的问题。
[0006]第一方面,本发明实施例提供一种轮廓技术编译的优化方法,包括:
[0007]在程序控制流图上划分出至少两个区域,将各个区域对应程序包含的插桩函数替换为计数操作;
[0008]将所述各个区域对应程序在主线程上执行,执行至一个区域对应程序结束时,启动至少一个微线程执行所述区域对应程序包含的插桩函数除计数操作外的操作,用于记录所述区域对应程序执行时的信息;所述微线程与执行下一个区域对应程序的主线程并行执行。
[0009]结合第一方面,在第一方面的第一种实现方式中,所述将各个区域对应程序包含的插桩函数替换为计数操作,包括:
[0010]在各个区域对应程序的入口处,开辟一个大小为N*2的二维数组空间,所述N为所述各个区域对应程序包含的插桩函数个数的最大值;
[0011]将所述二维数组的第i*2个元素赋值为所述程序控制流图中边的序号,所述二维数组的第i*2+l个元素用于计数,所述i表示第i个插桩函数,所述i取值为大于等于O且小于等于N。
[0012]结合第一方面的第一种实现方式,在第一方面的第二种实现方式中,所述执行至一个区域对应程序结束时,启动至少一个微线程执行所述区域对应程序的插桩函数除计数操作外的操作,包括:
[0013]若所述二维数组的第i*2+l个元素的值不为0,则执行所述插桩函数的次数等于所述第i*2+l个元素的值,所述插桩函数的输入参数为所述二维数组的第i*2个元素。
[0014]结合第一方面的第一、二任意一种实现方式,在第一方面的第三种实现方式中,所述执行至一个区域对应程序结束时,启动至少一个微线程执行所述区域对应程序的插桩函数除计数操作外的操作,包括:
[0015]执行所述区域对应程序的插桩函数结束后,释放所述二维数组空间。
[0016]第二方面,本发明实施例提供一种轮廓技术编译的优化装置,包括:
[0017]预处理模块,用于在程序控制流图上划分出至少两个区域,将各个区域对应程序包含的插桩函数替换为计数操作;
[0018]处理模块,用于将所述各个区域对应程序在主线程上执行,执行至一个区域对应程序结束时,启动至少一个微线程执行所述区域对应程序包含的插桩函数除计数操作外的操作,用于记录所述区域对应程序执行时的信息;所述微线程与执行下一个区域对应程序的主线程并行执行。
[0019]结合第二方面,在第二方面的第一种实现方式中,所述预处理模块具体用于:
[0020]在各个区域对应程序的入口处,开辟一个大小为N*2的二维数组空间,所述N为所述各个区域对应程序包含的插桩函数个数的最大值;
[0021]将所述二维数组的第i*2个元素赋值为所述程序控制流图中边的序号,所述二维数组的第i*2+l个元素用于计数,所述i表示第i个插桩函数,所述i取值为大于等于O且小于等于N。
[0022]结合第二方面的第一种实现方式,在第二方面的第二种实现方式中,所述处理模块具体用于:
[0023]若所述二维数组的第i*2+l个元素的值不为0,则执行所述插桩函数的次数等于所述第i*2+l个元素的值,所述插桩函数的输入参数为所述二维数组的第i*2个元素。
[0024]结合第二方面的第一、二任意一种实现方式,在第二方面的第三种实现方式中,所述处理模块还用于:
[0025]执行所述区域对应程序的插桩函数结束后,释放所述二维数组空间。
[0026]本发明实施例轮廓技术编译的优化方法及装置,通过在程序控制流图上划分出至少两个区域,将各个区域对应程序包含的插桩函数替换为计数操作;将所述各个区域对应程序在主线程上执行,执行至一个区域对应程序结束时,启动至少一个微线程执行所述区域对应程序包含的插桩函数除计数操作外的操作;所述微线程与执行下一个区域对应程序的主线程并行执行,因为将程序中每个区域内的插桩函数的一部分操作转移到微线程上,此微线程与执行下一个区域对应程序的主线程并行执行,提高了轮廓技术编译时的执行效率,解决了现有技术中执行效率较低的问题。
【附图说明】
[0027]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0028]图1为现有的边轮廓技术中的划分基本块示意图;
[0029]图2为现有的边轮廓技术中的控制流图及插桩示意图;
[0030]图3为本发明轮廓技术编译的优化方法实施例一的流程图;
[0031]图4为实施例一中的控制流图示意图;
[0032]图5为对图4中控制流图划分区域后的示意图;
[0033]图6为对图5中控制流图的插桩函数处理后的示意图;
[0034]图7A为对图6中控制流图执行的示意图一;
[0035]图7B为对图6中控制流图执行的示意图二 ;
[0036]图8为本发明轮廓技术编译的优化装置实施例的结构示意图;
[0037]图9为本发明轮廓技术编译的优化设备实施例的结构示意图。
【具体实施方式】
[0038]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0039]图3为本发明轮廓技术编译的优化方法实施例一的流程图,图4为实施例一中的控制流图示意图,图5为对图4中控制流图划分区域后的示意图,图6为对图5中控制流图的插粧函数处理后的不意图。图7A为对图6中控制流图执行的不意图一。图7B为对图6中控制流图执行的示意图二。本实施例的执行主体为轮廓技术编译的优化装置,该装置可以通过软件和/或硬件实现。本实施例的方案应用在轮廓技术编译中。如图3所示,本实施例的方法可以包括:
[0040]步骤301、在程序控制流图上划分出至少两个区域,将各个区域对应程序包含的插桩函数替换为计数操作。
[0041]具体地,本实施例中以边轮廓技术为例来说明,首先将如图4所示的控制流图划分区域,区域是控制流图上一个相连的子区域,由一个或数个基本块和连接它们的边构成,可以看成是一个区域节点。区域节点可以嵌套。区域节点具有以下三种类型:1)循环域节点,包含一个循环内所有基本块及相连边(内部包含回边);2)异常域节点,是一个相互连接的基本块集合,其中包含不可归约的控制流图(内部包含不可规约的环边);3)多入多出域节点,多入口多出口(内部不包含环边),其中包括单入多出类型的域节点。
[0042]多个区域节点及其相连的边可以构成区域控制流图;区域控制流图上没有回边;构建区域节点及区域控制流图不对原控制流图及基本块进行任何改变。
[0043]划分区域的
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1