CN101551748A - 一种优化的编译方法 - Google Patents
一种优化的编译方法 Download PDFInfo
- Publication number
- CN101551748A CN101551748A CNA2009100772580A CN200910077258A CN101551748A CN 101551748 A CN101551748 A CN 101551748A CN A2009100772580 A CNA2009100772580 A CN A2009100772580A CN 200910077258 A CN200910077258 A CN 200910077258A CN 101551748 A CN101551748 A CN 101551748A
- Authority
- CN
- China
- Prior art keywords
- function
- optimal
- size
- code
- compile
- 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
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明披露了一种优化的编译方法,该方法包括下述步骤:分别以最优尺寸和最优速度为目标编译源程序;运用典型运算实例分别运行所述最优尺寸和最优速度的编译结果;根据用户给定的编译指标,综合分析程序中各函数在所述不同编译结果中的代码尺寸和运行时间,确定各函数的优选编译方式;将源程序的各函数按所述确定的优选编译方式编译,得到最终的可执行代码。本发明由于在编译过程中引入了典型运算实例,实现了编译过程中代码尺寸与代码效率的最佳平衡。
Description
技术领域
本发明涉及一种计算机的编译方法,具体涉及一种根据待编译内容自动优化编译方案的编译方法。
背景技术
当我们用高级语言书写源程序后,通常需要将其编译成可执行的机器代码,而编译过程有多种编译方式可以使用,不同的编译方式在一定程度上决定了最终代码的性能。一般而言,编译方式主要在以下三个方面决定最终代码的性能:代码的可调试性及编译速度、代码尺寸、代码效率。其中,代码的可调试性及编译速度往往做调试代码之用,最终的产品并不使用;而代码尺寸及代码效率就是非常重要的编译指标,特别是对很多低成本的嵌入式系统,代码尺寸及代码效率往往与系统的性能、成本密切相关,故编译过程不同编译方式的选择至关重要,而不同编译方式的侧重不同,实际编译中不能同时满足代码尺寸最小和运行速度最快两个最优指标,只能选择其一。同时,由于编译过程和运行过程的分离,编译时编译器无法得到各部分代码运行时占用时间的信息,故现有技术中对编译方式的选择多由程序员人为指定的,为了达到代码效率与代码尺寸的平衡,程序员需要能够人工区分代码的耗时部分和体积较大的部分,并同时要对这两个部分指定编译方式,这个过程需要花费精力,也比较繁琐。如何在满足用户给定的编译指标的前提下,自动兼顾其它指标,即在代码尺寸、代码效率等不同性能间进行自动优化与平衡,是编译过程中需要解决的问题。
发明内容
针对现有技术中编译程序不能自动优化的问题,本发明根据编译过程的特点,通过在编译过程中引入典型运算实例,提出了一个新的解决方案。
根据本发明,提供了一种编译方法,该方法包括下述步骤:分别以最优尺寸和最优速度为目标编译源程序;运用典型运算实例分别运行所述最优尺寸和最优速度的编译结果;根据用户给定的编译指标,综合分析程序中各函数在所述不同编译结果中的代码尺寸和运行时间,确定各函数的优选编译方式;将源程序的各函数按所述确定的优选编译方式编译,得到最终的可执行代码。
可选的是,上述用户给定的编译指标为代码尺寸,所述综合分析步骤包括:计算得出各函数在最优尺寸和最优速度的两种编译方式下,增加单位代码尺寸所节省的时间,排列出适合最优速度编译方式的函数的先后顺序;计算所述的用户给定的代码尺寸与最优尺寸编译方式下的差值,确定使用代码速度优化函数能够增加的空间余量;以及,按照所述的适合最优速度编译方式的函数的先后顺序,依次判断各能否在满足用户给定的代码尺寸的前提下,采用最优速度的编译方式,直至所述的代码速度的优化空间余量用尽。
可选的是,上述用户给定的编译指标为运行时间,所述综合分析步骤包括:计算得出各函数在最优尺寸和最优速度的两种编译方式下,增加单位时间所节省的代码尺寸,排列出适合最优尺寸编译方式的函数的先后顺序;计算所述的用户给定的运行时间与最优速度编译方式下的差值,确定使用代码尺寸优化函数所能增长的时间;以及,按照所述的适合最优尺寸编译方式的函数的先后顺序,依次判断各能否在满足用户给定的运行时间的前提下,采用最优尺寸的编译方式,直至所述的代码尺寸的优化时间余量用尽。
可选的是,上述的典型运算实例由用户根据该程序的目的确定。
本发明由于在编译过程中引入了典型运算实例,使得程序运行的精确速度在编译中即可得到的,改变了现有技术的编译时无法知道运行的精确时间,同时,编译过程通过执行这个典型运算实例来自行判断程序的各个函数的不同优化方向,选择各函数的优选编译方式,以达到代码尺寸与代码效率的最佳平衡。
需要说明的是,本发明的上述方法中求得的是近似最优解,但方法简单且速度快,能够满足实际工作需要。
附图说明
下文将参照附图对本发明的具体实施方案进行更详细的举例说明,其中:
图1是本发明的编译方法流程图;
图2是本发明的具体实施例一的综合分析步骤的流程图;
图3是本发明的具体实施例二的综合分析步骤的流程图。
具体实施方式
图1是本发明的编译方法流程图。如图所示,当程序员使用高级语言编写完源程序后,分别使用最优尺寸和最优速度两种方式编译,得到两个可执行的编译结果;根据用户给定的典型运算实例分别执行上述两个编译结果,所谓典型运算实例由用户根据该程序的目的确定,例如对于一个MP3的解码程序,一个MP3编码文件就是一个典型的运算实例;执行完毕后,记录下在每种编译方式下各函数的运行时间和代码尺寸;然后进行综合分析,根据用户的要求,即用户给定的代码尺寸或运行时间,以函数为单位进行综合分析,确定每个函数优选的编译方式,即对该函数采用最优尺寸还是最优速度编译方式;最后,根据上述确定的各函数的优选编译方式编译源程序,得到最终的可执行代码。
图2是本发明的具体实施例一的综合分析步骤的流程图,本实施例中用户给定的指标为代码尺寸。如图所示,综合分析步骤是根据用户给定的指标,综合分析程序中各函数的在不同编译结果中的运行指标,包括该函数的代码尺寸和运行时间,最后确定各函数的优选编译方式,即找出哪些函数在主要编译目标是代码尺寸的前提下,更适合采用最优速度的编译方式,以实现代码的尺寸和速度的兼顾优化。
本实施例中,用户输入给定的指标为代码尺寸size,首先需要将各函数按照适合最优速度编译方式的先后进行排序,通过比较各函数在最优尺寸和最优速度的两种编译方式下,增加单位代码尺寸所节省的时间即可得到该排序。如图所示,整个源代码中有A个需要确认编译效率的函数,分为编号为1,2,3,L,A,在最优体积方式编译下,每个函数的代码大小分别为Sc1,Sc2,L,ScA,运行典型运算实例的时间分别为Tc1,Tc2,L,TcA;在最优速度方式编译下,每个函数的代码大小分别为Se1,Se2,L,SeA,运行典型运算实例的时间分别为Te1,Te2,L,TeA,计算Sn=Sen-Scn,Tn=Tcn-Ten,然后计算Pn=Tn/Sn,Pn即代表了序号为n的函数增加单位代码尺寸所节省的运行时间,Pn越大,代表这个函数在增加相同的代码尺寸的前提下,能够节省更多的运行时间,故该函数更加适合采用最优速度的编译方式。根据上述步骤中得到了各函数的编码效率Pn,然后根据用户给定的代码尺寸size,确定各函数的优选编译方式。将上述P1,P2,L PA这A个数值从大到小排序,得到其顺序排列为Q1,Q2L QA即Q1≥Q2≥L≥QA,其对应关系为从1,2,3,L,A到1,2,3,L,A的一一映射f,即Qm=Pf(m)(m=1,2,L,A)。
其次,考虑可进行代码速度优化的空间,即计算所述的用户给定的代码尺寸与最优尺寸编译方式下的差值。根据用户输入的期望size大小,计算 L越大表明可供优化代码速度的空间越大,同时本实施例中设置一空集合B,用于记录优选编译方式为最优速度的函数。然后,按照上述适合最优速度编译方式的函数的先后顺序,依次判断各能否在满足用户给定的代码尺寸的前提下,采用最优速度的编译方式。首先令循环变量i=1,判断关系式L≥Sf(i)是否成立,如成立,令L=L-Sf(i),并将数值f(i)放入到集合B中,将i加1,重复本句的过程,直到i>A时退出。则序号在集合B中函数使用最优速度方式编译,而其他函数则使用最优尺寸方式编译。
图3是本发明的具体实施例二的综合分析步骤的流程图,本实施例中用户给定的指标为运行时间。如图所示,本实施例比较上述实施例,仅综合分析步骤的有所区别,故此处仅就区别部分展开说明。
本实施例中,用户输入给定的指标为运行时间time,首先需要将各函数按照适合最优尺寸编译方式的先后进行排序,通过比较各函数在最优速度和最优尺寸的两种编译方式下,增加单位代码时间所节省的尺寸即可得到该排序。如图所示,整个源代码中有A个需要确认编译效率的函数,分为编号为1,2,3,L,A,在最优速度方式编译下,每个函数的代码大小分别为Se1,Se2,L,SeA,运行典型运算实例的时间分别为Te1,Te2,L,TeA;在最优体积方式编译下,每个函数的代码大小分别为Sc1,Sc2,L,ScA,运行典型运算实例的时间分别为Tc1,Tc2,L,TcA,计算Sn=Sen-Scn,Tn=Tcn-Ten,然后计算Pn=Tn/Sn,Pn即代表了序号为n的函数增加单位代码尺寸所节省的运行时间,Pn越小,代表这个函数在增加相同的运行时间的前提下,能够节省更多的代码尺寸,故该函数更加适合采用最优尺寸的编译方式。根据上述步骤中得到了各函数的编码效率Pn,然后根据用户给定的运行时间time,确定各函数的优选编译方式。将上述P1,P2,L PA这A个数值从小到大排序,得到其顺序排列为Q1,Q2L QA即Q1≤Q2≤L≤QA,其对应关系为从1,2,3,L,A到1,2,3,L,A的一一映射f,即Qm=Pf(m)(m=1,2,L,A)。
其次,考虑可进行代码尺寸优化的空间,即计算所述的用户给定的运行时间与最优速度编译方式下的运行时间的差值。根据用户输入的期望time大小,计算 K越大表明可供优化代码速度的空间越大,同时本实施例中设置一空集合B,用于记录优选编译方式为最优尺寸的函数。然后,按照上述适合最优尺寸编译方式的函数的先后顺序,依次判断各能否在满足用户给定的运行时间的前提下,采用最优尺寸的编译方式。首先令循环变量i=1,判断关系式K≥Tf(i)是否成立,如成立,令K=K-Tf(i),并将数值f(i)放入到集合B中,将i加1,重复本句的过程,直到i>A时退出。则序号在集合B中函数使用最优尺寸方式编译,而其他函数则使用最优速度方式编译。
应当说明的是,以上描述旨在说明本发明的具体实施方案,不能理解为对本发明的限制,本发明所要求保护的范围仅由权利要求书进行限制。
Claims (4)
1、一种编译方法,其特征在于,所述方法包括下述步骤:
分别以最优尺寸和最优速度为目标编译源程序;
运用典型运算实例分别运行所述最优尺寸和最优速度的编译结果;
根据用户给定的编译指标,综合分析程序中各函数在所述不同编译结果中的代码尺寸和运行时间,确定各函数的优选编译方式;以及,
将源程序的各函数按所述确定的优选编译方式编译,得到最终的可执行代码。
2、根据权利要求1所述的编译方法,其特征在于,所述用户给定的编译指标为代码尺寸,所述综合分析步骤包括:
计算得出各函数在最优尺寸和最优速度的两种编译方式下,增加单位代码尺寸所节省的时间,排列出适合最优速度编译方式的函数的先后顺序;
计算所述的用户给定的代码尺寸与最优尺寸编译方式下的空间差值,确定使用代码速度优化能够增加的空间余量;以及,
按照所述的适合最优速度编译方式的函数的先后顺序,依次判断各个函数能否在满足用户给定的代码尺寸的前提下,采用最优速度的编译方式,直至所述的代码速度的优化空间余量用尽。
3、根据权利要求1所述的编译方法,其特征在于,所述用户给定的编译指标为运行时间,所述综合分析步骤包括:
计算得出各函数在最优尺寸和最优速度的两种编译方式下,增加单位代码尺寸所节省的时间,排列出适合最优尺寸编译方式的函数的先后顺序;
计算所述的用户给定的运行时间与最优速度编译方式下的时间差值,确定使用代码尺寸优化能够增加的时间余量;以及,
按照所述的适合最优尺寸编译方式的函数的先后顺序,依次判断各个函数能否在满足用户给定的运行时间的前提下,采用最优尺寸的编译方式,直至所述的代码尺寸的优化时间余量用尽。
4、根据权利要求1所述的编译方法,其特征在于,所述的典型运算实例由用户根据该程序的目的确定。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100772580A CN101551748B (zh) | 2009-01-21 | 2009-01-21 | 一种优化的编译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100772580A CN101551748B (zh) | 2009-01-21 | 2009-01-21 | 一种优化的编译方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101551748A true CN101551748A (zh) | 2009-10-07 |
CN101551748B CN101551748B (zh) | 2011-10-26 |
Family
ID=41156001
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100772580A Expired - Fee Related CN101551748B (zh) | 2009-01-21 | 2009-01-21 | 一种优化的编译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101551748B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013079006A1 (en) * | 2011-11-29 | 2013-06-06 | Huawei Technologies Co., Ltd. | Systems and Methods for Customizing Optimization/Transformation/ Processing Strategies |
CN105718298A (zh) * | 2014-12-03 | 2016-06-29 | 龙芯中科技术有限公司 | 动态编译方法及装置 |
CN105786586A (zh) * | 2014-12-23 | 2016-07-20 | 龙芯中科技术有限公司 | 热点方法识别方法及装置 |
WO2019241921A1 (en) * | 2018-06-20 | 2019-12-26 | Huawei Technologies Co., Ltd. | Systems and methods for automated compiling |
CN112181421A (zh) * | 2020-08-31 | 2021-01-05 | 北京三快在线科技有限公司 | 代码运行方法、装置及电子设备 |
CN112540767A (zh) * | 2020-12-25 | 2021-03-23 | 北京百度网讯科技有限公司 | 程序代码的生成方法、装置、电子设备及存储介质 |
CN118550549A (zh) * | 2024-07-30 | 2024-08-27 | 浙江大华技术股份有限公司 | 软件编译优化方法、设备以及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070063745A1 (en) * | 2003-04-16 | 2007-03-22 | Koninklijke Philips Electronics N.V. | Support for conditional operations in time-stationary processors |
-
2009
- 2009-01-21 CN CN2009100772580A patent/CN101551748B/zh not_active Expired - Fee Related
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013079006A1 (en) * | 2011-11-29 | 2013-06-06 | Huawei Technologies Co., Ltd. | Systems and Methods for Customizing Optimization/Transformation/ Processing Strategies |
CN103930868A (zh) * | 2011-11-29 | 2014-07-16 | 华为技术有限公司 | 定制优化/转换/处理策略的系统和方法 |
US9081586B2 (en) | 2011-11-29 | 2015-07-14 | Futurewei Technologies, Inc. | Systems and methods for customizing optimization/transformation/ processing strategies |
CN103930868B (zh) * | 2011-11-29 | 2016-12-14 | 华为技术有限公司 | 定制优化/转换/处理策略的系统和方法 |
CN105718298A (zh) * | 2014-12-03 | 2016-06-29 | 龙芯中科技术有限公司 | 动态编译方法及装置 |
CN105718298B (zh) * | 2014-12-03 | 2019-02-15 | 龙芯中科技术有限公司 | 动态编译方法及装置 |
CN105786586B (zh) * | 2014-12-23 | 2018-10-30 | 龙芯中科技术有限公司 | 热点方法识别方法及装置 |
CN105786586A (zh) * | 2014-12-23 | 2016-07-20 | 龙芯中科技术有限公司 | 热点方法识别方法及装置 |
WO2019241921A1 (en) * | 2018-06-20 | 2019-12-26 | Huawei Technologies Co., Ltd. | Systems and methods for automated compiling |
US11221834B2 (en) | 2018-06-20 | 2022-01-11 | Huawei Technologies Co., Ltd. | Method and system of intelligent iterative compiler optimizations based on static and dynamic feedback |
CN112181421A (zh) * | 2020-08-31 | 2021-01-05 | 北京三快在线科技有限公司 | 代码运行方法、装置及电子设备 |
CN112540767A (zh) * | 2020-12-25 | 2021-03-23 | 北京百度网讯科技有限公司 | 程序代码的生成方法、装置、电子设备及存储介质 |
CN112540767B (zh) * | 2020-12-25 | 2023-07-25 | 北京百度网讯科技有限公司 | 程序代码的生成方法、装置、电子设备及存储介质 |
CN118550549A (zh) * | 2024-07-30 | 2024-08-27 | 浙江大华技术股份有限公司 | 软件编译优化方法、设备以及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN101551748B (zh) | 2011-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101551748B (zh) | 一种优化的编译方法 | |
CN110990019B (zh) | 一种Java类分析方法、装置、存储介质及电子设备 | |
CN101231597A (zh) | 智能卡中java程序指令的执行方法 | |
CN102193811B (zh) | 消除内存访问冲突的编译装置及其实现方法 | |
CN104778124A (zh) | 一种软件应用自动化测试方法 | |
CN103116513B (zh) | 一种异构多核处理器编译器 | |
CN112527262B (zh) | 深度学习框架编译器宽度非一致自动向量优化方法 | |
CN109710260B (zh) | 一种基于多平台的小程序代码转换方法 | |
CN103116493A (zh) | 一种应用于粗粒度可重构阵列的自动映射方法 | |
KR20180034626A (ko) | 데이터 처리 그래프 컴파일 | |
CN102289362A (zh) | 分段符号执行装置及其工作方法 | |
CN102880474A (zh) | 并行源代码生成、编译及驱动执行的测试方法 | |
CN101271397A (zh) | 一种嵌套循环结构的识别方法 | |
CN101944040A (zh) | 一种基于谓词的自动并行优化方法 | |
CN103207786A (zh) | 渐进式智能回溯向量化代码调优方法 | |
US20070050380A1 (en) | Nullable and late binding | |
CN101271398A (zh) | 多路分支结构的识别方法 | |
CN102455941B (zh) | 一种基于范式的多任务调度方法、装置 | |
CN102929853A (zh) | 基于Excel表单关联的DCS项目数据生成系统和方法 | |
CN107340995A (zh) | 一种牵引控制应用软件开发系统 | |
CN1912848A (zh) | 一种对编译器中的错误进行自动定位的方法 | |
CN104750533A (zh) | C程序编译方法及编译器 | |
CN110908668A (zh) | 用于编译电池检测系统脚本程序的编译器 | |
CN103116319B (zh) | 数控系统中实现加工刀具自动选用控制的方法 | |
CN113050948B (zh) | 动态库优化方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20111026 Termination date: 20180121 |