CN106126311A - 一种基于代数演算的中间代码优化方法 - Google Patents
一种基于代数演算的中间代码优化方法 Download PDFInfo
- Publication number
- CN106126311A CN106126311A CN201610456922.2A CN201610456922A CN106126311A CN 106126311 A CN106126311 A CN 106126311A CN 201610456922 A CN201610456922 A CN 201610456922A CN 106126311 A CN106126311 A CN 106126311A
- Authority
- CN
- China
- Prior art keywords
- program
- algebraically
- code
- optimization method
- optimizing
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提出了一种基于代数演算的中间代码优化方法,包括:高级语言转换步骤,将输入的源代码、其他形式的中间语言程序转换成为所述优化方法使用的中间语言程序,所述其他形式的中间语言指与所述优化方法所使用的中间语言不同的中间语言;优化步骤,向用户提供优化策略定制,允许用户提供目标平台硬件特性,定制特别的优化策略,使用优化策略对所述高级语言转换步骤的中间语言进行优化,得到经过优化的中间代码;目标代码生成步骤,将经过优化的中间代码生成目标平台的可执行机器码。本发明基于形式化代数语义,所有的输入代码都可以在代数规则的支持下进行等价变化。代数规则的合理性,保证了转换的正确性。
Description
技术领域
本发明涉及形式化语义领域,尤其涉及基于代数演算的中间代码优化方法。
背景技术
嵌入式方法的硬件往往根据具体应用而定制,为了获得更多的软件支持,通常需要编写专用的编译器以完成高级语言到具体的目标平台代码的转换,并同时满足嵌入式方法对高性能、高可靠性、低功耗等要求。不同目标平台拥有不同的特性,开发目标平台专用的编译器往往成本太高。本发明提出了基于代数演算的中间代码方法,根据可由用户定制的优化策略,对中间代码进行优化,生成高效的目标平台机器码。
发明内容
本发明提出了基于代数演算的中间代码优化方法,所述方法包括:
高级语言转换步骤,将输入的源代码、其他形式的中间语言程序转换成为所述优化方法使用的中间语言程序,所述其他形式的中间语言指与所述优化方法所使用的中间语言不同的中间语言;
优化步骤,向用户提供优化策略定制,允许用户提供目标平台硬件特性,定制特别的优化策略,使用优化策略对所述高级语言转换步骤的中间语言进行优化,得到经过优化的中间代码;
目标代码生成步骤,将经过优化的中间代码生成目标平台的可执行机器码。
其中,所述优化步骤中向用户提供优化策略定制包括:
对优化后的中间语言程序进行控制流和数据流分析,总结出优化目标并转换为代数规则。
其中,所述优化目标包括消除复杂算子或消除循环冗余。
其中,对优化后的中间语言程序进行控制流分析得到该程序的循环结构,通过把所述循环转换为有限条件选择来消除循环。
其中,所述代数规则为代数等式的形式,等式左边是优化前的结构,等式右边是优化后的结构。
其中,对所述中间语言程序进行到达定值数据流分析,得到该程序中每个点处的变量值,从而对所述程序进行合并已知量的优化操作。
其中,此时代数规则表现为代数等式的形式,等式左侧位变量组成的表达式,而等式右侧为左侧表达式当前的值,此优化规则减少公共表达式计算的次数。
其中,所述优化步骤中向用户提供优化策略定制包括:
对优化后中间语言程序进行大量的仿真实验,分析实验结果得出优化目标并转换为代数规则。
其中,不同程序的应用场景不同,利用程序仿真模拟运行场景,收集程序运行时信息,制定优化方向,使得优化更符合当前待优化程序的特点。
本发明的有益效果包括:
本发明基于形式化代数语义,所有的输入代码都可以在代数规则的支持下进行等价变化。代数规则的合理性,保证了转换的正确性。
本发明根据不同的优化策略,可以对中间语言进行不同程度的优化,保证本方法广泛的应用范围。
本发明提供半自动化、半自动化的程序中间代码优化。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明基于代数演算的中间代码优化方法流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
根据本发明的实施方式,提出一种基于代数演算的中间代码优化方法,所述方法包括:高级语言转换步骤,将输入的源代码、其他形式的中间语言程序转换成为所述优化方法使用的中间语言程序,所述其他形式的中间语言指与所述优化方法所使用的中间语言不同的中间语言;
优化步骤,向用户提供优化策略定制,允许用户提供目标平台硬件特性,定制特别的优化策略,使用优化策略对所述高级语言转换步骤的中间语言进行优化,得到经过优化的中间代码;
目标代码生成步骤,将经过优化的中间代码生成目标平台的可执行机器码。
其中,所述优化步骤中向用户提供优化策略定制包括:
对优化后的中间语言程序进行控制流和数据流分析,总结出优化目标并转换为代数规则。
其中,所述优化目标包括消除复杂算子或消除循环冗余。
其中,对优化后的中间语言程序进行控制流分析得到该程序的循环结构,通过把所述循环转换为有限条件选择来消除循环。
其中,所述代数规则为代数等式的形式,等式左边是优化前的结构,等式右边是优化后的结构。
其中,对所述中间语言程序进行到达定值数据流分析,得到该程序中每个点处的变量值,从而对所述程序进行合并已知量的优化操作。
其中,此时代数规则表现为代数等式的形式,等式左侧位变量组成的表达式,而等式右侧为左侧表达式当前的值,此优化规则减少公共表达式计算的次数。
其中,所述优化步骤中向用户提供优化策略定制包括:
对优化后中间语言程序进行大量的仿真实验,分析实验结果得出优化目标并转换为代数规则。
其中,不同程序的应用场景不同,利用程序仿真模拟运行场景,收集程序运行时信息,制定优化方向,使得优化更符合当前待优化程序的特点。
下面具体讲述本发明所述基于代数演算的中间代码优化方法。
实施例1
本实施例以应用本发明基于代数演算的中间代码优化方法对LLVM中间语言的优化为例。
LLVM是一个支持多种高级语言、多种目标平台,多阶段优化的编译器架构,遵循了标准的编译器流程准则,分为高级语言前端、中间代码优化器与后端目标代码生成器三个部分。LLVM前端首先将源程序转换为LLVMIR程序,经过一系列的控制流、数据流分析后对LLVM IR程序进行优化,再根据具体的目标处理器平台生成对应的目标代码。
LLVM IR有三种形式:编译器IR、写入文件的字节码IR,以及作为汇编语言的IR。这三种表现形式是等价的,它是LLVM中间代码优化段的不同表现形式。将LLVM IR作为高级语言转换模块的输入,将其转换为本发明所述的基于代数演算的中间代码优化方法使用的中间语言程序,作为代数系统模块的输入。
通过对控制流与数据流的分析,目标处理平台的特征等信息收集,我们将提出程序转化的定向规则,称为程序转换规则,从而有效地支撑LLVM IR程序的优化,提高程序质量,最终形成一套针对LLVM IR程序优化的代数演算方法,然后利用策略定制器将代数演算方法存入优化策略库。
优化器可以利用优化策略对中间代码进行标准的标量优化、循环优化以及进程间优化等。
目标代码生成模块可以根据代数系统模块优化过的中间代码,来生成可在目标平台上高效运行的机器码。
下面详细介绍使用本发明所述系统对LLVM IR程序进行优化。
首先,对LLVM IR程序应用本发明的方法,将其转换为一种中间语言表示形式。
然后,使用本发明为LLVM IR制定优化策略,优化策略通过以下两种方式得到:
1)对LLVM IR程序进行控制流和数据流分析,总结出优化目标(如消除复杂算子、消除循环冗余等)并转换为代数规则。对程序进行控制流分析可以得到程序的控制流结构,得到循环结构后可以通过把循环转换为有限条件选择来消除循环。此处得到的优化规则可以为代数等式的形式,等式左边是优化前的结构,等式右边是优化后的结构。对程序进行到达定值数据流分析,可以得到程序中每个点处的变量值,因此可以对程序进行合并已知量的优化操作。此时优化规则表现为代数等式的形式,等式左侧位变量组成的表达式,而等式右侧为左侧表达式当前的值,此优化规则可减少公共表达式计算的次数。
2)对LLVM IR程序进行大量的仿真实验,分析实验结果得出优化目标并转换为代数规则。不同程序的应用场景不同,利用程序仿真可以模拟一些运行场景,收集程序运行时信息(CUP使用率、I/O次数、是否可并行执行等),制定优化方向,使得优化更符合当前待优化程序的特点。
得到优化策略以后,优化器会自动的应用优化策略到中间语言表示的程序上,最终达到优化的目的。
最后,可以根据优化过的中间代码,来生成可在目标平台上高效运行的机器码。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (9)
1.一种基于代数演算的中间代码优化方法,其特征在于,包括:
高级语言转换步骤,将输入的源代码、其他形式的中间语言程序转换成为所述优化方法使用的中间语言程序,所述其他形式的中间语言指与所述优化方法所使用的中间语言不同的中间语言;
优化步骤,向用户提供优化策略定制,允许用户提供目标平台硬件特性,定制特别的优化策略,使用优化策略对所述高级语言转换步骤的中间语言进行优化,得到经过优化的中间代码;
目标代码生成步骤,将经过优化的中间代码生成目标平台的可执行机器码。
2.如权利要求1所述的基于代数演算的中间代码优化方法,其特征在于,所述优化步骤中向用户提供优化策略定制包括:
对优化后的中间语言程序进行控制流和数据流分析,总结出优化目标并转换为代数规则。
3.如权利要求2所述的基于代数演算的中间代码优化方法,其特征在于,所述优化目标包括消除复杂算子或消除循环冗余。
4.如权利要求2所述的基于代数演算的中间代码优化方法,其特征在于,对优化后的中间语言程序进行控制流分析得到该程序的循环结构,通过把所述循环转换为有限条件选择来消除循环。
5.如权利要求4所述的基于代数演算的中间代码优化方法,其特征在于,所述代数规则为代数等式的形式,等式左边是优化前的结构,等式右边是优化后的结构。
6.如权利要求2所述的基于代数演算的中间代码优化方法,其特征在于,对所述中间语言程序进行到达定值数据流分析,得到该程序中每个点处的变量值,从而对所述程序进行合并已知量的优化操作。
7.如权利要求6所述的基于代数演算的中间代码优化方法,其特征在于,此时代数规则表现为代数等式的形式,等式左侧位变量组成的表达式,而等式右侧为左侧表达式当前的值,此优化规则减少公共表达式计算的次数。
8.如权利要求1所述的基于代数演算的中间代码优化方法,其特征在于,所述优化步骤中向用户提供优化策略定制包括:
对优化后中间语言程序进行大量的仿真实验,分析实验结果得出优化目标并转换为代数规则。
9.如权利要求8所述的基于代数演算的中间代码优化方法,其特征在于,不同程序的应用场景不同,利用程序仿真模拟运行场景,收集程序运行时信息,制定优化方向,使得优化更符合当前待优化程序的特点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610456922.2A CN106126311B (zh) | 2016-06-22 | 2016-06-22 | 一种基于代数演算的中间代码优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610456922.2A CN106126311B (zh) | 2016-06-22 | 2016-06-22 | 一种基于代数演算的中间代码优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106126311A true CN106126311A (zh) | 2016-11-16 |
CN106126311B CN106126311B (zh) | 2019-06-14 |
Family
ID=57267899
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610456922.2A Active CN106126311B (zh) | 2016-06-22 | 2016-06-22 | 一种基于代数演算的中间代码优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106126311B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108920130A (zh) * | 2017-04-17 | 2018-11-30 | 北京京东尚科信息技术有限公司 | 一种Java代码优化的方法和装置 |
CN116166276A (zh) * | 2023-04-25 | 2023-05-26 | 芯瞳半导体技术(山东)有限公司 | 一种控制流分析方法、装置、设备、介质及产品 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697121A (zh) * | 2009-10-26 | 2010-04-21 | 哈尔滨工业大学 | 一种基于程序源代码语义分析的代码相似度检测方法 |
CN105260222A (zh) * | 2015-10-13 | 2016-01-20 | 哈尔滨工程大学 | 一种可重构编译器中循环流水迭代间启动间距优化方法 |
US20160019035A1 (en) * | 2014-07-17 | 2016-01-21 | Google Inc. | Optimized execution of dynamic languages |
-
2016
- 2016-06-22 CN CN201610456922.2A patent/CN106126311B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697121A (zh) * | 2009-10-26 | 2010-04-21 | 哈尔滨工业大学 | 一种基于程序源代码语义分析的代码相似度检测方法 |
US20160019035A1 (en) * | 2014-07-17 | 2016-01-21 | Google Inc. | Optimized execution of dynamic languages |
CN105260222A (zh) * | 2015-10-13 | 2016-01-20 | 哈尔滨工程大学 | 一种可重构编译器中循环流水迭代间启动间距优化方法 |
Non-Patent Citations (1)
Title |
---|
董峰: ""LLVM编译系统结构分析与后端移植"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108920130A (zh) * | 2017-04-17 | 2018-11-30 | 北京京东尚科信息技术有限公司 | 一种Java代码优化的方法和装置 |
CN116166276A (zh) * | 2023-04-25 | 2023-05-26 | 芯瞳半导体技术(山东)有限公司 | 一种控制流分析方法、装置、设备、介质及产品 |
CN116166276B (zh) * | 2023-04-25 | 2023-07-11 | 芯瞳半导体技术(山东)有限公司 | 一种控制流分析方法、装置、设备、介质及产品 |
Also Published As
Publication number | Publication date |
---|---|
CN106126311B (zh) | 2019-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8601453B2 (en) | COBOL to bytecode translation | |
TW200508973A (en) | An extensible type system for representing and checking consistency of program components during the process of compilation | |
US20120079463A1 (en) | Automatic synchronous-to-asynchronous software application converter | |
CN103377035A (zh) | 针对粗颗粒度流应用的流水并行化方法 | |
JP5936118B2 (ja) | コード変換方法、プログラム及びシステム | |
CN111666071B (zh) | 一种基于目标众核的对抗网络移植与优化的方法及系统 | |
CN109799971A (zh) | 一种文件生成装置和方法 | |
Streit et al. | Sambamba: A runtime system for online adaptive parallelization | |
CN101344855A (zh) | 一种基于编译的跟踪代码中特定对象的控制方法及装置 | |
CN104484192B (zh) | 一种复杂多分支结构代码自动生成的方法 | |
US8732679B2 (en) | Loop transformation for computer compiler optimization | |
CN101944040A (zh) | 一种基于谓词的自动并行优化方法 | |
CN105302624B (zh) | 一种可重构编译器中循环流水迭代间启动间距自动分析方法 | |
CN106126311B (zh) | 一种基于代数演算的中间代码优化方法 | |
CN103559069B (zh) | 一种基于代数系统的跨文件过程间优化方法 | |
US20090249317A1 (en) | Xslt-specific jit compiler | |
CN105260222B (zh) | 一种可重构编译器中循环流水迭代间启动间距优化方法 | |
CN104750533A (zh) | C程序编译方法及编译器 | |
CN112558977B (zh) | 面向异构众核后端基于代价模型的多面体优化方法 | |
CN106126312B (zh) | 一种基于代数演算的中间代码优化系统 | |
CN105260166B (zh) | 一种应用于机器学习线程划分的手工样本集生成方法 | |
JP2007334643A (ja) | プログラム実行方法、プログラム、およびプログラム実行システム | |
Prokesch et al. | Towards automated generation of time-predictable code | |
Steingartner et al. | Learning tools in course on semantics of programming languages | |
Park et al. | XLA-NDP: Efficient Scheduling and Code Generation for DL Model Training on Near-Data Processing Memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |