CN112015426B - 一种代码管理方法、装置及设备 - Google Patents
一种代码管理方法、装置及设备 Download PDFInfo
- Publication number
- CN112015426B CN112015426B CN202010831046.3A CN202010831046A CN112015426B CN 112015426 B CN112015426 B CN 112015426B CN 202010831046 A CN202010831046 A CN 202010831046A CN 112015426 B CN112015426 B CN 112015426B
- Authority
- CN
- China
- Prior art keywords
- code
- target
- quality
- baseline
- sub
- 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
- 238000007726 management method Methods 0.000 title abstract description 20
- 238000000034 method Methods 0.000 claims abstract description 49
- 238000005457 optimization Methods 0.000 claims description 127
- 238000013461 design Methods 0.000 claims description 116
- 230000006870 function Effects 0.000 claims description 46
- 238000004364 calculation method Methods 0.000 claims description 39
- 238000013528 artificial neural network Methods 0.000 claims description 34
- 230000009467 reduction Effects 0.000 claims description 22
- 238000003860 storage Methods 0.000 claims description 15
- 238000006243 chemical reaction Methods 0.000 claims description 6
- 125000004122 cyclic group Chemical group 0.000 claims description 4
- 239000000758 substrate Substances 0.000 claims 3
- 238000011161 development Methods 0.000 abstract description 9
- 238000011156 evaluation Methods 0.000 description 27
- 230000008569 process Effects 0.000 description 25
- 238000012360 testing method Methods 0.000 description 24
- 230000006978 adaptation Effects 0.000 description 14
- 238000004422 calculation algorithm Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 13
- 238000013507 mapping Methods 0.000 description 12
- 238000012545 processing Methods 0.000 description 12
- 238000012549 training Methods 0.000 description 10
- 238000004590 computer program Methods 0.000 description 7
- 230000005284 excitation Effects 0.000 description 5
- 238000011176 pooling Methods 0.000 description 5
- 238000012423 maintenance Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 238000013527 convolutional neural network Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 238000007373 indentation Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000002123 temporal effect Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 238000011981 development test Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013210 evaluation model Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013178 mathematical model Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供一种代码管理方法、装置及设备,该方法包括:获取初始基线代码;根据初始基线代码的代码特征,确定初始基线代码的代码质量;若所述代码质量满足质量要求,则对初始基线代码进行优化,得到优化后的目标基线代码,所述目标基线代码的性能优于所述初始基线代码的性能;将所述目标基线代码转换成与目标平台匹配的待部署代码;将所述待部署代码部署到所述目标平台。通过本申请的技术方案,能够有效提升开发效率,并提高用户体验。
Description
技术领域
本申请涉及计算机技术领域,尤其是一种代码管理方法、装置及设备。
背景技术
在嵌入式平台业务或者算法开发等应用场景中,通常情况下,工程师会在基准平台(如x86设备等)完成代码开发和测试等工作,得到基线代码。
在得到基线代码之后,需要将该基线代码部署到目标平台(如安防设备等),由于目标平台的工作环境与基准平台的工作环境不同,如目标平台的计算资源远远小于基准平台的计算资源,因此,在将基线代码部署到目标平台时,工程师需要根据目标平台的需求对基线代码进行优化,得到优化后的目标代码。
在得到目标代码之后,可以将目标代码部署到目标平台,且工程师需要在目标平台对目标代码进行测试,若测试通过,则由目标平台运行目标代码。
综上所述,将基线代码优化为目标代码的过程,由工程师手动完成,即工程师手动实现跨平台的代码转换,开发效率比较低,用户体验比较差。
发明内容
本申请提供一种代码管理方法,所述方法包括:
获取初始基线代码;
根据所述初始基线代码的代码特征,确定所述初始基线代码的代码质量;
若所述代码质量满足质量要求,则对所述初始基线代码进行优化,得到优化后的目标基线代码,所述目标基线代码的性能优于所述初始基线代码的性能;
将所述目标基线代码转换成与目标平台匹配的待部署代码;
将所述待部署代码部署到所述目标平台。
本申请提供一种代码管理装置,所述装置包括:
获取模块,用于获取初始基线代码;
确定模块,用于根据所述初始基线代码的代码特征,确定所述初始基线代码的代码质量;
优化模块,用于若所述代码质量满足质量要求,则对所述初始基线代码进行优化,得到优化后的目标基线代码;其中,所述目标基线代码的性能优于所述初始基线代码的性能;
转换模块,用于将所述目标基线代码转换成与目标平台匹配的待部署代码;
部署模块,用于将所述待部署代码部署到所述目标平台。
本申请提供一种代码管理设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现如下的步骤:
获取初始基线代码;
根据所述初始基线代码的代码特征,确定所述初始基线代码的代码质量;
若所述代码质量满足质量要求,则对所述初始基线代码进行优化,得到优化后的目标基线代码,所述目标基线代码的性能优于所述初始基线代码的性能;
将所述目标基线代码转换成与目标平台匹配的待部署代码;
将所述待部署代码部署到所述目标平台。
由以上技术方案可见,本申请实施例中,可以根据初始基线代码的代码特征,确定初始基线代码的代码质量,若该代码质量满足质量要求,则对初始基线代码进行优化,得到优化后的目标基线代码,并将目标基线代码转换成与目标平台匹配的待部署代码,将待部署代码部署到目标平台。上述方式能够实现跨平台的代码自动优化过程,实现从代码自动评价,代码自动优化,代码自动部署的整体解决方案,能够有效提升开发效率,并提高用户体验。
附图说明
为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其他的附图。
图1是本申请一种实施方式中的代码管理方法的流程图;
图2是本申请另一种实施方式中的代码管理方法的流程图;
图3是本申请一种实施方式中的编码规范质量的确定示意图;
图4是本申请一种实施方式中的设计实现质量的确定示意图;
图5是本申请一种实施方式中的代码自动优化的示意图;
图6是本申请一种实施方式中的计算复杂度的自动优化示意图;
图7是本申请一种实施方式中的计算资源利用率的自动优化示意图;
图8是本申请一种实施方式中的代码管理装置的结构图;
图9是本申请一种实施方式中的代码管理设备的结构图。
具体实施方式
在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本申请实施例中提出一种代码管理方法,可以应用于嵌入式平台业务或者算法开发等应用场景,用于实现跨平台代码的自动优化,将基于基准平台的基线代码,转换成与目标平台匹配的待部署代码,并将该待部署代码部署到目标平台。在跨平台代码的自动优化过程中,可以实现代码自动评价、代码自动优化、代码自动部署、代码自动测试等过程,是一整套的完整解决方案。
示例性的,目标平台可以是各种类型的嵌入式设备,例如,基于CPU(CentralProcessing Unit,中央处理器),DSP(Digital Signal Processing,数字信号处理),ASIC(Application Specific Integrated Circuit,专用集成电路),GPU(GraphicsProcessing Unit,图形处理器)等的嵌入式设备,该嵌入式设备可以包括但不限于智能终端,门禁设备,安防设备,录音笔,人工智能设备,移动设备等。
以下结合具体实施例,对本申请实施例的代码管理方法进行说明。
参见图1所示,为代码管理方法的流程示意图,该方法可以包括:
步骤101,获取初始基线代码。
示例性的,可以在某个易于调试和开发的基线平台(如主机或者x86设备等)中开发初始基线代码(如算法代码或者业务代码等),在完成初始基线代码的开发和测试后,可以将该初始基线代码部署到目标平台(如某个特定的难以调试的目标平台)。在此基础上,在完成初始基线代码的开发和测试后,在将初始基线代码部署到目标平台之前,可以获取该初始基线代码。
步骤102,根据初始基线代码的代码特征,确定初始基线代码的代码质量。
在一种可能的实施方式中,初始基线代码的代码特征可以包括初始基线代码的编码规范特征和设计实现特征,可以根据该编码规范特征确定初始基线代码的编码规范质量,并根据该设计实现特征确定初始基线代码的设计实现质量,并根据该编码规范质量和该设计实现质量,确定初始基线代码的代码质量。或者,初始基线代码的代码特征可以包括初始基线代码的编码规范特征,可以根据该编码规范特征确定初始基线代码的编码规范质量,并根据该编码规范质量确定初始基线代码的代码质量。或者,初始基线代码的代码特征可以包括初始基线代码的设计实现特征,可以根据该设计实现特征确定初始基线代码的设计实现质量,并根据该设计实现质量确定初始基线代码的代码质量。
当然,上述只是几个示例,对此不做限制,除了编码规范特征和设计实现特征,代码特征还可以包括其它类型的特征,对此不做限制。
步骤103,若该代码质量满足质量要求,则对初始基线代码进行优化,得到优化后的目标基线代码,目标基线代码的性能优于初始基线代码的性能。
示例性的,在初始基线代码的优化过程,可以从内存使用、算法选型和计算资源利用率等维度,对初始基线代码进行优化,提升算法性能。内存使用是指:压缩和裁剪代码使用的堆空间、栈空间和程序数据段空间,和/或,在保证代码结果一致性的前提下,减少内存访问次数。算法选型是指:实现同样功能选用时间复杂度少的优化算子。计算资源利用率是指:通过并行化、访存优化、循环优化等方式,提高CPU,cache存储器,DDR(Double DataRate Synchronous Dynamic Random Access Memory,双倍速率同步动态随机存储器)效率。
在一种可能的实施方式中,初始基线代码的优化过程可以包括但不限于:
情况一、从内存使用、算法选型和计算资源利用率等三个维度,对初始基线代码进行优化。比如说,以降低初始基线代码的计算复杂度为优化目标,对初始基线代码进行优化,得到优化后的第一基线代码;以降低第一基线代码的计算资源利用率为优化目标,对第一基线代码进行优化,得到优化后的第二基线代码;以降低第二基线代码的内存使用量为优化目标,对第二基线代码进行优化,得到优化后的目标基线代码。或者,以降低初始基线代码的计算复杂度为优化目标,对初始基线代码进行优化,得到优化后的第一基线代码;以降低第一基线代码的内存使用量为优化目标,对第一基线代码进行优化,得到优化后的第二基线代码;以降低第二基线代码的计算资源利用率为优化目标,对第二基线代码进行优化,得到优化后的目标基线代码。或者,以降低初始基线代码的内存使用量为优化目标,对初始基线代码进行优化,得到优化后的第一基线代码;以降低第一基线代码的计算复杂度为优化目标,对第一基线代码进行优化,得到优化后的第二基线代码;以降低第二基线代码的计算资源利用率为优化目标,对第二基线代码进行优化,得到优化后的目标基线代码。
当然,上述初始基线代码的优化方式只是几个示例,对此不做限制。
情况二、从算法选型和计算资源利用率等两个维度,对初始基线代码进行优化。比如说,以降低初始基线代码的计算复杂度为优化目标,对初始基线代码进行优化,得到优化后的第一基线代码;以降低第一基线代码的计算资源利用率为优化目标,对第一基线代码进行优化,得到优化后的目标基线代码。
或者,以降低初始基线代码的计算资源利用率为优化目标,对初始基线代码进行优化,得到优化后的第一基线代码;以降低第一基线代码的计算复杂度为优化目标,对第一基线代码进行优化,得到优化后的目标基线代码。
情况三、从算法选型和内存使用等两个维度,对初始基线代码进行优化。比如说,以降低初始基线代码的计算复杂度为优化目标,对初始基线代码进行优化,得到优化后的第一基线代码;以降低第一基线代码的内存使用量为优化目标,对第一基线代码进行优化,得到优化后的目标基线代码。或者,
以降低初始基线代码的内存使用量为优化目标,对初始基线代码进行优化,得到优化后的第一基线代码;以降低第一基线代码的计算复杂度为优化目标,对第一基线代码进行优化,得到优化后的目标基线代码。
情况四、从计算资源利用率和内存使用等两个维度,对初始基线代码进行优化。比如说,以降低初始基线代码的计算资源利用率为优化目标,对初始基线代码进行优化,得到优化后的第一基线代码;以降低第一基线代码的内存使用量为优化目标,对第一基线代码进行优化,得到优化后的目标基线代码。
或者,以降低初始基线代码的内存使用量为优化目标,对初始基线代码进行优化,得到优化后的第一基线代码;以降低第一基线代码的计算资源利用率为优化目标,对第一基线代码进行优化,得到优化后的目标基线代码。
情况五、从内存使用、或者算法选型、或者计算资源利用率等维度,对初始基线代码进行优化。比如说,可以以降低初始基线代码的计算复杂度为优化目标,对初始基线代码进行优化,得到优化后的目标基线代码。或者,可以以降低初始基线代码的计算资源利用率为优化目标,对初始基线代码进行优化,得到优化后的目标基线代码。或者,可以以降低初始基线代码的内存使用量为优化目标,对初始基线代码进行优化,得到优化后的目标基线代码。
当然,上述各情况只是几个示例,除了内存使用、算法选型、计算资源利用率等维度,还可以从其它维度对基线代码进行优化,对此不做限制。
步骤104,将目标基线代码转换成与目标平台匹配的待部署代码。
步骤105,将该待部署代码部署到该目标平台。
由以上技术方案可见,本申请实施例中,可以根据初始基线代码的代码特征,确定初始基线代码的代码质量,若该代码质量满足质量要求,则对初始基线代码进行优化,得到优化后的目标基线代码,并将目标基线代码转换成与目标平台匹配的待部署代码,将待部署代码部署到目标平台。上述方式能够实现跨平台的代码自动优化过程,实现从代码自动评价,代码自动优化,代码自动部署的整体解决方案,能够有效提升开发效率,并提高用户体验。
参见图2所示,为代码管理方法的另一流程示意图,该方法可以包括:
步骤201,获取初始基线代码。
步骤202,对初始基线代码进行自动评价。比如说,可以根据初始基线代码的代码特征,确定初始基线代码的代码质量。
步骤203,确定初始基线代码的评价结果。比如说,根据该代码质量确定初始基线代码是否满足质量要求,若满足质量要求,则评价结果为通过,执行步骤204,若不满足质量要求,则评价结果为不通过,将初始基线代码退回,提示用户重新调整初始基线代码,获取调整后的初始基线代码,返回执行步骤202。
步骤204,对初始基线代码进行自动优化。例如,对初始基线代码进行优化,得到优化后的目标基线代码,目标基线代码的性能优于初始基线代码的性能。
步骤205,确定目标基线代码的性能指标。比如说,基于优化后的目标基线代码,分析目标基线代码的性能指标。若该性能指标达标,则执行步骤206,若该性能指标不达标,则可以将初始基线代码退回,提示用户重新调整初始基线代码,获取调整后的初始基线代码,返回执行步骤202。
步骤206,对目标基线代码进行自动适配。比如说,基于目标平台的需求,将目标基线代码转换成与目标平台匹配的待部署代码。
步骤207,对待部署代码进行自动测试。
步骤208,将待部署代码部署到该目标平台。
以下结合具体应用场景,对本申请实施例的代码管理方法进行说明。本申请实施例中提出一种跨平台代码的自动优化系统,包括代码自动评价子系统,代码自动优化子系统,代码自动适配子系统,代码自动测试子系统。
代码自动评价子系统用于获取基准平台开发测试通过的初始基线代码,对初始基线代码在编码规范和设计实现上进行评估,回退不符合规范的初始基线代码,并给出退回原因,指导用户继续迭代修正。针对通过评价的初始基线代码,代码自动评价子系统将该初始基线代码提供给代码自动优化子系统。
代码自动优化子系统从内存使用、算法选型和计算资源利用率等维度对初始基线代码进行优化,直至优化后的目标基线代码满足预设的性能指标,并将优化后的目标基线代码提供给代码自动适配子系统。代码自动优化子系统还可以自动回退性能不达标的初始基线代码,给出性能差异,指导用户重新设计。
代码自动适配子系统根据目标平台的特性,采用自动适配编译、调用等方式,对目标基线代码进行转换,得到可在该目标平台正确编译运行的待部署代码,并将该待部署代码提供给代码自动测试子系统。代码自动测试子系统对待部署代码进行测试,在测试通过后,将待部署代码部署到目标平台。
在上述实施例中,由于自动优化和自动适配均是由程序自动完成,可约束自动优化和自动适配生成代码的正确性,因此,可以将自动评价部署到自动优化和自动适配之前,即先进行自动评价,然后进行自动优化和自动适配。
以下结合具体实施例,对代码自动评价子系统,代码自动优化子系统,代码自动适配子系统,代码自动测试子系统等子系统的功能进行说明。
代码自动评价子系统:代码自动评价子系统可以通过编码规范和设计实现等维度,评价初始基线代码的代码质量。比如说,根据初始基线代码的编码规范特征确定初始基线代码的编码规范质量,根据初始基线代码的设计实现特征确定初始基线代码的设计实现质量,根据该编码规范质量和该设计实现质量,确定初始基线代码的代码质量。例如,编码规范质量可以是编码规范质量分数值,设计实现质量可以是设计实现质量分数值,可以对编码规范质量分数值和设计实现质量分数值进行加权运算,得到初始基线代码的代码质量分数值。
情况一、代码自动评价子系统根据初始基线代码的编码规范特征确定初始基线代码的编码规范质量。比如说,可以获取预先配置的至少一个编码规范策略。针对每个编码规范策略来说,可以从初始基线代码中选取出与该编码规范策略对应的子代码,并确定该子代码的编码规范特征与该编码规范策略是否匹配,并根据确定结果分析该编码规范策略对应的子质量。然后,可以根据每个编码规范策略对应的子质量,确定初始基线代码的编码规范质量。
示例性的,编码规范策略可以包括但不限于以下至少一种:布局策略和排版策略,例如,头文件布局、源文件布局、缩进风格、缩进空格换行使用规则等。函数注释策略,例如,文件头注释、函数头注释、变量注释和代码行注释等。变量策略和函数定义策略,例如,变量与函数命名,结构体和宏定义,返回值等。语句风格策略,例如,语句段排版方式,语句段嵌套级数,函数体内最大嵌套次数,单行最大列数等。当然,上述只是示例,对此不做限制。
示例性的,针对每个编码规范策略,可以从初始基线代码中选取与该编码规范策略对应的子代码,并确定该子代码的编码规范特征与该编码规范策略是否匹配。例如,若编码规范策略为函数体内最大嵌套次数,则从初始基线代码中选取与“函数体内最大嵌套次数”有关的子代码a1,确定子代码a1中的函数体内最大嵌套次数(即编码规范特征)。若子代码a1中的函数体内最大嵌套次数大于编码规范策略约定的函数体内最大嵌套次数,则说明二者不匹配,若子代码a1中的函数体内最大嵌套次数不大于编码规范策略约定的函数体内最大嵌套次数,则说明二者匹配。又例如,若编码规范策略为头文件布局,则从初始基线代码中选取与“头文件布局”有关的子代码a2,确定子代码a2中的头文件布局(即编码规范特征)。若子代码a2中的头文件布局与编码规范策略约定的头文件布局不同,则说明二者不匹配,若子代码a2中的头文件布局与编码规范策略约定的头文件布局相同,则说明二者匹配。当然,上述只是几个示例,针对其它类型的编码规范策略,实现过程类似,在此不再重复赘述。
示例性的,针对每个编码规范策略来说,若子代码的编码规范特征与该编码规范策略匹配,则确定结果可以为子代码符合该编码规范策略的要求,根据该确定结果能够分析该编码规范策略对应的子质量,如子质量为1,表示符合该编码规范策略。若子代码的编码规范特征与该编码规范策略不匹配,则确定结果可以为子代码不符合该编码规范策略的要求,根据该确定结果能够分析该编码规范策略对应的子质量,如子质量为0,表示不符合该编码规范策略。
示例性的,在得到每个编码规范策略对应的子质量后,可以根据每个编码规范策略对应的子质量,确定初始基线代码的编码规范质量,比如说,编码规范质量可以为编码规范质量分数值,统计子质量为1的总数量1和子质量为0的总数量2,该编码规范质量分数值可以为[总数量1/(总数量1+总数量2)]*100。
当然,上述方式只是确定编码规范质量的示例,对此不做限制。
在一种可能的实施方式中,代码自动评价子系统可以使用编译器前端工具(如LLVM的Clang)确定初始基线代码的编码规范质量。参见图3所示,初始基线代码作为编译器的解析器的输入,解析器生成初始基线代码的AST(中间语法树),基于AST抽取多个节点语句(即初始基线代码的各个子代码)。
规范匹配表中包括预先配置的多个编码规范策略,依次遍历规范匹配表中的每个编码规范策略,并从多个节点语句中选取与该编码规范策略对应的目标节点语句,确定目标节点语句的编码规范特征与该编码规范策略是否匹配。
如果不匹配,则在不合规信息集合中记录该编码规范策略和该目标节点语句的信息。示例性的,在回退不符合规范的初始基线代码时,可以将不合规信息集合中的信息提供给用户,而不合规信息集合中的信息是退回原因,表示目标节点语句的编码规范特征与编码规范策略不匹配,指导用户对初始基线代码进行修正时,解决目标节点语句的编码规范特征与编码规范策略不匹配的问题。
如果匹配,则确定是否已完成规范匹配表的遍历,如果否,继续遍历规范匹配表的下一个编码规范策略,如果是,确定初始基线代码的编码规范质量。
在确定编码规范质量时,可以确定每个编码规范策略对应的子质量(如目标节点语句的编码规范特征与编码规范策略匹配时,子质量为1,即目标节点语句符合编码规范策略;目标节点语句的编码规范特征与编码规范策略不匹配时,子质量为0,即目标节点语句不符合编码规范策略),基于每个编码规范策略对应的子质量,可以确定初始基线代码的编码规范质量,对此不再赘述。
示例性的,以编码规范策略为函数名规范为例,可以抽取出FuncDefNode节点的各子叶节点,可以获取到函数名,各参数变量名,参数个数信息等信息。根据AST中抽取的这些信息,可以将其与规范匹配表中的名称规范和参数个数进行合规匹配,并输出命名规范和调用参数个数的规范结果。
示例性的,对于排版格式(比如tab和space等)的编码规范策略,还可以额外借助正则表达式工具来实现,对此正则表达式工具的实现过程不再赘述。
情况二、代码自动评价子系统根据初始基线代码的设计实现特征确定初始基线代码的设计实现质量。比如说,在设计实现方面,可以从初始基线代码的可扩展性、易用性、易维护性等角度展开。其中,对于可扩展性来说,可以通过解耦程度(即子模块解耦程度)进行评价。对于易用性来说,可以通过设计合理程度(即子模块设计合理程度)进行评价。对于易维护性来说,可以通过代码注释(即注释质量,如代码注释的丰富度和准确性)进行评价。
综上所述,可以确定出初始基线代码的解耦程度质量,设计合理程度质量和代码注释质量,并基于该解耦程度质量,该设计合理程度质量和该代码注释质量,确定初始基线代码的设计实现质量。比如说,解耦程度质量可以是解耦程度质量分数值,设计合理程度质量可以是设计合理程度质量分数值,代码注释质量可以是代码注释质量分数值,设计实现质量可以是设计实现质量分数值,基于此,可以对解耦程度质量分数值,设计合理程度质量分数值和代码注释质量分数值进行加权运算,得到初始基线代码的设计实现质量分数值。
示例性的,深度学习是一种使用数学模型对真实世界中的特定问题进行建模,以解决该领域内相似问题的过程,神经网络是深度学习的实现方式,本实施例中,可以通过神经网络确定出初始基线代码的解耦程度质量,设计合理程度质量和代码注释质量。当然,神经网络的实现方式只是示例,对此不做限制,只要能够确定出解耦程度质量,设计合理程度质量和代码注释质量即可。
神经网络可以包括但不限于卷积神经网络(简称CNN)、循环神经网络(简称RNN)、全连接网络等,对此不做限制。神经网络的结构单元可以包括但不限于卷积层(Conv)、池化层(Pool)、激励层、全连接层(FC)等,对此不做限制。本实施例中,可以根据不同需求,将一个或多个卷积层,一个或多个池化层,一个或多个激励层,以及一个或多个全连接层进行组合构建神经网络。
为了通过神经网络确定出初始基线代码的解耦程度质量,设计合理程度质量和代码注释质量,本文涉及神经网络的训练过程和神经网络的应用过程。
在神经网络的训练过程中,可以先获取初始神经网络,该初始神经网络可以包括但不限于第一子网络,第二子网络和第三子网络,对此初始神经网络不做限制。对初始神经网络进行训练,得到已完成训练的目标神经网络,该目标神经网络可以包括但不限于第一子网络,第二子网络和第三子网络。
示例性的,可以先获取大量样本数据,样本数据可以是样本基线代码,对此样本基线代码的获取方式不做限制。针对每个样本基线代码,可以将该样本基线代码划分为与解耦程度有关的子代码1,与设计合理程度有关的子代码2,与代码注释有关的子代码3。子代码1的标签信息为解耦程度质量,子代码2的标签信息为设计合理程度质量,子代码3的标签信息为代码注释质量。
示例性的,可以将子代码1(如大量子代码1)和该子代码1的标签信息,输入给初始神经网络的第一子网络,从而利用这些数据对第一子网络的各网络参数(如卷积层网络参数、池化层网络参数、激励层网络参数、全连接层网络参数等)进行训练,对此训练过程不做限制,得到已训练的第一子网络,该第一子网络用于记录子代码的特征向量与解耦程度质量的映射关系。
示例性的,可以将子代码2(如大量子代码2)和该子代码2的标签信息,输入给初始神经网络的第二子网络,从而利用这些数据对第二子网络的各网络参数(如卷积层网络参数、池化层网络参数、激励层网络参数、全连接层网络参数等)进行训练,对此训练过程不做限制,得到已训练的第二子网络,该第二子网络用于记录子代码的特征向量与设计合理程度质量的映射关系。
示例性的,可以将子代码3(如大量子代码3)和该子代码3的标签信息,输入给初始神经网络的第三子网络,从而利用这些数据对第三子网络的各网络参数(如卷积层网络参数、池化层网络参数、激励层网络参数、全连接层网络参数等)进行训练,对此训练过程不做限制,得到已训练的第三子网络,该第三子网络用于记录子代码的特征向量与代码注释质量的映射关系。
在对初始神经网络的第一子网络,第二子网络和第三子网络进行训练后,可以得到已训练的目标神经网络,目标神经网络包括已训练的第一子网络,第二子网络和第三子网络,第一子网络用于记录子代码的特征向量与解耦程度质量的映射关系,第二子网络用于记录子代码的特征向量与设计合理程度质量的映射关系,第三子网络用于记录子代码的特征向量与代码注释质量的映射关系。
在神经网络的应用过程中,代码自动评价子系统可以获取初始基线代码。
可以从初始基线代码中选取与解耦程度有关的第一子代码,将第一子代码输入给第一子网络,以使第一子网络根据第一子代码的设计实现特征确定第一子代码的解耦程度质量。比如说,第一子网络在得到第一子代码后,可以获取第一子代码的设计实现特征,该设计实现特征用于表示第一子代码的与解耦程度有关的特征向量,然后,利用第一子网络内的各网络参数对该设计实现特征进行处理,得到与该设计实现特征对应的目标特征向量。由于第一子网络记录有子代码的特征向量与解耦程度质量的映射关系,因此,通过该目标特征向量查询该映射关系,就可以得到与该设计实现特征对应的解耦程度质量。
可以从初始基线代码中选取与设计合理程度有关的第二子代码,将第二子代码输入给第二子网络,以使第二子网络根据第二子代码的设计实现特征确定第二子代码的设计合理程度质量。例如,第二子网络得到第二子代码后,获取第二子代码的设计实现特征,该设计实现特征用于表示第二子代码的与设计合理程度有关的特征向量,利用第二子网络内的各网络参数对该设计实现特征进行处理,得到与该设计实现特征对应的目标特征向量。由于第二子网络记录有子代码的特征向量与设计合理程度质量的映射关系,因此,通过该目标特征向量查询该映射关系,就可以得到与该设计实现特征对应的设计合理程度质量。
可以从初始基线代码中选取与代码注释有关的第三子代码,将第三子代码输入给第三子网络,以使第三子网络根据第三子代码的设计实现特征确定第三子代码的代码注释质量。比如说,第三子网络在得到第三子代码后,可以获取第三子代码的设计实现特征,该设计实现特征用于表示第三子代码的与代码注释有关的特征向量,然后,利用第三子网络内的各网络参数对该设计实现特征进行处理,得到与该设计实现特征对应的目标特征向量。由于第三子网络记录有子代码的特征向量与代码注释质量的映射关系,因此,通过该目标特征向量查询该映射关系,就可以得到与该设计实现特征对应的代码注释质量。
在上述实施例中,解耦程度表示子模块(即接口)的解耦程度,初始基线代码可以包括子模块的多个代码数据,可以将子模块的每个代码数据(如子模块定义的AST编码描述,子模块中各接口被调用次数和位置信息,各子模块AST编码本身等)均作为与解耦程度有关的第一子代码。比如说,初始基线代码包括子模块的代码数据1和代码数据2,可以将子模块的代码数据1作为与解耦程度有关的第一子代码1,并将子模块的代码数据2作为与解耦程度有关的第一子代码2,将第一子代码1和第一子代码2均作为第一子网络的输入数据。在此基础上,解耦程度表示第一子代码1和第一子代码2的解耦程度。
设计合理程度表示子模块(即接口)的设计合理程度,初始基线代码可以包括多个子模块的代码数据,将每个子模块的代码数据均作为与设计合理程度有关的第二子代码。比如说,初始基线代码包括子模块1的代码数据(如子模块1的代码数据1和代码数据2)和子模块2的代码数据(如子模块2的代码数据3和代码数据4),将子模块1的代码数据作为与设计合理程度有关的第二子代码1,并将子模块2的代码数据作为与设计合理程度有关的第二子代码2,将第二子代码1和第二子代码2均作为第二子网络的输入数据。在此基础上,设计合理程度表示第二子代码1的设计合理程度,第二子代码2的设计合理程度。
代码注释表示初始基线代码中注释数据的丰富度和准确性,初始基线代码可以包括多个注释数据,将每个注释数据作为与代码注释有关的第三子代码。
在一种可能的实施方式中,代码自动评价子系统使用目标神经网络确定初始基线代码的设计实现质量。参见图4所示,输入是初始基线代码和目标神经网络(即评价模型),通过目标神经网络评价初始基线代码的可扩展性,易用性和易维护性,初始基线代码的可扩展性由解耦程度质量表示,初始基线代码的易用性由设计合理程度质量表示,初始基线代码的易维护性由代码注释质量表示。然后,基于解耦程度质量,设计合理程度质量和代码注释质量进行量化计算,得到初始基线代码的设计实现质量。比如说,解耦程度质量可以是解耦程度质量分数值,设计合理程度质量可以是设计合理程度质量分数值,代码注释质量可以是代码注释质量分数值,设计实现质量可以是设计实现质量分数值,基于此,可以对解耦程度质量分数值,设计合理程度质量分数值和代码注释质量分数值进行加权运算,得到初始基线代码的设计实现质量分数值。
示例性的,在初始基线代码的设计实现质量分数值比较低时,还允许开发者提交申诉,并接入专家工程师的审核流程,若专家工程师通过初始基线代码的设计实现评价,则提高初始基线代码的设计实现质量分数值,对此不再赘述。
综上所述,基于情况一,可以得到编码规范质量分数值,基于情况二,可以得到设计实现质量分数值,可以对编码规范质量分数值和设计实现质量分数值进行加权运算,得到初始基线代码的代码质量分数值。若该代码质量分数值大于分数阈值,则确定初始基线代码的代码质量满足质量要求,代码自动评价子系统将初始基线代码提供给代码自动优化子系统。若该代码质量分数值不大于分数阈值,则确定初始基线代码的代码质量不满足质量要求,可以将回退不符合规范的初始基线代码,并给出退回原因,指导用户继续迭代修正。
代码自动优化子系统:代码自动优化子系统可以从算法选型,计算资源利用率和内存使用等三个维度,对初始基线代码进行优化,提升算法性能,提升执行性能,以满足设计约束。这三个维度分别对应于计算复杂度,计算资源利用率和内存使用量,对代码性能的影响是依次递减,因此,代码自动优化子系统可以按照该顺序优化初始基线代码。参见图5所示,先以降低初始基线代码的计算复杂度为优化目标,对初始基线代码进行优化,得到优化后的第一基线代码;以降低第一基线代码的计算资源利用率为优化目标,对第一基线代码进行优化,得到优化后的第二基线代码;以降低第二基线代码的内存使用量为优化目标,对第二基线代码进行优化,得到优化后的目标基线代码。
情况1、以降低初始基线代码的计算复杂度为优化目标,对初始基线代码进行优化,得到优化后的第一基线代码。比如说,将初始基线代码划分为多个子代码;基于每个子代码的计算复杂度(即时间复杂度),从多个子代码中选取目标子代码(可以为至少一个)。针对每个目标子代码,确定该目标子代码的功能类型,从预先配置的满足计算复杂度要求的优化算子中选取与该功能类型匹配的目标优化算子,并通过该目标优化算子替换初始基线代码中的目标子代码,得到第一基线代码,第一基线代码的计算复杂度小于初始基线代码的计算复杂度。由于第一基线代码的计算复杂度小于初始基线代码的计算复杂度,因此能够达到降低计算复杂度的目的。例如,初始基线代码的目标子代码为冒泡排序,将其替换为快速排序(标优化算子),将计算复杂度从O(n2)降低至O(nlgn)。
在一种可能的实施方式中,参见图6所示,可以将初始基线代码划分为多个子代码,并确定每个子代码的计算复杂度(即时间复杂度),对此确定方式不做限制,比如说,可以运行该子代码,统计运行该子代码时的计算复杂度。示例性的,可以使用热点分析工具,检测出每个子代码的计算复杂度。
基于每个子代码的计算复杂度,可以从多个子代码中选取目标子代码。比如说,可以按照计算复杂度从高到低的顺序对多个子代码进行排序,并选取排序靠前的K个子代码作为目标子代码。由于每个目标子代码的处理方式相同,因此,在后续过程中,以一个目标子代码的处理方式为例进行说明。
确定目标子代码的功能类型,对此确定方式不做限制。示例性的,可以先生成初始神经网络(如ASTNN网络),并将训练数据(通过代码混淆、语法变换等方式产生的各种功能类型的训练数据)和训练数据的标签信息(即功能类型)输入给初始神经网络,从而对初始神经网络进行训练,得到已训练的目标神经网络,对此训练过程不做限制,目标神经网络用于识别功能类型。
在确定目标子代码的功能类型时,可以将目标子代码输入给目标神经网络,由目标神经网络对目标子代码进行处理,得到目标子代码的功能类型。比如说,目标神经网络可以输出目标子代码的类型概率向量,该类型概率向量表示目标子代码的功能类型是类型1的概率值,目标子代码的功能类型是类型2的概率值,以此类推,目标子代码的功能类型是类型n的概率值。显然,基于该类型概率向量,可以确定目标子代码的功能类型。例如,选取最大概率值,若最大概率值大于阈值,则目标子代码的功能类型是最大概率值对应的类型。
示例性的,可以预先构建优化算子数据库,该优化算子数据库包括满足计算复杂度要求的优化算子,比如说,包括密集计算的优化算子(计算复杂度较大,如大于复杂度阈值),但是,不包括非密集计算的优化算子(计算复杂度较小,如小于复杂度阈值,由于计算复杂度低,计算量小,无优化必要)。
优化算子是最低计算复杂度的子代码,例如,针对某个功能类型的子代码,该子代码具有三种形式,则确定每个子代码的计算复杂度,将计算复杂度最低的子代码存储在优化算子数据库,而另外两个子代码不存储在优化算子数据库。
优化算子数据库中的优化算子,可以包括但不限于:图像处理算子(如格式转换、插值、滤波等)、图形学算子(如积分图、连通域、面积计算等)、矩阵计算算子(如blas、解方程、求特征值等)、常规计算描述算子(如sort、map、reduce等)。当然,上述只是几个示例,对此优化算子不做限制。
针对某个功能类型的优化算子,若获取到计算复杂度最低的优化算子,则将计算复杂度最低的优化算子存储到优化算子数据库。若未获取到计算复杂度最低的优化算子,则为该功能类型的优化算子生成计算描述和操作原语,并基于计算描述和操作原语生成优化算子,将该优化算子存储到优化算子数据库。
综上所述,可以构建优化算子数据库,该优化算子数据库包括多个优化算子。在此基础上,代码自动优化子系统确定目标子代码的功能类型后,从优化算子数据库中选取与该功能类型匹配的目标优化算子,即目标优化算子的功能类型与目标子代码的功能类型相同。然后,通过该目标优化算子替换初始基线代码中的目标子代码,得到第一基线代码。在通过该目标优化算子替换初始基线代码中的目标子代码时,还可以修复上下文中的变量对应关系。
情况2、以降低第一基线代码的计算资源利用率为优化目标,对第一基线代码进行优化,得到优化后的第二基线代码。比如说,将第一基线代码划分为多个子代码;基于每个子代码的计算复杂度(即时间复杂度),从多个子代码中选取目标子代码(可以为至少一个)。通过并行化策略,访存优化策略,循环优化策略中的至少一种策略,生成用于提高目标子代码的计算资源利用率的优化代码。通过该优化代码替换第一基线代码中的目标子代码,得到第二基线代码;第二基线代码的计算资源利用率大于第一基线代码的计算资源利用率。
在一种可能的实施方式中,参见图7所示,可以将初始基线代码划分为多个子代码,确定每个子代码的计算复杂度,基于每个子代码的计算复杂度,从多个子代码中选取目标子代码。比如说,按照计算复杂度从高到低的顺序对多个子代码进行排序,并基于排序靠前的P个子代码确定目标子代码。例如,可以将P个子代码均作为目标子代码;或,针对P个子代码中的每个子代码,若该子代码是情况1中的目标优化算子,则该子代码不作为目标子代码;若该子代码不是情况1中的目标优化算子,则该子代码作为目标子代码。
在后续过程中,以一个目标子代码的处理方式为例进行说明。
在得到目标子代码后,可以通过并行化策略,访存优化策略,循环优化策略中的至少一种策略,生成用于提高目标子代码的计算资源利用率的优化代码,并通过该优化代码替换第一基线代码中的目标子代码,得到第二基线代码;在通过该优化代码替换目标子代码时,还可以修复上下文中的变量对应关系。
示例性的,可以构建一个源到源的编译器,该编译器可以将第一基线代码转换为中间语法树,再转换为计算描述语言,该过程为等价变换,可以通过源到源的编译器转换完成。在得到第一基线代码的计算描述语言后,可以通过并行化(如GPU/CPU多线程)、循环优化(如vectorize,SIMD等)、访存优化(如tile、reorder等)等方式,生成计算资源利用率更高的优化代码。
情况3、以降低第二基线代码的内存使用量为优化目标,对第二基线代码进行优化,得到优化后的目标基线代码。比如说,将第二基线代码划分为多个子代码,基于每个子代码的内存使用量,从多个子代码中选取出目标子代码,例如,按照内存使用量从高到低的顺序对多个子代码进行排序,并选取排序靠前的L个子代码作为目标子代码。对目标子代码中的配置信息进行调整,得到优化代码,并通过该优化代码替换第二基线代码中的该目标子代码,得到目标基线代码,该目标基线代码的内存使用量可以小于该第二基线代码的内存使用量。对该目标子代码中的配置信息进行调整,可以包括:减少目标子代码使用的堆空间,栈空间和程序数据段空间,和/或,减少目标子代码的内存访问次数。
示例性的,针对每个目标子代码来说,通过对目标子代码中的配置信息进行调整,减少目标子代码使用的堆空间,栈空间和程序数据段空间,和/或,减少目标子代码的内存访问次数,即,压缩和裁剪代码使用的堆空间、栈空间和程序数据段空间,和/或,在保证代码结果一致性的前提下,减少内存访问次数。
综上所述,基于情况1-和情况3,代码自动优化子系统可以对初始基线代码进行优化,得到目标基线代码,并将目标基线代码提供给代码自动适配子系统。
代码自动适配子系统:代码自动适配子系统可以根据目标平台的特性,采用自动适配编译、调用等方式,对目标基线代码进行转换,从而得到可在该目标平台正确编译运行的待部署代码。比如说,代码自动适配子系统可以在目标基线代码中添加与目标平台适配的关联代码,得到待部署代码。
示例性的,与目标平台适配的关联代码,可以包括但不限于:平台特有初始化和释放类代码,平台特有调度代码,平台特有运行环境代码(服务于人工智能等密集计算场景的嵌入式设备、移动设备、服务器设备,用于对异构资源的构建、调度和释放)。示例性的,平台特有初始化和释放类代码实现的功能,可以包括但不限于:设备初始化,资源初始化分配和释放。平台特有调度代码实现的功能,可以包括但不限于:对异构计算单元的计算指令发送,计算结果查询或中断唤醒。平台特有运行环境代码,可以包括但不限于:链接平台提供的SDK库,配置平台编译文件中的交叉工具链以及特有编译选项等。
代码自动测试子系统:代码自动适配子系统可以将待部署代码提供给代码自动测试子系统,代码自动测试子系统对待部署代码进行测试,在测试通过后,将待部署代码部署到目标平台。比如说,代码自动测试子系统可以获取测试用例,并通过该测试用例对待部署代码进行测试,对此测试过程不做限制,若待部署代码的测试结果为达到预期要求,则将待部署代码部署到目标平台。
由以上技术方案可见,本申请实施例中,设计了一种跨平台代码自动优化的方法,从代码自动评价、代码自动优化、代码自动部署、到代码自动测试的一整套解决方案。能够从编码规范与设计实现两个维度进行代码自动评价,能够从计算选型、计算资源利用率、内存使用三个维度进行代码自动优化。上述过程的全流程无需工程师参与,能够有效提升开发效率,并提高用户体验。
基于与上述方法同样的申请构思,本申请实施例中还提出一种代码管理装置,如图8所示,为所述代码管理装置的结构图,所述装置包括:
获取模块81,用于获取初始基线代码;确定模块82,用于根据所述初始基线代码的代码特征,确定所述初始基线代码的代码质量;优化模块83,用于若所述代码质量满足质量要求,则对所述初始基线代码进行优化,得到优化后的目标基线代码;其中,所述目标基线代码的性能优于所述初始基线代码的性能;转换模块84,用于将所述目标基线代码转换成与目标平台匹配的待部署代码;部署模块85,用于将所述待部署代码部署到所述目标平台。
所述初始基线代码的代码特征包括所述初始基线代码的编码规范特征和设计实现特征,确定模块82根据所述初始基线代码的代码特征,确定所述初始基线代码的代码质量时具体用于:根据所述编码规范特征确定所述初始基线代码的编码规范质量;根据所述设计实现特征确定所述初始基线代码的设计实现质量;根据编码规范质量和设计实现质量,确定所述初始基线代码的代码质量。
所述确定模块82根据所述编码规范特征确定所述初始基线代码的编码规范质量时具体用于:获取预先配置的至少一个编码规范策略;
针对每个编码规范策略,从所述初始基线代码中选取与所述编码规范策略对应的子代码;确定所述子代码的编码规范特征与所述编码规范策略是否匹配,并根据确定结果分析所述编码规范策略对应的子质量;
根据每个编码规范策略对应的子质量,确定初始基线代码的编码规范质量。
已训练的目标神经网络包括第一子网络,第二子网络和第三子网络;所述确定模块82根据所述设计实现特征确定所述初始基线代码的设计实现质量时具体用于:从初始基线代码中选取与解耦程度有关的第一子代码,将所述第一子代码输入给第一子网络,以使第一子网络根据所述第一子代码的设计实现特征确定所述第一子代码的解耦程度质量;从所述初始基线代码中选取与设计合理程度有关的第二子代码,将所述第二子代码输入给第二子网络,以使第二子网络根据所述第二子代码的设计实现特征确定所述第二子代码的设计合理程度质量;从所述初始基线代码中选取与代码注释有关的第三子代码,将所述第三子代码输入给第三子网络,以使第三子网络根据所述第三子代码的设计实现特征确定所述第三子代码的代码注释质量;基于所述解耦程度质量,所述设计合理程度质量和所述代码注释质量,确定所述初始基线代码的设计实现质量。
所述优化模块83对所述初始基线代码进行优化,得到优化后的目标基线代码时具体用于:以降低所述初始基线代码的计算复杂度为优化目标,对所述初始基线代码进行优化,得到优化后的第一基线代码;以降低所述第一基线代码的计算资源利用率为优化目标,对所述第一基线代码进行优化,得到优化后的第二基线代码;以降低所述第二基线代码的内存使用量为优化目标,对所述第二基线代码进行优化,得到优化后的目标基线代码。
所述优化模块83以降低所述初始基线代码的计算复杂度为优化目标,对所述初始基线代码进行优化,得到优化后的第一基线代码时具体用于:将所述初始基线代码划分为多个子代码;基于每个子代码的计算复杂度,从所述多个子代码中选取目标子代码;确定所述目标子代码的功能类型,从预先配置的满足计算复杂度要求的优化算子中选取与所述功能类型匹配的目标优化算子;通过目标优化算子替换初始基线代码中的所述目标子代码,得到第一基线代码;所述第一基线代码的计算复杂度小于初始基线代码的计算复杂度。
所述优化模块83以降低所述第一基线代码的计算资源利用率为优化目标,对所述第一基线代码进行优化,得到优化后的第二基线代码时具体用于:将所述第一基线代码划分为多个子代码;基于每个子代码的计算复杂度,从所述多个子代码中选取目标子代码;通过并行化策略,访存优化策略,循环优化策略中的至少一种策略,生成用于提高所述目标子代码的计算资源利用率的优化代码;通过所述优化代码替换第一基线代码中的所述目标子代码,得到第二基线代码;第二基线代码的计算资源利用率大于第一基线代码的计算资源利用率。
所述优化模块83以降低所述第二基线代码的内存使用量为优化目标,对所述第二基线代码进行优化,得到优化后的目标基线代码时具体用于:将所述第二基线代码划分为多个子代码;基于每个子代码的内存使用量,从所述多个子代码中选取目标子代码;对所述目标子代码中的配置信息进行调整,得到优化代码;对所述目标子代码中的配置信息进行调整,包括:减少所述目标子代码使用的堆空间,栈空间和程序数据段空间,和/或,减少所述目标子代码的内存访问次数;通过所述优化代码替换第二基线代码中的所述目标子代码,得到目标基线代码;目标基线代码的内存使用量小于第二基线代码的内存使用量。
基于与上述方法同样的申请构思,本申请实施例中还提出一种代码管理设备,代码管理设备的硬件架构示意图参见图9所示,可以包括:处理器91和机器可读存储介质92,所述机器可读存储介质92存储有能够被处理器91执行的机器可执行指令;所述处理器91用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,处理器91用于执行机器可执行指令,以实现如下步骤:
获取初始基线代码;根据所述初始基线代码的代码特征,确定所述初始基线代码的代码质量;若所述代码质量满足质量要求,则对所述初始基线代码进行优化,得到优化后的目标基线代码,其中,所述目标基线代码的性能优于所述初始基线代码的性能;将所述目标基线代码转换成与目标平台匹配的待部署代码;将所述待部署代码部署到所述目标平台。
基于与上述方法同样的申请构思,本申请实施例还提供一种机器可读存储介质,其中,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本申请上述示例公开的方法。
示例性的,上述机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (9)
1.一种代码管理方法,其特征在于,所述方法包括:
获取初始基线代码;
根据所述初始基线代码的代码特征,确定所述初始基线代码的代码质量;其中,所述代码特征包括编码规范特征和设计实现特征,根据所述编码规范特征确定初始基线代码的编码规范质量;根据所述设计实现特征确定初始基线代码的设计实现质量;根据编码规范质量和设计实现质量确定所述代码质量;
若所述代码质量满足质量要求,则对所述初始基线代码进行优化,得到优化后的目标基线代码,所述目标基线代码的性能优于所述初始基线代码的性能;
将所述目标基线代码转换成与目标平台匹配的待部署代码;
将所述待部署代码部署到所述目标平台。
2.根据权利要求1所述的方法,其特征在于,
根据所述编码规范特征确定所述初始基线代码的编码规范质量,包括:
获取预先配置的至少一个编码规范策略;
针对每个编码规范策略,从所述初始基线代码中选取与所述编码规范策略对应的子代码;确定所述子代码的编码规范特征与所述编码规范策略是否匹配,并根据确定结果分析所述编码规范策略对应的子质量;
根据每个编码规范策略对应的子质量,确定初始基线代码的编码规范质量。
3.根据权利要求1所述的方法,其特征在于,
已训练的目标神经网络包括第一子网络,第二子网络和第三子网络;
根据所述设计实现特征确定所述初始基线代码的设计实现质量,包括:
从所述初始基线代码中选取与解耦程度有关的第一子代码,将所述第一子代码输入给所述第一子网络,以使所述第一子网络根据所述第一子代码的设计实现特征确定所述第一子代码的解耦程度质量;
从所述初始基线代码中选取与设计合理程度有关的第二子代码,将所述第二子代码输入给所述第二子网络,以使所述第二子网络根据所述第二子代码的设计实现特征确定所述第二子代码的设计合理程度质量;
从所述初始基线代码中选取与代码注释有关的第三子代码,将所述第三子代码输入给所述第三子网络,以使所述第三子网络根据所述第三子代码的设计实现特征确定所述第三子代码的代码注释质量;
基于所述解耦程度质量,所述设计合理程度质量和所述代码注释质量,确定所述初始基线代码的设计实现质量。
4.根据权利要求1所述的方法,其特征在于,
所述对所述初始基线代码进行优化,得到优化后的目标基线代码,包括:
以降低所述初始基线代码的计算复杂度为优化目标,对所述初始基线代码进行优化,得到优化后的第一基线代码;
以降低所述第一基线代码的计算资源利用率为优化目标,对所述第一基线代码进行优化,得到优化后的第二基线代码;
以降低所述第二基线代码的内存使用量为优化目标,对所述第二基线代码进行优化,得到优化后的目标基线代码。
5.根据权利要求4所述的方法,其特征在于,
所述以降低所述初始基线代码的计算复杂度为优化目标,对所述初始基线代码进行优化,得到优化后的第一基线代码,包括:
将所述初始基线代码划分为多个子代码;
基于每个子代码的计算复杂度,从所述多个子代码中选取目标子代码;
确定所述目标子代码的功能类型,从预先配置的满足计算复杂度要求的优化算子中选取与所述功能类型匹配的目标优化算子;
通过目标优化算子替换初始基线代码中的所述目标子代码,得到第一基线代码;所述第一基线代码的计算复杂度小于初始基线代码的计算复杂度。
6.根据权利要求4所述的方法,其特征在于,
所述以降低所述第一基线代码的计算资源利用率为优化目标,对所述第一基线代码进行优化,得到优化后的第二基线代码,包括:
将所述第一基线代码划分为多个子代码;
基于每个子代码的计算复杂度,从所述多个子代码中选取目标子代码;
通过并行化策略,访存优化策略,循环优化策略中的至少一种策略,生成用于提高所述目标子代码的计算资源利用率的优化代码;
通过所述优化代码替换第一基线代码中的所述目标子代码,得到第二基线代码;第二基线代码的计算资源利用率大于第一基线代码的计算资源利用率。
7.根据权利要求4所述的方法,其特征在于,
所述以降低所述第二基线代码的内存使用量为优化目标,对所述第二基线代码进行优化,得到优化后的目标基线代码,包括:
将所述第二基线代码划分为多个子代码;
基于每个子代码的内存使用量,从所述多个子代码中选取目标子代码;
对所述目标子代码中的配置信息进行调整,得到优化代码;其中,对所述目标子代码中的配置信息进行调整,包括:减少所述目标子代码使用的堆空间,栈空间和程序数据段空间,和/或,减少所述目标子代码的内存访问次数;
通过所述优化代码替换第二基线代码中的所述目标子代码,得到目标基线代码;其中,目标基线代码的内存使用量小于第二基线代码的内存使用量。
8.一种代码管理装置,其特征在于,所述装置包括:
获取模块,用于获取初始基线代码;
确定模块,用于根据所述初始基线代码的代码特征,确定所述初始基线代码的代码质量;其中,所述代码特征包括编码规范特征和设计实现特征,所述确定模块根据所述初始基线代码的代码特征,确定所述初始基线代码的代码质量时具体用于:根据所述编码规范特征确定初始基线代码的编码规范质量;根据所述设计实现特征确定初始基线代码的设计实现质量;根据所述编码规范质量和所述设计实现质量确定所述初始基线代码的代码质量;
优化模块,用于若所述代码质量满足质量要求,则对所述初始基线代码进行优化,得到优化后的目标基线代码;其中,所述目标基线代码的性能优于所述初始基线代码的性能;
转换模块,用于将所述目标基线代码转换成与目标平台匹配的待部署代码;
部署模块,用于将所述待部署代码部署到所述目标平台。
9.一种代码管理设备,其特征在于,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现如下的步骤:
获取初始基线代码;
根据所述初始基线代码的代码特征,确定所述初始基线代码的代码质量;其中,所述代码特征包括编码规范特征和设计实现特征,根据所述编码规范特征确定初始基线代码的编码规范质量;根据所述设计实现特征确定初始基线代码的设计实现质量;根据编码规范质量和设计实现质量确定所述代码质量;
若所述代码质量满足质量要求,则对所述初始基线代码进行优化,得到优化后的目标基线代码,所述目标基线代码的性能优于所述初始基线代码的性能;
将所述目标基线代码转换成与目标平台匹配的待部署代码;
将所述待部署代码部署到所述目标平台。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010831046.3A CN112015426B (zh) | 2020-08-18 | 2020-08-18 | 一种代码管理方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010831046.3A CN112015426B (zh) | 2020-08-18 | 2020-08-18 | 一种代码管理方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112015426A CN112015426A (zh) | 2020-12-01 |
CN112015426B true CN112015426B (zh) | 2023-12-26 |
Family
ID=73504902
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010831046.3A Active CN112015426B (zh) | 2020-08-18 | 2020-08-18 | 一种代码管理方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112015426B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114594988A (zh) * | 2020-12-07 | 2022-06-07 | 华为技术有限公司 | 一种数据处理装置及方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8225281B1 (en) * | 2009-02-04 | 2012-07-17 | Sprint Communications Company L.P. | Automated baseline deployment system |
CN106990960A (zh) * | 2017-03-28 | 2017-07-28 | 阿里巴巴集团控股有限公司 | 代码部署方法及装置 |
CN110569106A (zh) * | 2019-08-27 | 2019-12-13 | Oppo广东移动通信有限公司 | 代码加载方法、装置、电子设备及计算机可读介质 |
CN111427561A (zh) * | 2020-03-26 | 2020-07-17 | 中国建设银行股份有限公司 | 业务代码的生成方法、装置、计算机设备和存储介质 |
CN111506315A (zh) * | 2019-01-31 | 2020-08-07 | 广州数控网络科技有限公司 | 一种柔性数字控制的代码部署方法、及数字控制平台 |
-
2020
- 2020-08-18 CN CN202010831046.3A patent/CN112015426B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8225281B1 (en) * | 2009-02-04 | 2012-07-17 | Sprint Communications Company L.P. | Automated baseline deployment system |
CN106990960A (zh) * | 2017-03-28 | 2017-07-28 | 阿里巴巴集团控股有限公司 | 代码部署方法及装置 |
CN111506315A (zh) * | 2019-01-31 | 2020-08-07 | 广州数控网络科技有限公司 | 一种柔性数字控制的代码部署方法、及数字控制平台 |
CN110569106A (zh) * | 2019-08-27 | 2019-12-13 | Oppo广东移动通信有限公司 | 代码加载方法、装置、电子设备及计算机可读介质 |
CN111427561A (zh) * | 2020-03-26 | 2020-07-17 | 中国建设银行股份有限公司 | 业务代码的生成方法、装置、计算机设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
可执行代码级优化器生成框架;蒋琛, 戴桂兰, 戴军, 张素琴;清华大学学报(自然科学版)(09);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112015426A (zh) | 2020-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112232497A (zh) | 一种编译ai芯片的方法、系统、设备及介质 | |
CN106547520B (zh) | 一种代码路径分析方法及装置 | |
CN111104120B (zh) | 神经网络编译方法、系统及相应异构计算平台 | |
CN109656544B (zh) | 一种基于执行路径相似度的云服务api适配方法 | |
US11481689B2 (en) | Platforms for developing data models with machine learning model | |
US20110161263A1 (en) | Computer-Implemented Systems And Methods For Constructing A Reduced Input Space Utilizing The Rejected Variable Space | |
US20230394330A1 (en) | A method and system for designing ai modeling processes based on graph algorithms | |
CN111782266B (zh) | 软件性能基准确定方法及装置 | |
CN112015426B (zh) | 一种代码管理方法、装置及设备 | |
CN114611697B (zh) | 神经网络量化及部署方法、系统、电子设备及存储介质 | |
CN115829006A (zh) | 神经网络模型的编译方法、装置、电子设备和存储介质 | |
CN115640851A (zh) | 一种适用于测试仪器的神经网络高效推理方法 | |
US9405652B2 (en) | Regular expression support in instrumentation languages using kernel-mode executable code | |
US20230334325A1 (en) | Model Training Method and Apparatus, Storage Medium, and Device | |
US20240161474A1 (en) | Neural Network Inference Acceleration Method, Target Detection Method, Device, and Storage Medium | |
CN116560666A (zh) | 基于多层级代码生成的ai前端统一计算方法、装置及介质 | |
CN112990461A (zh) | 构建神经网络模型的方法、装置、计算机设备和存储介质 | |
CN111324344A (zh) | 代码语句的生成方法、装置、设备及可读存储介质 | |
CN114841664A (zh) | 一种多任务处理顺序确定方法及装置 | |
CN115756762A (zh) | 系统调用信息确定方法、装置、电子设备及存储介质 | |
CN114968325A (zh) | 代码注释的生成方法及装置、处理器和电子设备 | |
US11269625B1 (en) | Method and system to identify and prioritize re-factoring to improve micro-service identification | |
CN112633516B (zh) | 性能预测和机器学习编译优化方法及装置 | |
US20210182041A1 (en) | Method and apparatus for enabling autonomous acceleration of dataflow ai applications | |
CN113031952A (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 |