掌桥专利:专业的专利平台
掌桥专利
首页

代码性能的分析方法、处理设备和存储介质

文献发布时间:2023-06-19 19:30:30


代码性能的分析方法、处理设备和存储介质

技术领域

本发明涉及软件开发技术领域,特别是涉及一种代码性能的分析方法、处理设备和存储介质。

背景技术

开发人员在开发了某一代码后,通常需要分析代码的性能,以确定处理器在运行代码时的开销情况,进而对代码进行优化改进。

若能对代码的性能进行准确分析,一定程度上可以提高开发人员开发代码的效率和质量,因此,如何准确分析代码的性能成为亟待解决的问题。

发明内容

本发明主要解决的技术问题是提供一种代码性能的分析方法、处理设备和存储介质,能够提高代码性能分析的准确性。

为解决上述技术问题,本申请采用的一个技术方案是:提供一种代码性能的分析方法,所述方法包括:统计目标代码中各目标运算符的操作次数;根据所述各目标运算符的操作次数,确定所述目标代码的总耗时;根据所述目标代码的总耗时,分析所述目标代码的性能。

其中,所述统计目标代码中各目标运算符的操作次数,包括:确定各所述目标运算符的操作数对应的数据类型;统计各所述目标运算符针对每种所述数据类型的操作次数。

其中,所述各目标运算符包括单目运算符,所述统计各所述目标运算符针对每种所述数据类型的操作次数,包括:对于各所述单目运算符,基于所述单目运算符对应每种所述数据类型的操作数的出现次数,统计得到所述单目运算符针对每种所述数据类型的操作次数。

其中,所述各目标运算符包括多目运算符,所述统计各所述目标运算符针对每种所述数据类型的操作次数,包括:确定所述多目运算符对应的参考操作数,所述参考操作数为所述多目运算符的多个操作数中数据类型优先级最高的操作数;对于所述多目运算符,基于所述多目运算符对应每种所述数据类型的参考操作数的出现次数,统计得到所述多目运算符针对每种所述数据类型的操作次数。

其中,所述根据所述各目标运算符的操作次数,确定所述目标代码的总耗时,包括:基于各所述目标运算符针对每种所述数据类型的操作次数,确定各所述目标运算符针对每种所述数据类型的操作时间;将所述目标运算符针对每种所述数据类型的操作时间之和,作为所述目标代码的总耗时。

其中,所述目标运算符包括乘法运算符和加法运算符,在所述统计目标代码中各目标运算符的操作次数之后,所述方法还包括:响应于确定所述目标代码的计算语句中包括乘加运算,统计所述目标代码中所述乘加运算的操作次数,并将所述乘法运算符的操作次数减去所述乘加运算的操作次数,得到调整后的所述乘法运算符的操作次数,以及将所述加法运算符的操作次数减去所述乘加运算的操作次数,得到调整后的所述加法运算符的操作次数;所述根据所述各目标运算符的操作次数,确定所述目标代码的总耗时,包括:根据调整后的所述各目标运算符的操作次数以及所述乘加运算的操作次数,确定所述目标代码的总耗时。

其中,所述确定所述目标代码的计算语句中包括乘加运算,包括:保存所述计算语句中乘法运算结果的地址,以及所述计算语句中加法运算的两个操作数的地址;响应于所述加法运算的两个操作数的地址中的一个与所述乘法运算结果的地址相同,确定所述计算语句中包括所述乘加运算。

其中,所述根据所述目标代码的总耗时,分析所述目标代码的性能,包括:响应于所述目标代码的总耗时小于设定时间阈值,确定所述目标代码的性能符合要求;或者,响应于所述目标代码的总耗时大于或等于设定时间阈值,确定所述目标代码的性能不符合要求。

其中,所述目标运算符包括所述目标代码中的所有运算符;和/或,在所述统计目标代码中各目标运算符的操作次数之后,所述方法还包括:输出统计结果,所述统计结果包括各目标运算符的操作次数。

为解决上述技术问题,本申请采用的另一个技术方案是:提供一种处理设备,包括相互耦接的存储器和处理器,存储器存储有程序指令;处理器用于执行存储器中存储的程序指令,以实现上述代码性能的分析方法。

为解决上述技术问题,本申请采用的另一个技术方案是:提供一种计算机可读存储介质,该计算机可读存储介质用于存储程序指令,程序指令能够被执行以实现上述代码性能的分析方法。

以上方案,通过统计目标代码中各目标运算符的操作次数,来确定目标代码的总耗时。由于代码通常包括各种计算语句,而计算语句中又包括各种运算符以及对应的操作数,因此,统计出目标代码中各目标运算符的操作次数后,可以基于各目标运算符的操作次数,确定出运行这些目标运算符所消耗的总时间,从而确定出目标代码的总耗时,进而可以根据确定出的目标代码的总耗时,分析目标代码的性能,一定程度上提高了代码性能分析的准确性。

附图说明

图1是本申请提供的代码性能的分析方法一实施例的流程示意图;

图2是本申请提供的代码性能的分析方法另一实施例的流程示意图;

图3是本申请提供的代码性能的分析装置一实施例的框架示意图;

图4是本申请提供的处理设备一实施例的框架示意图;

图5是本申请提供的计算机可读存储介质一实施例的框架示意图。

具体实施方式

为使本申请的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本申请进一步详细说明。

请参阅图1,图1是本申请提供的代码性能的分析方法一实施例的流程示意图,该方法可以由计算机设备执行,计算机设备可以是运行目标代码的设备,还可以是其他的具有运算能力的设备,本实施例对此不作限定。需注意的是,若有实质上相同的结果,本发明的方法并不以图1所示的流程顺序为限。如图1所示,该方法包括如下步骤:

S101:统计目标代码中各目标运算符的操作次数。

可以理解的是,本实施例中的目标代码可以是一个项目中实现某一功能的部分代码,也可以是一个项目对应的所有代码,本实施例对此不作具体限定。

目标运算符为单目运算符或者多目运算符,多目运算符为双目运算符或者三目运算符。其中,单目运算符的操作数为1个,例如,逻辑非运算符“!”、按位取反运算符“~”、自增运算符“++”、自减运算符“--”、指针运算符“*”以及取地址运算符“&”等。双目运算符的操作数为2个,例如,加法运算符“+”、减法运算符“-”、乘法运算符“*”、除法运算符“/”以及取余运算符“%”等。三目运算符的操作数为3个,例如条件运算符“?:”。

在一些实施方式中,可以直接统计目标代码中各目标运算符的操作次数。或者,还可以先确定各目标运算符的操作数对应的数据类型,然后统计目标代码中各目标运算符针对每种数据类型的操作次数。

需要说明的是,本实施例中,统计的各目标运算符可以是目标代码中的部分运算符,例如,只统计操作时间大于或等于预设操作时间的运算符的操作次数(即只统计对代码运行时间影响较大的运算符的操作次数,而不统计操作时间小于预设操作时间的运算符的操作次数(即不统计对代码运行时间影响较小的运算符的操作次数)。预设操作时间根据实际需要进行设置。或者,本实施例中,为了进一步提高确定的目标代码的总耗时的准确性,统计的各目标运算符包括目标代码中的所有运算符。

S102:根据各目标运算符的操作次数,确定目标代码的总耗时。

由于代码通常包括各种计算语句,而计算语句包括运算符以及对应的操作数。因此,可以通过统计的各目标运算符的操作次数,得到目标代码中目标运算符的操作时间之和,并将目标代码中目标运算符的操作时间之和作为目标代码的总耗时。

此外,本实施例中,考虑到计算机设备的处理器中可能会包括实现某些特定运算的硬件电路单元,可以单独统计这些特定运算的操作次数。由于这些特定运算的操作次数中包括部分目标运算符的操作次数,因此,需要将统计的特定运算的操作次数减去部分目标运算符的操作次数,得到调整后的目标运算符的操作次数。然后,根据调整后的各目标运算符的操作次数以及特定运算的操作次数,确定目标代码的总耗时。本实施例中,特定运算可以是乘加运算。在其他的实施例中,特定运算还可以是其他的运算,本实施例在此不作具体限定。

S103:根据目标代码的总耗时,分析目标代码的性能。

本实施例中,可以将目标代码的总耗时与设定时间阈值进行比较,来分析目标代码的性能。例如,当目标代码的总耗时小于设定时间阈值时,确定目标代码的性能符合要求。当目标代码的总耗时大于或等于设定时间阈值时,确定目标代码的性能不符合要求,需要进一步优化。设定时间阈值根据目标代码的性能要求进行设置。

本实施例中,通过统计目标代码中各目标运算符的操作次数,来确定目标代码的总耗时。由于代码通常包括各种计算语句,而计算语句中又包括各种运算符以及对应的操作数,因此,统计出目标代码中各目标运算符的操作次数后,可以基于各目标运算符的操作次数,确定出运行这些目标运算符所消耗的总时间,从而确定出目标代码的总耗时,进而可以根据确定出的目标代码的总耗时,分析目标代码的性能,一定程度上提高了代码性能分析的准确性。

请参阅图2,图2是本申请提供的代码性能的分析方法另一实施例的流程示意图。如图2所示,该方法包括如下步骤:

S201:确定目标代码中各目标运算符的操作数对应的数据类型。

其中,目标代码以及目标运算符的相关内容,参见前述步骤101,在此省略详细描述。

数据类型包括字节型(byte)、短整型(short)、整型(int)、长整型(long)、单精度浮点型(float)、双精度浮点型(double)、字符型(char)以及布尔型(boolean)。各目标运算符的操作数对应的数据类型为前述八种数据类型中的一种。

在一实施方式中,可以根据目标运算符的操作数对应的变量定义,来确定操作数的数据类型。例如,y=a+b中包括加法运算符对应的两个操作数变量a和变量b,变量a和变量b的定义分别为“int a=1”和“float b=1.0”,由变量a和变量b的定义可知,变量a对应的数据类型为整型,变量b对应的数据类型为单精度浮点型。

S202:统计各目标运算符针对每种数据类型的操作次数。

考虑到对于同一个运算符,当其操作数的数据类型不同时,对应的操作时间可能不同。例如,变量a为整型,变量b为长整型,a++和b++的操作时间是不同的。因此,本实施例中,先确定各目标运算符的操作数对应的数据类型,然后统计各目标运算符针对每种数据类型的操作次数。

进一步地,本实施例中统计各目标运算符针对每种数据类型的操作次数时,分单目运算符和多目运算符两种类型进行统计。

在一实施方式中,目标代码的各目标运算符包括单目运算符。由于单目运算符只有一个操作数,因此,对于各单目运算符,可以基于单目运算符对应每种数据类型的操作数的出现次数,统计得到单目运算符针对每种数据类型的操作次数。

示例性地,目标代码中包括多个按位取反运算符,且目标代码中这多个按位取反运算符的操作数的数据类型包括整型和字符型。统计目标代码中按位取反运算符对应整型的操作数的出现次数,并将统计的整型的操作数的出现次数作为按位取反运算符针对整型的操作次数。以及,统计目标代码中按位取反运算符对应字符型的操作数的出现次数,并将统计的字符型的操作数的出现次数作为按位取反运算符针对字符型的操作次数。

在一实施方式中,目标代码的各目标运算符包括多目运算符。由于当多目运算符号的多个操作数的数据类型不同时,计算机设备会先按照数据类型的优先级顺序将多目运算符的多个操作数的数据类型转换为同一种数据类型,然后再执行该多目运算符对应的运算,转换后的数据类型为多个操作数中数据类型优先级最高的数据类型。数据类型的优先级顺序从低到高为:字节型、短整型、字符型、整型、长整型、单精度浮点型、双精度浮点型。其中字节型、短整型和字符型的优先级相同。

因此,本实施方式中,为了提高统计的目标运算符的操作次数的准确性,先确定多目运算符对应的参考操作数;然后基于多目运算符对应每种数据类型的参考操作数的出现次数,统计得到多目运算符针对每种数据类型的操作次数。其中,参考操作数为多目运算符的多个操作数中数据类型优先级最高的操作数。

下面以统计目标代码中加法运算符针对每种数据类型的操作次数,进行示例性说明。

首先,根据各加法运算符的2个操作数的数据类型优先级,确定出各加法运算符对应的参考操作数。例如,y=a+b中,加法运算符的2个操作数分别为a和b,且a的数据类型为整型,b的数据类型为单精度浮点型。由于单精度浮点型的优先级高于整型,因此,可以确定y=a+b中加法运算符对应的参考操作数为b。

然后,再基于加法运算符对应每种数据类型的参考操作数的出现次数,统计达到目标代码中加法运算符针对每种数据类型的操纵次数。例如,根据上述方式确定出目标代码中加法运算符的参考操作数的数据类型包括整型和单精度浮点型。则统计目标代码中加法运算符对应整型的参考操作数的出现次数,并将统计的整型的参考操作数的出现次数作为加法运算符针对整型的操作次数。以及,统计目标代码中加法运算符对应单精度浮点型的参考操作数的出现次数,并将统计的单精度浮点型的参考操作数的出现次数作为加法运算符针对单精度浮点型的操作次数。

进一步地,为了便于统计各目标运算符针对每种数据类型的操作次数,可以为各目标运算符针对每种数据类型的操作次数分别设置统计变量,并将各目标运算符针对每种数据类型的统计变量保存在同一统计堆栈中。

进一步地,为了便于统计各目标运算符针对每种数据类型的操作次数,还可以定义针对每种数据类型的操作次数的统计函数。每种数据类型的统计函数中包括针对该数据类型的操作次数的统计变量以及统计算法。

考虑到不同的数据类型的位数在不同位数的平台中可能会发生变化,为了便于将目标代码移植到不同的平台,使用通用数据类型名称定义目标代码内的各数据类型,例如,将字符型定义为S08、将短整型定义为S16,将无符号整型(unsigned int)定义为U32。

上述步骤S201和S202中,先确定目标代码中各目标运算符的操作数对应的数据类型,然后再统计各目标运算符针对每种数据类型的操作次数。由于同一个运算符的操作数的数据类型不同时,执行该运算符对应的运算所耗费的时间可能不同。采用该种方式统计目标运算符的操作次数,可以使得最终确定出的目标代码的总耗时更为准确。

可选地,上述步骤S201和步骤S202还可以被替换为直接统计目标代码中各目标运算符的操作次数,即不针对目标运算符的操作数的数据类型进行分类统计。例如,目标代码中包括加法运算符和乘法运算符,统计加法运算符的操作次数和乘法运算符的操作次数。

可选地,为了提高计算机设备运行代码的效率,计算机设备的处理器中通常设置有实现乘加运算(MAC,Multiply Accumulate)的硬件电路单元(乘数累加器)。因此,本实施例中,还可以对目标代码中的乘加运算进行单独统计。则在执行步骤S202之后还可以包括:响应于目标代码的计算语句中包括乘加运算,统计目标代码中乘加运算的操作次数,并将乘法运算符的操作次数减去乘加运算的操作次数,得到调整后的乘法运算符的操作次数,以及将加法运算符的操作次数减去乘加运算的操作次数,得到调整后的加法运算符的操作次数。

由于在前述步骤S202中已经统计了目标代码中所有乘法运算符的操作次数和所有加法运算符的操作次数,而乘加运算(例如,y=a*x+b或者y=b+a*x)中包括一个乘法运算和一个加法运算。因此,为了提高统计的目标运算符的操作次数的准确性,需要将统计的乘法运算符的操作次数减去乘加运算符的操作次数,以及将加法运算符的操作次数减去乘加运算符的操作次数。

具体地,确定目标代码的计算语句中是否包括乘加运算包括:保存计算语句中乘法运算结果的地址,以及计算语句中加法运算的两个操作数的地址;当加法运算的两个操作数的地址中的一个与乘法运算结果的地址相同时,确定计算语句中包括乘加运算;或者当加法运算的两个操作数的地址与乘法运算结果的地址均不相同时,确定计算语句中不包括乘加运算。

下面通过举例说明本实施例中如何确定计算语句中是否包括乘加运算。乘加运算包括y=a*x+b或者y=b+a*x这两种形式,用变量A保存乘法运算a*x的结果地址,用变量B和C分别保存加法运算左右两个操作数的地址。

在一示例中,如果计算语句中包括a*x+b,则变量A保存的乘法运算a*x的结果地址与变量B保存的左操作数a*x的地址相同,确定计算语句中包括乘加运算。如果计算语句中加法运算的左操作数除了包括乘法运算a*x外还包括其他的附加运算,例如(a*x<<1)+b,则变量A保存的乘法运算a*x的结果地址与变量B保存的左操作数的地址(a*x<<1的结果地址)不相同,确定计算语句中不包括乘加运算。

在一示例中,如果计算语句中包括b+a*x,则变量A保存的乘法运算a*x的结果地址与变量C保存的右操作数a*x的地址相同,确定计算语句中包括乘加运算。如果计算语句中加法运算的右操作数除了包括乘法运算a*x外还包括其他的附加运算,例如b+(a*x<<1),则变量A保存的乘法运算a*x的结果地址与变量C保存的右操作数的地址(a*x<<1的结果地址)不相同,确定计算语句中不包括乘加运算。

具体地,乘加运算的操作次数的统计方式与加法运算符的统计方式相同,即先确定乘加运算对应的参考操作数;基于乘加运算对应每种数据类型的参考操作数的出现次数,统计得到乘加运算针对每种数据类型的操作次数。其中,乘加运算对应的参考操作数为加法运算的多个操作数中数据类型优先级最高的操作数。相关内容可参照步骤S202中多目运算符的统计方式,在此省略详细描述。

进一步地,为了便于统计乘加运算针对每种数据类型的操作次数,可以为乘加运算针对每种数据类型的操作次数分别设置统计变量,并将乘加运算针对每种数据类型的统计变量保存在同一统计堆栈中。当加法运算的两个操作数的地址中的一个与乘法运算结果的地址相同时,确定计算语句中包括乘加运算,将统计乘加运算的相应统计变量的值加1,以及将统计加法运算符的操作次数的统计变量以及统计乘法运算符的操作次数的统计变量的值减1。或者,当加法运算的两个操作数的地址与乘法运算结果的地址均不相同时,确定计算语句中不包括乘加运算,则清空乘加运算的统计堆栈,准备下一个目标运算符的统计。

S203:根据各目标运算符的操作次数,计算目标代码的总耗时。

本实施例中,可以基于各目标运算符针对每种数据类型的操作次数,确定各目标运算符针对每种数据类型的操作时间;将各目标运算符针对每种数据类型的操作时间之和,作为目标代码的总耗时。

在一实施方式中,计算机设备的存储单元中存储有各目标运算符针对每种数据类型的操作数的操作时间,例如,加法运算符的参考操作数的数据类型为整型的操作时间、为单精度浮点型的操作时间以及为长整型的操作时间等。计算机设备可以直接从存储单元中获取各目标运算符针对每种数据类型的操作数的操作时间,然后将获取的各目标运算符针对每种数据类型的操作数的操作时间分别乘以各目标运算符针对每种数据类型的操作次数,得到各目标运算符针对每种数据类型的操作时间。例如,将加法运算符针对整型的参考操作数的操作时间乘以加法运算符针对整型的操作次数,得到加法运算符针对整型的操作时间;将加法运算符针对单精度浮点型的参考操作数的操作时间乘以加法运算符针对单精度浮点型的操作次数,得到加法运算符针对单精度浮点型的操作时间。示例性地,计算机设备中存储的各目标运算符针对每种数据类型的操作数的操作时间为经验值。

在一实施方式中,基于各目标运算符针对每种数据类型的操作次数以及运行目标代码的设备的峰值算力,确定各目标运算符针对每种数据类型的操作时间。

在一具体应用中,采用公式(1)确定各目标运算符针对每种数据类型的操作时间。公式(1)如下:

公式(1)中y表示各目标运算符针对每种数据类型的操作时间。N表示统计的各目标运算符针对每种数据类型的操作次数,m表示运行目标代码的设备的峰值算力,系数1000用于将各目标运算符针对每种数据类型的操作时间的单位转换为毫秒。其中,计算机设备的存储单元中存储有运行目标代码的设备的峰值算力,计算机设备可以直接从存储单元中获取运行目标代码的设备的峰值算力。或者,可以采用公式(2)计算得到运行目标代码的设备的峰值算力,公式(2)如下:

Y=N*f*M(2)

公式(2)中,Y表示运行目标代码的设备的峰值算力,N表示运行目标代码的设备的处理器的个数,f表示运行目标代码的设备的处理器频率,M表示运行目标代码的设备每时钟周期可执行的最高浮点运算(FMAD,乘加指令)次数。其中,N、f和M为设定值,计算机设备的存储单元中存储有N、f和M的值。需要说明的是,由于不同的设备的峰值算力可能相同或者不同,本实施方式中,需要根据具体的运行目标代码的设备的峰值算力,确定各目标运算符针对每种数据类型的操作时间。

可选地,当本实施例中还统计了乘加运算的操作次数时,步骤S203还可以被替换为,根据调整后的各目标运算符的操作次数以及乘加运算的操作次数,确定目标代码的总耗时。调整后的各目标运算符针对每种数据类型的操作时间,以及乘加运算针对每种数据类型的操作时间,均可以采用上述实施方式进行确定,在此不再赘述。

S204:根据目标代码的总耗时,分析目标代码的性能。

本实施例中,将目标代码的总耗时与设定时间阈值进行比较,来分析目标代码的性能。当目标代码的总耗时小于设定时间阈值时,确定目标代码的性能符合要求;或者,当目标代码的总耗时大于或等于设定时间阈值,确定目标代码的性能不符合要求。设定时间阈值根据实际目标代码性能要求进行设定。例如,当目标代码的总耗时小于设定时间阈值时,确定目标代码的性能符合要求,可以移植到其他平台进行使用;当目标代码的总耗时大于或等于设定时间阈值时,确定目标代码的性能不符合要求,不可以移植到其他平台进行使用,需要对目标代码进行进一步优化。

进一步地,为了便于开发人员对目标代码进行优化,本实施例中,可以在统计目标代码中各目标运算符的操作次数之后,输出统计结果,或者,在确定目标代码的性能不符合要求之后,输出统计结果。统计结果包括各目标运算符的操作次数,或者包括各目标运算符针对每种数据类型的操作次数。示例性地,统计结果的输出形式可以是表格或者其他形式,本实施例不作具体限定。

本实施例中,可以通过统计各目标运算符针对每种数据类型的操作次数,来确定目标代码的总耗时;或者,可以通过调整后的各目标运算符的操作次数和乘加运算的操作次数,确定目标代码的总耗时。由于,同一个运算符的操作数的数据类型不同时,执行该运算符对应的运算所耗费的时间可能不同。采用本实施例的方式,可以使得最终确定出的目标代码的总耗时更为准确,进而可以根据准确的目标代码的总耗时准确分析目标代码的性能,提高了分析目标代码的准确性。

请参阅图3,图3是本申请提供的代码性能的分析装置一实施例的框架示意图。本实施方式中,代码性能的分析装置30包括:统计模块31、确定模块32和分析模块33。

其中,统计模块31用于统计目标代码中各目标运算符的操作次数。确定模块32用于根据所述各目标运算符的操作次数,确定所述目标代码的总耗时。分析模块33用于根据所述目标代码的总耗时,分析所述目标代码的性能。

可选地,所述统计模块31用于确定各所述目标运算符的操作数对应的数据类型;统计各所述目标运算符针对每种所述数据类型的操作次数。

可选地,所述各目标运算符包括单目运算符,对于各所述单目运算符,所述统计模块31用于基于所述单目运算符对应每种所述数据类型的操作数的出现次数,统计得到所述单目运算符针对每种所述数据类型的操作次数。

可选地,所述各目标运算符包括多目运算符,所述统计模块31用于确定所述多目运算符对应的参考操作数,所述参考操作数为所述多目运算符的多个操作数中数据类型优先级最高的操作数;对于所述多目运算符,基于所述多目运算符对应每种所述数据类型的参考操作数的出现次数,统计得到所述多目运算符针对每种所述数据类型的操作次数。

可选地,所述确定模块32用于基于各所述目标运算符针对每种所述数据类型的操作次数,确定各所述目标运算符针对每种所述数据类型的操作时间;将所述目标运算符针对每种所述数据类型的操作时间之和,作为所述目标代码的总耗时。

可选地,所述目标运算符包括乘法运算符和加法运算符,在所述统计目标代码中各目标运算符的操作次数之后,所述统计模块31还用于响应于确定所述目标代码的计算语句中包括乘加运算,统计所述目标代码中所述乘加运算的操作次数,并将所述乘法运算符的操作次数减去所述乘加运算的操作次数,得到调整后的所述乘法运算符的操作次数,以及将所述加法运算符的操作次数减去所述乘加运算的操作次数,得到调整后的所述加法运算符的操作次数;所述确定模块32用于根据调整后的所述各目标运算符的操作次数以及所述乘加运算的操作次数,确定所述目标代码的总耗时。

可选地,所述统计模块31用于保存所述计算语句中乘法运算结果的地址,以及所述计算语句中加法运算的两个操作数的地址;响应于所述加法运算的两个操作数的地址中的一个与所述乘法运算结果的地址相同,确定所述计算语句中包括所述乘加运算。

可选地,所述分析模块33用于响应于所述目标代码的总耗时小于设定时间阈值,确定所述目标代码的性能符合要求;或者,响应于所述目标代码的总耗时大于或等于设定时间阈值,确定所述目标代码的性能不符合要求。

可选地,所述目标运算符包括所述目标代码中的所有运算符;和/或,所述统计模块31还用于在统计目标代码中各目标运算符的操作次数之后,输出统计结果,所述统计结果包括各目标运算符的操作次数。

需要说明的是,本实施方式的装置可以执行上述方法中的步骤,相关内容的详细说明请参见上述方法部分,在此不再赘叙。

请参阅图4,图4是本申请提供的处理设备一实施例的框架示意图。本实施方式中,处理设备40包括存储器41和处理器42。

处理器42还可以称为CPU(Central Processing Unit,中央处理单元)。处理器42可能是一种集成电路芯片,具有信号的处理能力。处理器42还可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器42也可以是任何常规的处理器42等。

处理设备40中的存储器41用于存储处理器42运行所需的程序指令。

处理器42用于执行程序指令以实现本申请中的代码性能的分析方法。

请参阅图5,图5是本申请提供的计算机可读存储介质一实施例的框架示意图。本申请实施例的计算机可读存储介质50存储有程序指令51,该程序指令51被执行时实现本申请提供的代码性能的分析方法。其中,该程序指令51可以形成程序文件以软件产品的形式存储在上述计算机可读存储介质50中,以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施方式方法的全部或部分步骤。而前述的计算机可读存储介质50包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质,或者是计算机、服务器、手机、平板等终端设备。

以上方案,通过统计目标代码中各目标运算符的操作次数,来确定目标代码的总耗时。由于代码通常包括各种计算语句,而计算语句中又包括各种运算符以及对应的操作数,因此,统计出目标代码中各目标运算符的操作次数后,可以基于各目标运算符的操作次数,确定出运行这些目标运算符所消耗的总时间,从而确定出目标代码的总耗时,进而可以根据确定出的目标代码的总耗时,分析目标代码的性能,一定程度上提高了代码性能分析的准确性。

在一些实施例中,本公开实施例提供的装置具有的功能或包含的模块可以用于执行上文方法实施例描述的方法,其具体实现可以参照上文方法实施例的描述,为了简洁,这里不再赘述。

上文对各个实施例的描述倾向于强调各个实施例之间的不同之处,其相同或相似之处可以互相参考,为了简洁,本文不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和系统,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本申请的实施方式,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

相关技术
  • 一种代码覆盖率分析方法、装置、设备及存储介质
  • 一种代码转换方法、装置及设备、存储介质
  • SVN中代码同步与通知的方法、存储介质、设备和系统
  • 基于哈希值的代码克隆检测方法、电子设备、存储介质
  • 代码测试方法及装置、存储介质、电子设备
  • 代码分析方法、代码分析装置、电子设备及存储介质
  • 信息处理设备、用于控制信息处理设备的方法、存储控制工具的非临时记录介质、主机装置、存储性能评估工具的非临时记录介质、以及用于外部存储装置的性能评估方法
技术分类

06120115935634